Настройка NFS на Ubuntu Bionic

Для проверки понадобится две системы

  • одна будет серверной частью (srv-server)
  • другая клиентской (srv-bionic)

Произвожу преднастройки двух систем скриптом из локальной сети созданным под себя, Вы же либо оставляете развернутую систему дефолтной или же своим скриптом или ручками приводите к работе в продуктиве или тесту.

hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

sudo ./dproject/default

Шаг №1: На хосте

Устанавливаю роль NFS (используемая версия 3):

ekzorchik@srv-server:~$ sudo apt-get install nfs-kernel-server -y

ekzorchik@srv-server:~$ dpkg -l nfs-kernel-server

Desired=Unknown/Install/Remove/Purge/Hold

| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend

|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)

||/ Name Version Architecture Description

+++-==============-============-============-=================================

ii nfs-kernel-ser 1:1.3.4-2.1u amd64 support for NFS kernel server

ekzorchik@srv-server:~$ cat /etc/services | grep nfs

nfs 2049/tcp # Network File System

nfs 2049/udp # Network File System

ekzorchik@srv-server:~$ sudo mkdir /srv/backup

ekzorchik@srv-server:~$ sudo chown nobody:nogroup /srv/backup

ekzorchik@srv-server:~$ sudo nano /etc/exports

# 172.33.33.0/24 — подключить NFS ресурс могут любые хосты из указанной сети

# * - подключить NFS ресурс могут любые хосты вообщем

# client1 - подключить NFS ресурс может только хост с именем client1

/srv/backup 172.33.33.0/24(rw,sync,no_subtree_check,no_root_squash)

ekzorchik@srv-server:~$ sudo systemctl restart nfs-kernel-server && sudo systemctl status nfs-kernel-server | head -n5

● nfs-server.service - NFS server and services

Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)

Active: active (exited) since Wed 2019-05-15 19:35:52 MSK; 13ms ago

Process: 7979 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)

Process: 7978 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)

Либо же без перезапуска сервиса вот так:

ekzorchik@srv-server:~$ sudo exportfs -a

ekzorchik@srv-server:~$ sudo exportfs

/srv/backup 172.33.33.0/24

Чтобы отобразить какие ресурсы и для кого расшарены:

ekzorchik@srv-server:~$ sudo showmount -e

Export list for srv-bionic:

/srv/backup 172.33.33.0/24

Шаг №2: На клиенте

ekzorchik@srv-bionic:~$ sudo apt-get install -y nfs-common

ekzorchik@srv-bionic:~$ sudo mkdir /backup

ekzorchik@srv-bionic:~$ sudo mount 172.33.33.2:/srv/backup /backup

ekzorchik@srv-bionic:~$ df -h | grep /backup

172.33.33.2:/srv/backup 39G 2.1G 35G 6% /backup

ekzorchik@srv-bionic:~$ sudo nfsstat -m

/backup from 172.33.33.2:/srv/backup

Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.33.33.18,local_lock=none,addr=172.33.33.2

Шаг №3: Также считаю важным на сервер где поднята роль NFS активировать брандмауэр с разрешение с каких систем к нему можно подключаться с использованием NFS:

ekzorchik@srv-server:~$ sudo sed -i "s/IPV6=yes/IPV6=no/" /etc/default/ufw

ekzorchik@srv-server:~$ sudo ufw enable

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y

Firewall is active and enabled on system startup

ekzorchik@srv-bionic:~$ sudo ufw default deny incoming

ekzorchik@srv-bionic:~$ sudo ufw default allow outgoing

ekzorchik@srv-server:~$ sudo ufw allow from 172.33.33.0/24 to 172.33.33.2 port 2049 proto tcp

ekzorchik@srv-server:~$ sudo ufw allow from 172.33.33.0/24 to 172.33.33.2 port 2049 proto udp

ekzorchik@srv-server:~$ sudo ufw allow from 172.33.33.0/24 to 172.33.33.2 port 22 proto tcp

ekzorchik@srv-server:~$ sudo ufw status

Status: active

To Action From

-- ------ ----

22/tcp ALLOW Anywhere

172.33.33.2 2049/tcp ALLOW 172.33.33.0/24

172.33.33.2 2049/udp ALLOW 172.33.33.0/24

172.33.33.2 22/tcp ALLOW 172.33.33.0/24

ekzorchik@srv-server:~$

ekzorchik@srv-server:~$ sudo ufw delete allow from any to any port 22 proto tcp

ekzorchik@srv-server:~$ sudo ufw logging on

Итого текущая политика на сервере по безопасности:

ekzorchik@srv-server:~$ sudo ufw status verbose

Status: active

Logging: on (low)

Default: deny (incoming), allow (outgoing), disabled (routed)

New profiles: skip

To Action From

-- ------ ----

172.33.33.2 2049/tcp ALLOW IN 172.33.33.0/24

172.33.33.2 2049/udp ALLOW IN 172.33.33.0/24

172.33.33.2 22/tcp ALLOW IN 172.33.33.0/24

ekzorchik@srv-server:~$

Вот так и должно быть, поднята роль, оттестирована на работоспособность и безопасность, на сервере поднят брандмауэр. Но опять же повторюсь, все настройки должны быть задокументированы чтобы после не ломать голову добавляя что-то и почему не работает. Обычно три раза наступаешь на собственные грабли и умнеешь. На этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.