Сетевая файловая система (NFS) – это протокол распределенной файловой системы, который позволяет вам совместно использовать удаленные каталоги по сети. С помощью NFS вы можете монтировать удаленные каталоги в вашей системе и работать с файлами на удаленном компьютере, как если бы они были локальными файлами.
Протокол NFS по умолчанию не шифруется и, в отличие от Samba, не обеспечивает аутентификацию пользователя. Доступ к серверу ограничен IP-адресами клиентов или именами хостов.
В этой статье вы пройдете шаги, необходимые для настройки сервера NFSv4 в CentOS 8. Мы также покажем вам, как смонтировать файловую систему NFS на клиенте.
Предпосылки
Мы предполагаем, что у вас есть сервер под управлением CentOS 8, на котором мы настроим сервер NFS и другие машины, которые будут действовать как клиенты NFS. Сервер и клиенты должны иметь возможность общаться друг с другом через частную сеть. Если ваш хостинг-провайдер не предлагает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр сервера, чтобы разрешать трафик на порт 2049 только из надежных источников.
Машины в этом примере имеют следующие IP-адреса:
NFS Server IP: 192.168.26.148 NFS Clients IPs: From the 192.168.26.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
Параметры конфигурации сервера 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/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
Экспорт файловых систем
Следующим шагом является определение файловых систем, которые будут экспортироваться сервером NFS, параметров общего ресурса и клиентов, которым разрешен доступ к этим файловым системам. Для этого откройте файл /etc/exports:
sudo nano /etc/exports
Экспорт каталогов www и backups и разрешить доступ только от клиентов по сети 192.168.26.0/24:
/etc/export
/srv/nfs4 192.168.26.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0) /srv/nfs4/backups 192.168.26.0/24(ro,sync,no_subtree_check) 192.168.26.3(rw,sync,no_subtree_check) /srv/nfs4/www 192.168.26.110(rw,sync,no_subtree_check)
Первая строка содержит fsid=0 каталог, определяющий корневой каталог NFS /srv/nfs. Доступ к этому тому NFS разрешен только клиентам из подсети 192.168.26.0/24. Параметр crossmnt необходим для совместного использования каталогов, которые являются подкаталогами экспортируемого каталога.
Во второй строке показано, как задать несколько правил экспорта для одной файловой системы. Он экспортирует каталог /srv/nfs4/backups и предоставляет доступ только для чтения ко всему диапазону 192.168.26.0/24, а также для чтения и записи 192.168.26.3. Опция sync сообщает NFS, чтобы записать изменения на диск, прежде чем ответить.
Последняя строка должна быть понятной. Для получения дополнительной информации обо всех доступных опциях введите man exportsсвой терминал.
Сохраните файл и экспортируйте общие ресурсы:
sudo exportfs -ra
Вам нужно запускать команду выше каждый раз, когда вы изменяете файл /etc/exports. Если есть какие-либо ошибки или предупреждения, они будут показаны на терминале.
Чтобы просмотреть текущий активный экспорт и его состояние, используйте:
sudo exportfs -v
Вывод будет включать все акции с их опциями. Как вы можете видеть, есть также опции, которые мы не определили в файле /etc/exports. Это параметры по умолчанию, и если вы хотите изменить их, вам нужно явно установить эти параметры.
/srv/nfs4/backups 192.168.26.3(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /srv/nfs4/www 192.168.26.110(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /srv/nfs4 192.168.26.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.26.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
root_squash является одним из наиболее важных параметров безопасности NFS. Он не позволяет корневым пользователям, подключенным с клиентов, иметь права root на подключенных общих ресурсах. Он будет отображать корень UID и GID в nobody/nogroup UID/GID.
Чтобы пользователи на клиентских компьютерах имели доступ, NFS ожидает, что идентификаторы пользователя и группы клиента совпадают с идентификаторами на сервере. Другой вариант – использовать функцию отображения NFSv4, которая переводит идентификаторы пользователей и групп в имена и наоборот.
Вот и все. На этом этапе вы настроили сервер NFS на вашем сервере CentOS. Теперь вы можете перейти к следующему шагу, настроить клиентов и подключиться к серверу NFS.
Конфигурация брандмауэра
FirewallD является решением брандмауэра по умолчанию в Centos 8.
Служба NFS включает в себя предопределенные правила для доступа к серверу NFS. Следующие команды будут постоянно разрешать доступ из подсети 192.168.26.0/24:
sudo firewall-cmd --new-zone=nfs --permanent sudo firewall-cmd --zone=nfs --add-service=nfs --permanent sudo firewall-cmd --zone=nfs --add-source=192.168.26.0/24 --permanent sudo firewall-cmd --reload
Настройка клиентов NFS
Теперь, когда сервер NFS настроен и общие ресурсы экспортированы, на следующем шаге настройте клиенты и подключите удаленные файловые системы.
Вы также можете смонтировать общий ресурс NFS на компьютерах MacOS и Windows, но мы сосредоточимся на системах Linux.
Установка клиента 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.26.110, который имеет доступ для чтения и записи к /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.26.148:/backups /backups sudo mount -t nfs -o vers=4 192.168.26.148:/www /srv/www
Где 192.168.26.148 находится IP-адрес сервера NFS. Вы также можете использовать имя хоста вместо IP-адреса, но оно должно быть разрешено клиентским компьютером. Обычно это делается путем сопоставления имени хоста с IP в файле /etc/hosts.
При монтировании файловой системы NFSv4 вам нужно пропустить корневой каталог NFS, поэтому вместо /srv/nfs4/backups нужно использовать /backups.
Убедитесь, что удаленные файловые системы успешно смонтированы, используя команду mount или df:
df -h
Команда напечатает все смонтированные файловые системы. Последние две строки являются смонтированными долями:
... 192.168.26.148:/backups 9.7G 1.2G 8.5G 13% /backups 192.168.26.148:/www 9.7G 1.2G 8.5G 13% /srv/www
Чтобы сделать монтирование постоянным при перезагрузке, откройте файл /etc/fstab:
sudo nano /etc/fstab
и добавьте следующие строки:
192.168.26.148:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0 192.168.26.148:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
Чтобы узнать больше информации о доступных опциях при монтировании файловой системы NFS, введите man nfs в свой терминал.
Другой вариант для монтирования удаленных файловых систем – использовать инструмент autofs или создать системный модуль.
Тестирование NFS Access
Давайте проверим доступ к общим ресурсам, создав новый файл в каждом из них.
Сначала попробуйте создать тестовый файл в каталоге /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 принадлежат к пользователю 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 Oct 14 05:24 . drwxr-xr-x 3 root root 4096 Oct 23 05:25 .. -rw-r--r-- 1 apache apache 0 Oct 23 04:22 index.html -rw-r--r-- 1 apache apache 0 Oct 14 05:24 test.txt
Размонтирование файловой системы NFS
Если вам больше не нужен удаленный общий ресурс NFS, вы можете размонтировать его, как любую другую смонтированную файловую систему, с помощью команды umount. Например, чтобы размонтировать ресурс /backup, который вы запустите:
sudo umount /backups
Если точка монтирования определена в файле /etc/fstab, убедитесь, что вы удалили строку или закомментировали ее, добавив # в начале строки.
Заключение
В этой статье мы показали, как настроить сервер NFS и как монтировать удаленные файловые системы на клиентских компьютерах. Если вы внедряете NFS в производство и делитесь разумными данными, рекомендуется включить аутентификацию Kerberos.
В качестве альтернативы NSF вы можете использовать SSHFS для монтирования удаленных каталогов через SSH-соединение. SSHFS зашифрован по умолчанию и намного проще в настройке и использовании.
Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.