
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 updatesudo 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 использует глобальный корневой каталог, и экспортируемые каталоги определяются относительно него. Вы можете связать точку монтирования общего ресурса с каталогами, которые хотите экспортировать, с помощью монтирования bind.
В этом примере мы настроим каталог /srv/nfs4 как корневой каталог NFS. Чтобы лучше объяснить, как настроить монтирование NFS, мы используем два каталога ( /var/www и /opt/backups ) с разными настройками. Владелец каталога /var/www/ — пользователь www-data , а владелец /opt/backups — пользователь root .
Сначала создайте корневой каталог и точки монтирования общего ресурса:
sudo mkdir -p /srv/nfs4/backupssudo mkdir -p /srv/nfs4/www
Привяжите монтирование каталогов к точкам монтирования общего ресурса:
sudo mount --bind /opt/backups /srv/nfs4/backupssudo 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 на смонтированных общих ресурсах, сопоставляя 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 updatesudo 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 /backupssudo mkdir -p /srv/www
Вы можете создавать каталоги в любом удобном для вас месте.
Смонтируйте экспортированные файловые системы с помощью команды mount :
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backupssudo 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 вместо /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 как пользователь 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 , у которых нет прав на запись в удаленный общий ресурс.
Предполагая, что у вас есть 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 по умолчанию зашифрован и гораздо проще в настройке и использовании.
Если у вас возникнут какие-либо вопросы, не стесняйтесь оставлять комментарии.
Терминал монтирования nfs в Ubuntu Не используете Ubuntu 20.04?
Выберите другую ОС: центос 8 убунту 18.04
Связанные руководства
- Как установить и настроить NFS-сервер в Ubuntu 18.04
- Как установить и настроить NFS-сервер на CentOS 8
- Как смонтировать общий ресурс NFS в Linux
- Как добавлять и удалять пользователей в Ubuntu 20.04
- Как установить и использовать Curl в Ubuntu 20.04
- Как установить или изменить часовой пояс в Ubuntu 20.04
- Как смонтировать общий ресурс Windows в Linux с помощью CIFS