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

12 set 2022 7 min di lettura
Как установить и настроить сервер NFS в Ubuntu 20.04
Indice dei contenuti

Введение

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

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

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

Предпосылки

Мы будем использовать две машины: одну с Ubuntu 20.04 LTS, которая будет действовать как сервер 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

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

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

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

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

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

export host(options)

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

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

sudo nano /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)
/etc/экспорт

Первая строка содержит параметр 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 на подключенных общих ресурсах путем сопоставления UID и GID root с UID /GID nobody /nogroup.

Чтобы пользователи на клиентских компьютерах имели доступ, 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.

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

Имя пакета, в который входят программы для монтирования файловых систем NFS в дистрибутивах на основе Debian, — nfs-common. Чтобы установить его, запустите:

sudo apt update
sudo apt install nfs-common

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

В Red Hat и ее производных установите пакет nfs-utils:

sudo yum install nfs-utils

Смонтируйте файловые системы

Мы будем работать на клиентской машине с 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.10 — это IP-адрес NFS-сервера. Вы также можете использовать имя хоста вместо IP-адреса, но оно должно быть разрешено клиентской машиной. Обычно это делается путем сопоставления имени хоста с IP-адресом в /etc/hosts.

При монтировании файловой системы NFSv4 не указывайте корневой каталог NFS. Используйте /backups 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
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 от имени пользователя root с помощью команды sudo:

sudo touch /srv/www/test.txt

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

touch: cannot touch '/srv/www': Permission denied

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

Предполагая, что вы использовали 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 зашифрован по умолчанию, и его намного проще настроить и использовать.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.