Сетевая файловая система (NFS) — это протокол распределенной файловой системы, который позволяет вам обмениваться удаленными каталогами по сети. С помощью NFS вы можете монтировать удаленные каталоги в своей системе и работать с файлами на удаленном компьютере, как если бы они были локальными файлами.
Протокол NFS по умолчанию не зашифрован и, в отличие от Samba, не обеспечивает аутентификацию пользователя. Доступ к серверу ограничен IP-адресами клиентов или именами хостов.
В этом руководстве вы выполните шаги, необходимые для настройки сервера NFSv4 на CentOS 8. Мы также покажем вам, как смонтировать файловую систему NFS на клиенте.
Содержание
Подготовка
Мы предполагаем, что у вас есть сервер под управлением CentOS 8, на котором мы настроим сервер NFS и другие машины, которые будут действовать как клиенты NFS. Сервер и клиенты должны иметь возможность общаться друг с другом по частной сети. Если ваш хостинг-провайдер не предлагает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр сервера, чтобы разрешить трафик на порт 2049 только из надежных источников.
Машины в этом примере имеют следующие IP-адреса:
NFS Server IP: 192.168.33.148
NFS Clients IPs: From the 192.168.33.0/24 range
Настройте сервер NFS
В этом разделе объясняется, как установить необходимые пакеты, создать и экспортировать каталоги NFS и настроить брандмауэр.
Установка сервера NFS
Пакет «nfs-utils» предоставляет утилиты и демоны NFS для сервера NFS. Для его установки выполните следующую команду:
sudo dnf install nfs-utils
После завершения установки включите и запустите службу NFS, набрав:
sudo systemctl enable --now nfs-server
По умолчанию в CentOS 8 включены NFS версий 3 и 4.x, версия 2 отключена. NFSv2 сейчас довольно старый, и нет причин для его включения. Чтобы проверить это, выполните следующую команду cat :
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
/etc/nfsmount.conf конфигурации сервера NFS задаются в /etc/nfsmount.conf и /etc/nfs.conf . Для нашего урока достаточно настроек по умолчанию.
Создание файловых систем
При настройке сервера NFSv4 рекомендуется использовать глобальный корневой каталог NFS и привязать монтирование фактических каталогов к точке монтирования общего ресурса. В этом примере мы будем использовать директор /srv/nfs4 качестве корня NFS.
Чтобы лучше объяснить, как можно настроить монтирование NFS, мы собираемся поделиться двумя каталогами ( /var/www и /opt/backups ) с разными настройками конфигурации.
/var/www/ принадлежит пользователю, а группа apache а /opt/backups — пользователю root .
Создайте файловую систему экспорта с помощью команды mkdir :
sudo mkdir -p /srv/nfs4/{backups,www}
Смонтируйте актуальные каталоги:
sudo mount --bind /opt/backups /srv/nfs4/backupssudo 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
Экспорт файловых систем
Следующим шагом является определение файловых систем, которые будут экспортированы сервером NFS, параметров общих ресурсов и клиентов, которым разрешен доступ к этим файловым системам. Для этого откройте файл /etc/exports :
sudo nano /etc/exports
Экспортируйте каталоги www и backups и разрешите доступ только клиентам в сети 192.168.33.0/24 :
/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.110(rw,sync,no_subtree_check)
Первая строка содержит fsid=0 который определяет корневой каталог NFS /srv/nfs . Доступ к этому тому NFS разрешен только клиентам из подсети 192.168.33.0/24 . Параметр crossmnt требуется для совместного использования каталогов, которые являются подкаталогами экспортированного каталога.
Во второй строке показано, как указать несколько правил экспорта для одной файловой системы. Он экспортирует /srv/nfs4/backups и разрешает доступ только для чтения ко всему диапазону 192.168.33.0/24 , а также доступ для чтения и записи к 192.168.33.3 . Параметр sync указывает NFS записывать изменения на диск перед ответом.
Последняя строка не требует пояснений. Для получения дополнительной информации обо всех доступных параметрах введите в терминале команду man exports .
Сохраните файл и экспортируйте акции:
sudo exportfs -ra
Вам нужно запускать указанную выше команду каждый раз, когда вы изменяете файл /etc/exports . Если есть какие-либо ошибки или предупреждения, они будут отображаться на терминале.
Чтобы просмотреть текущий активный экспорт и его состояние, используйте:
sudo exportfs -v
Вывод будет включать все акции с их опционами. Как видите, есть также параметры, которые мы не определили в /etc/exports . Это параметры по умолчанию, и если вы хотите их изменить, вам необходимо явно указать эти параметры.
/srv/nfs4/backups
192.168.33.3(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 192.168.33.110(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4 192.168.33.0/24(sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
192.168.33.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
root_squash — одна из самых важных опций, касающихся безопасности NFS. Это не позволяет пользователям root, подключенным с клиентов, иметь привилегии root на подключенных общих ресурсах. Он будет отображать корень UID и GID , чтобы nobody / nogroup UID / GID .
Чтобы пользователи на клиентских машинах имели доступ, NFS ожидает, что идентификаторы пользователя и группы клиента будут совпадать с идентификаторами на сервере. Другой вариант — использовать функцию отображения идентификаторов NFSv4, которая преобразует идентификаторы пользователей и групп в имена и наоборот.
Вот и все. На этом этапе вы настроили сервер NFS на своем сервере CentOS. Теперь вы можете перейти к следующему шагу и настроить клиентов и подключиться к серверу NFS.
Конфигурация межсетевого экрана
FirewallD — это брандмауэр по умолчанию на Centos 8 .
Служба NFS включает предопределенные правила для разрешения доступа к серверу NFS.
Следующие команды навсегда разрешат доступ из подсети 192.168.33.0/24 :
sudo firewall-cmd --new-zone=nfs --permanentsudo firewall-cmd --zone=nfs --add-service=nfs --permanentsudo firewall-cmd --zone=nfs --add-source=192.168.33.0/24 --permanentsudo firewall-cmd --reload
Настройка клиентов NFS
Теперь, когда сервер NFS настроен и общие ресурсы экспортированы, следующий шаг настраивает клиентов и монтирует удаленные файловые системы.
Вы также можете смонтировать общий ресурс NFS на компьютерах с macOS и Windows, но мы сосредоточимся на системах Linux.
Установка клиента 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.110 , которая имеет доступ на чтение и запись к файловой системе /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.148:/backups /backupssudo mount -t nfs -o vers=4 192.168.33.148:/www /srv/www
Где 192.168.33.148 — IP-адрес сервера NFS. Вы также можете использовать имя хоста вместо IP-адреса, но оно должно быть разрешено клиентским компьютером. Обычно это делается путем сопоставления имени хоста с IP в /etc/hosts .
При монтировании файловой системы NFSv4 вам нужно опустить корневой каталог NFS, поэтому вместо /srv/nfs4/backups вам нужно использовать /backups .
Убедитесь, что удаленные файловые системы успешно смонтированы, используя команду mount или df :
df -h
Команда распечатает все смонтированные файловые системы. Последние две строки — это смонтированные акции:
...
192.168.33.148:/backups 9.7G 1.2G 8.5G 13% /backups
192.168.33.148:/www 9.7G 1.2G 8.5G 13% /srv/www
Чтобы сделать монтирование постоянным при перезагрузке, откройте файл /etc/fstab :
sudo nano /etc/fstab
и добавьте следующие строки:
192.168.33.148:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.33.148:/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 каталог принадлежат к apache пользователю, и эта доля имеет root_squash вариант набор, который отображает суперпользователь к nobody пользователю и nogroup группе , которая не имеет права на запись на удаленный ресурс.
Предполагая, что пользовательский apache существует на клиентском компьютере с тем же UID и GID что и на удаленном сервере (что должно быть, если, например, вы установили apache на обе машины), вы можете протестировать создание файла как пользовательский apache с участием:
sudo -u apache touch /srv/www/test.txt
Команда не покажет никаких выходных данных, что означает, что файл был успешно создан.
Чтобы проверить это, перечислите файлы в каталоге /srv/www :
ls -la /srv/www
На выходе должен отобразиться только что созданный файл:
drwxr-xr-x 3 apache apache 4096 Jun 23 22:18 .
drwxr-xr-x 3 root root 4096 Jun 23 22:29 ..
-rw-r--r-- 1 apache apache 0 Jun 23 21:58 index.html
-rw-r--r-- 1 apache apache 0 Jun 23 22:18 test.txt
Размонтирование файловой системы NFS
Если вам больше не нужен удаленный общий ресурс NFS, вы можете размонтировать его, как любую другую подключенную файловую систему, с помощью команды umount. Например, чтобы отключить общий ресурс /backup , выполните:
sudo umount /backups
Если точка монтирования определена в /etc/fstab , убедитесь, что вы удалили строку или закомментировали ее, добавив # в начале строки.
Выводы
В этом руководстве мы показали вам, как настроить сервер NFS и как смонтировать удаленные файловые системы на клиентских машинах. Если вы внедряете NFS в производство и обмениваетесь разумными данными, рекомендуется включить аутентификацию Kerberos.
В качестве альтернативы NFS вы можете использовать SSHFS для монтирования удаленных каталогов через SSH-соединение. SSHFS по умолчанию зашифрован, и его гораздо проще настроить и использовать.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.