ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как установить и настроить сервер NFS в Ubuntu 20.04

Как настроить сервер NFS на Ubuntu

NFS или сетевая файловая система – это протокол распределенной файловой системы, который позволяет вам совместно использовать каталоги по сети. С помощью NFS вы можете монтировать удаленные каталоги в своей системе и работать с файлами на удаленном компьютере, как если бы они были локальными файлами.

По умолчанию протокол NFS не зашифрован и не обеспечивает аутентификацию пользователя. Доступ к серверу ограничен IP-адресами или именами хостов клиента.

В этой статье объясняется, как настроить сервер NFSv4 в Ubuntu 20.04. Мы также покажем вам, как смонтировать файловую систему NFS на клиентском компьютере.

 

Предпосылки

Мы будем использовать две машины: одна с Ubuntu 20.04, которая будет действовать как сервер NFS, а другая с любым другим дистрибутивом Linux, на котором мы будем монтировать общий ресурс. Сервер и клиенты должны иметь возможность общаться друг с другом по частной сети. Вы можете использовать общедоступные IP-адреса и настроить брандмауэр сервера, чтобы разрешить трафик на порт 2049только из надежных источников.

Машины в этом примере имеют следующие IP-адреса:

NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range

 

Настройте сервер NFS

Первым шагом является настройка сервера NFS. Мы установим необходимые пакеты, создадим и экспортируем каталоги NFS и настроим брандмауэр.

 

Установка сервера NFS

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

sudo apt update
sudo apt install nfs-kernel-server

 

После завершения установки службы NFS запустятся автоматически.

В Ubuntu 20.04 NFS версии 2 отключена. Версии 3 и 4 включены. Вы можете убедиться в этом, выполнив команду cat:

sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

 

NFSv2 сейчас довольно старый, и нет причин для его включения.

Конфигурация сервера NFS определяется файлы /etc/default/nfs-kernel-server и /etc/default/nfs-common. Для большинства ситуаций достаточно настроек по умолчанию.

 

Создание файловых систем

Сервер NFSv4 использует глобальный корневой каталог, и экспортируемые каталоги относятся к этому каталогу. Вы можете связать точку монтирования общего ресурса с каталогами, которые хотите экспортировать, с помощью привязки монтирования.

В этом примере мы установим каталог /srv/nfs4 как корень NFS. Чтобы лучше объяснить, как можно настроить монтирование NFS, мы собираемся поделиться двумя каталогами (/var/www и /opt/backups) с разными настройками конфигурации. Объект /var/www/ принадлежит пользователю www-data, а /opt/backups принадлежит root.

Сначала создайте корневой каталог и точки монтирования общего ресурса:

sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www

 

Привязать монтирование каталогов к точкам монтирования общего ресурса:

sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www

 

Чтобы сделать привязку монтирования постоянным после перезагрузки, откройте файл /etc/fstab:

sudo nano /etc/fstab

 

и добавьте следующие строки:

/etc/fstab
/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0

 

Экспорт файловых систем

Следующим шагом является добавление файловых систем, которые будут экспортированы, и клиентов, которым разрешен доступ к этим общим папкам в файл /etc/exports.

Каждая строка для экспортированной файловой системы имеет следующий вид:

export host(options)

 

Где export находится экспортированный каталог, host это имя хоста или IP-адрес/диапазон, которые могут получить доступ к экспорту, и options являются параметрами хоста.

Откройте файл /etc/exports и добавьте следующие строки:

sudo nano /etc/exports
/etc/exports
/srv/nfs4         192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www     192.168.33.20(rw,sync,no_subtree_check)

 

Первая строка содержит параметр fsid=0, определяющий корневой каталог NFS (/srv/nfs4). Доступ к этому тому NFS разрешен только клиентам из подсети 192.168.33.0/24. Опция crossmnt требуется для совместного использования каталогов, которые являются подкаталогами экспортированного каталога.

Вторая строка показывает, как указать несколько правил экспорта для одной файловой системы. Доступ для чтения разрешен для всего диапазона 192.168.33.0/24, а доступ для чтения и записи только для IP-адреса 192.168.33.3. Опция sync указывает NFS записывать изменения на диск перед ответом.

Последняя строка не требует пояснений. Для получения дополнительной информации обо всех доступных опциях введите man exportsв вашем терминале.

Сохраните файл и экспортируйте акции:

sudo exportfs -ar

 

Вам нужно запускать указанную выше команду каждый раз, когда вы изменяете файл /etc/exports. Если есть какие-либо ошибки или предупреждения, они будут отображаться на терминале.

Чтобы просмотреть текущий активный экспорт и его состояние, используйте:

sudo exportfs -v

 

В вывод будут включены все акции с их опционами. Как видите, есть также параметры, которые мы не определили в файле /etc/exports. Это параметры по умолчанию, и если вы хотите их изменить, вам необходимо явно установить эти параметры.

/srv/nfs4/backups
		192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 	192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4     	192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
		192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

 

В Ubuntu root_squash включен по умолчанию. Это один из наиболее важных параметров безопасности NFS. Он запрещает пользователям root, подключенным с клиентов, иметь привилегии root на подключенных общих ресурсах путем сопоставления root UID и GID с nobody/nogroup UID/GID.

Чтобы пользователи на клиентских машинах имели доступ, NFS ожидает, что идентификаторы пользователя и группы клиента совпадают с идентификаторами на сервере. Другой вариант – использовать функцию отображения идентификаторов NFSv4, которая переводит идентификаторы пользователей и групп в имена и наоборот.

Вот и все. На этом этапе вы настроили сервер NFS на своем сервере Ubuntu. Теперь вы можете перейти к следующему шагу и настроить клиентов и подключиться к серверу NFS.

 

Конфигурация межсетевого экрана

Если вы устанавливаете Jenkins на удаленный сервер Ubuntu, защищенный брандмауэром , вам необходимо включить трафик на порт NFS:

sudo ufw allow from 192.168.33.0/24 to any port nfs

 

Проверьте изменение:

sudo ufw status

 

Вывод должен показать, что трафик на порт 2049 разрешен:

To                         Action      From
--                         ------      ----
2049                       ALLOW       192.168.33.0/24           
22/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)  

 

Настройка клиентов NFS

Теперь, когда сервер NFS настроен и общие ресурсы экспортированы, следующим шагом является настройка клиентов и монтирование удаленных файловых систем.

Мы сосредоточимся на системах Linux, но вы также можете подключить общий ресурс NFS на компьютерах с macOS и Windows.

 

Установка клиента NFS

На клиентских машинах нам нужно установить только инструменты, необходимые для монтирования удаленной файловой системы NFS.

 

Монтирование файловых систем

Мы будем работать на клиентской машине с IP 192.168.33.20, которая имеет доступ для чтения и записи к файловой системе /srv/nfs4/www и доступ только для чтения к файловой системе /srv/nfs4/backups.

Создайте два новых каталога для точек монтирования:

sudo mkdir -p /backups
sudo mkdir -p /srv/www

 

Вы можете создавать каталоги в любом месте, где захотите.

Смонтируйте экспортированные файловые системы с помощью команды mount:

sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www

 

Где 192.168.33.10IP сервера NFS. Вы также можете использовать имя хоста вместо IP-адреса, но оно должно быть разрешено клиентским компьютером. Обычно это делается путем сопоставления имени хоста с IP-адресом в файле /etc/hosts.

При монтировании файловой системы NFSv4 опускайте корневой каталог NFS. Используйте /backups вместо /srv/nfs4/backups.

Убедитесь, что удаленные файловые системы успешно смонтированы, используя команду mount или команду df:

df -h

 

Команда распечатает все смонтированные файловые системы. Последние две строки – это смонтированные совместные ресурсы:

Filesystem              Size  Used Avail Use% Mounted on
udev                    951M     0  951M   0% /dev
tmpfs                   199M  676K  199M   1% /run
/dev/sda3               124G  2.8G  115G   3% /
tmpfs                   994M     0  994M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               456M  197M  226M  47% /boot
tmpfs                   199M     0  199M   0% /run/user/1000
192.168.33.10:/backups  124G  2.8G  115G   3% /backups
192.168.33.10:/www      124G  2.8G  115G   3% /srv/www

 

Чтобы сделать монтирование постоянным при перезагрузке, откройте файл /etc/fstab и добавьте следующие строки:

sudo nano /etc/fstab
/etc/fstab
192.168.33.10:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev	0 0
192.168.33.10:/www /srv/www       nfs   defaults,timeo=900,retrans=5,_netdev	0 0

 

Для получения информации о доступных параметрах монтирования файловой системы NFS введите man nfs в свой терминал.

Другой вариант монтировать удаленные файловые системы – использовать инструмент autofs или создать модуль systemd.

 

Тестирование доступа по NFS

Давайте протестируем доступ к общим ресурсам, создав для каждой из них новый файл.

Сначала попробуйте создать в каталоге тестовый файл /backups с помощью команды touch:

sudo touch /backups/test.txt

 

Файловая система /backup экспортируется как только для чтения, и, как ожидается, вы увидите сообщение об ошибке Permission denied:

touch: cannot touch ‘/backups/test’: Permission denied

 

Затем попробуйте создать тестовый файл в каталоге /srv/www в качестве корневого с помощью команды sudo:

sudo touch /srv/www/test.txt

 

Вы снова увидите сообщение Permission denied.

touch: cannot touch ‘/srv/www’: Permission denied

 

Если вы помните, каталог /var/www принадлежит к пользователю www-data, и эта доля имеет опцию root_squash, которая отображает набор корневого пользователя к пользователю nobody и группе nogroup, которая не имеет права на запись на удаленном ресурсе.

Предполагая, что у вас есть www-data на клиентском компьютере с тем же, что UID и GID на удаленном сервере (что должно быть, если, например, вы установили nginx на обеих машинах), вы можете попытаться создать файл как пользователь www-data:

sudo -u www-data touch /srv/www/test.txt

 

Команда не покажет никаких выходных данных, что означает, что файл был успешно создан.

Чтобы проверить это, перечислите файлы в каталоге /srv/www:

ls -la /srv/www

 

На выходе должен отобразиться только что созданный файл:

drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root     root     4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data    0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data    0 Apr 10 22:18 test.txt

 

Размонтирование файловой системы NFS

Если удаленный общий ресурс NFS больше не нужен, вы можете размонтировать его, как и любую другую подключенную файловую систему, с помощью команды umount.

Например, чтобы отключить общий ресурс /backup, вы должны запустить:

sudo umount /backups

 

Если точка монтирования определена в файле /etc/fstab, убедитесь, что вы удалили строку или закомментировали ее, добавив # в начале строки.

 

Заключение

Мы показали вам, как настроить сервер NFS и как смонтировать удаленные файловые системы на клиентских машинах. Если вы внедряете NFS в производство и обмениваетесь разумными данными, рекомендуется включить аутентификацию Kerberos.

В качестве альтернативы NFS вы можете использовать SSHFS для монтирования удаленных каталогов через SSH-соединение. SSHFS по умолчанию зашифрован, и его гораздо проще настроить и использовать.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

Exit mobile version