Настройка NFS на Rocky Linux 8: сервер и клиент

Этот пошаговый гид показывает, как установить и настроить NFS-сервер и NFS-клиент на Rocky Linux 8: установите пакеты, подготовьте директории, экспортируйте их через /etc/exports, настройте firewalld, смонтируйте точки на клиенте и сделайте монтирование постоянным через /etc/fstab. В разделе безопасности и отладки приведены варианты для защищённого использования в продакшне и пошаговый план устранения неисправностей.
О чём статья
- Быстрая настройка NFSv4 для общего доступа к файлам в приватной сети
- Пояснение ключевых опций экспорта и монтирования
- Настройка firewall и постоянного монтирования
- Практические советы по безопасности, производительности и отладке
Основные термины
- NFS — протокол распределённой файловой системы для доступа к удалённым файловым системам как к локальным.
- Экспорт — объявление директории сервера доступной клиентам (файл /etc/exports).
- Монтирование — подключение удалённой экспортированной директории к точке в локальной файловой системе клиента.
Требования
- Две машины с Rocky Linux 8 (Host и Client). На каждой — пользователь с sudo.
- Желательно статические IP-адреса или приватная сеть. В примерах: host_ip и client_ip.
Важно: NFS из коробки не шифрует трафик. Для продакшна рассмотрите дополнительные уровни защиты (VPN, Kerberos, TLS/стороннее туннелирование).
Шаг 1 — Установка NFS на сервере и клиенте
Host
Установите пакет nfs-utils, он содержит демоны и утилиты для сервера NFS.
$ sudo dnf install nfs-utilsЗапустите и включите сервис nfs-server. Остальные сервисы для NFS (nfsd, nfs-idmapd, rpcbind, rpc.mountd и т. п.) поднимутся автоматически.
$ sudo systemctl enable nfs-server --nowПроверьте поддерживаемые версии NFS:
$ sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2Знак минус перед версией 2 означает, что NFSv2 отключён. В реальности используются NFSv3 или NFSv4.x.
Конфигурации хранятся в /etc/nfsmount.conf (параметры монтирования) и /etc/nfs.conf (параметры демонов).
Client
На клиенте установите nfs-utils и инструменты ACL для NFSv4:
$ sudo dnf install nfs-utils nfs4-acl-toolsШаг 2 — Создание директорий для шаринга на сервере
Мы продемонстрируем два случая:
- Общая директория с типичным поведением NFS (root-squash по умолчанию)
- Поделиться домашней директорией сервера (с no_root_squash)
Замечание: NFS по умолчанию маппит root-клиента на непривилегированного пользователя (обычно nobody) на сервере — это называется root_squash. Это ограничение повышает безопасность.
Общая директория
Создайте каталог для шаринга:
host:$ sudo mkdir -p /var/nfs/shareПо умолчанию каталог будет принадлежать root:
host:$ ls -l /var/nfs
total 0
drwxr-xr-x. 2 root root 6 Dec 13 07:30 shareЧтобы согласовать права с маппингом nobody, измените владельца:
host:$ sudo chown nobody:nobody /var/nfs/share(в исходном примере была опечатка /var/nfs/general — используйте существующую директорию /var/nfs/share)
Домашняя директория
Домашняя директория пользователей уже существует и менять её права обычно не нужно. Мы покажем пример, как экспортировать /home, и обсудим риски.
Шаг 3 — Конфигурирование экспортов на сервере
Откройте /etc/exports:
host:$ sudo nano /etc/exportsДобавьте строки:
/var/nfs/share client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)Замените client_ip на реальный IP клиента или сеть (например 192.168.1.0/24). Каждая экспортируемая директория должна быть в отдельной строке.
Пояснение опций:
- rw — чтение и запись для клиента.
- sync — синхронная запись на диск перед подтверждением (надёжнее, медленнее).
- no_subtree_check — отключает проверку поддерева, повышает надёжность при переименованиях.
- no_root_squash — позволяет root на клиенте действовать как root на сервере (опасно без контроля).
Сохраните изменения и выполните экспорт:
host:$ sudo exportfs -arv
exporting client_ip:/home
exporting client_ip:/var/nfs/shareКлючи exportfs:
- -a — экспортировать все директории из /etc/exports
- -r — пересоздать список экспортов
- -v — подробный вывод
Посмотреть текущие экспорты:
host:$ sudo exportfs -s
/var/nfs/share client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/home client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)Шаг 4 — Настройка брандмауэра на сервере
Rocky Linux использует firewalld. Проверьте статус:
host:$ sudo firewall-cmd --state
runningДобавьте службы NFS в публичную зону и при необходимости разрешите источник с IP клиента.
host:$ sudo firewall-cmd --permanent --add-service=nfs
host:$ sudo firewall-cmd --permanent --add-service=rpc-bind
host:$ sudo firewall-cmd --permanent --add-service=mountd
host:$ sudo firewall-cmd --permanent --add-source=client_ip
host:$ sudo firewall-cmd --reloadЕсли клиент и сервер в одной подсети, можно вместо добавления источника предоставить доступ по сети.
Important: если вы используете статические порты для mountd/lockd/rpc/statd, их можно закрепить в конфиге /etc/nfs.conf и открыть конкретные порты, чтобы упростить фильтрацию.
Шаг 5 — Создание точек монтирования на клиенте
Проверьте список экспортов с клиента:
client:$ showmount -e host_ip
Export list for host_ip:
/home host_ip
/var/nfs/share host_ipСоздайте директории для монтирования локально:
client:$ sudo mkdir -p /nfs/share
client:$ sudo mkdir -p /nfs/homeСмонтируйте ресурсы:
client:$ sudo mount host_ip:/var/nfs/share /nfs/share
client:$ sudo mount host_ip:/home /nfs/homeПроверка:
client:$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 370M 0 370M 0% /dev
tmpfs 405M 0 405M 0% /dev/shm
tmpfs 405M 16M 389M 4% /run
tmpfs 405M 0 405M 0% /sys/fs/cgroup
/dev/vda1 25G 2.4G 23G 10% /
tmpfs 81M 0 81M 0% /run/user/1000
host_ip:/var/nfs/share 25G 2.4G 23G 10% /nfs/share
host_ip:/home 25G 2.4G 23G 10% /nfs/homeДополнительно:
client:$ mount | grep nfs
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)Шаг 6 — Тестирование доступа к NFS
Тест общего шаринга
Создайте файл на клиенте:
client:$ sudo touch /nfs/share/test.txtПроверьте владельца:
client:$ ls -l /nfs/share/test.txt
-rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txtТак как на сервере применён root_squash, файлы, созданные от root на клиенте, имеют владельца nobody:nobody.
Тест домашней директории
client:$ sudo touch /nfs/home/home.txt
client:$ ls -l /nfs/home/home.txt
-rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txtПри использовании no_root_squash root на клиенте действует как root в экспортированной директории сервера.
Шаг 7 — Постоянное монтирование через /etc/fstab
Чтобы точки монтирования сохранялись после перезагрузки, добавьте записи в /etc/fstab:
client:$ sudo nano /etc/fstabДобавьте в конец:
host_ip:/var/nfs/share /nfs/share nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0Кратко о ключевых опциях:
- nofail — при проблемах с сетью загрузка не остановится.
- noatime — отключает обновление времени доступа (уменьшает I/O).
- nolock — отключает клиентскую блокировку (используйте с осторожностью).
- intr — разрешить прерывание операций (устаревающая опция для NFSv4).
- actimeo — контролирует агрегацию атрибутов (кэширование метаданных).
Проверьте монтирование без перезагрузки:
client:$ sudo mount -aШаг 8 — Отмонтирование
Если нужно отключить шару:
client:$ cd ~
client:$ sudo umount /nfs/share
client:$ sudo umount /nfs/homeЕсли записи в /etc/fstab больше не нужны, закомментируйте их, добавив # в начале строки.
Безопасность и защита данных
NFS традиционно не шифрует трафик. Для безопасного использования в продакшне рассмотрите следующие подходы:
- Разверните NFS только в приватной сети или внутри VPN. Это простейший способ защитить трафик.
- Используйте Kerberos (sec=krb5/krb5i/krb5p) для аутентификации и целостности/шифрования (требует инфраструктуры Kerberos). Это стандартный способ для корпоративного NFSv4.
- Туннелирование через TLS/SSH или использование WireGuard/IPsec для защиты канального трафика.
- Минимизируйте использование no_root_squash на общих ресурсах.
- Ограничьте список клиентов в /etc/exports и через firewall-cmd.
- Логи и мониторинг: следите за /var/log/messages и audit-событиями при подозрительной активности.
Security hardening — быстрый чеклист:
- Не экспортируйте / без крайней необходимости.
- Не используйте no_root_squash для общедоступных ресурсов.
- Ограничьте IP-диапазоны доступа.
- Фиксируйте порты демонoв rpc и откройте только необходимые.
Производительность и оптимизация
Советы:
- Для больших файлов повышайте rsize/wsize (размер блоков чтения/записи), но убедитесь, что сеть и сервер это поддерживают.
- Используйте TCP для стабильности в сложных сетях.
- actimeo и attribute cache помогают снизить нагрузку на сервер при большом количестве операций stat.
- Для сильно нагруженных рабочих нагрузок рассмотрите NFSv4.1/4.2 с pNFS или распределённые файловые системы (CephFS) для масштабируемости.
Тесты приёмки
Критерии приёмки
- Клиент успешно монтирует экспортированные директории после выполнения mount и после reboot.
- Файлы, созданные на клиенте в общей директории, имеют владельца nobody:nobody при root_squash.
- Файлы, созданные в /home с no_root_squash, имеют владельца root (если создавались от root).
- Firewall открыт только по необходимым службам и, при необходимости, по IP-адресам.
- Логи не содержат ошибок rpc или exportfs после экспорта директорий.
Тесты:
- showmount -e host_ip должен показывать ожидаемые экспорты.
- mount | grep nfs должен показывать vers=4.2 (или используемую версию).
- Попытка записи/чтения с клиента и проверка владельцев и прав.
Руководство по устранению неисправностей (Runbook)
Сценарий: клиент не монтирует ресурс
- На клиенте: ping host_ip — проверить сетевую доступность.
- На сервере: sudo systemctl status nfs-server — убедиться, что сервис поднят.
- На сервере: sudo exportfs -s — проверить, что экспорт доступен.
- На клиенте: showmount -e host_ip — убедиться, что экспорт виден.
- Проверить firewall: на сервере sudo firewall-cmd –list-all –zone=public и убедиться, что сервисы nfs, rpc-bind, mountd открыты.
- Логи: на сервере /var/log/messages, journalctl -u nfs-server — искать ошибки.
- Проверить версии NFS: cat /proc/fs/nfsd/versions на сервере и mount | grep nfs на клиенте.
- Если проблема с UID/GID, проверьте совпадение пользователей или используйте idmapd для преобразования имён.
Сценарий: файлы видны, но права некорректны
- Проверьте root_squash/no_root_squash в /etc/exports.
- Убедитесь, что владельцы на сервере соответствуют желаемым (chown).
- Если нужны POSIX ACL, убедитесь, что файловая система и сервер поддерживают их.
Альтернативные подходы и когда NFS не подходит
Когда NFS — плохой выбор:
- Нужна сквозная шифрация на уровне файлового протокола (используйте SSHFS, SMB3 с шифрованием, либо настройте VPN/IPsec).
- Требуется распределённая файловая система с высокой доступностью и масштабированием (рассмотрите CephFS, GlusterFS).
- Требуется блочный доступ (используйте iSCSI или Fibre Channel).
Альтернативы:
- SMB/CIFS — хорошо для смешанных Windows/Linux сред.
- SSHFS — простой, шифруемый протокол для одного пользователя, но медленный для масштабируемых задач.
- CephFS — масштабируемая распределённая файловая система для кластеров.
Модель принятия решений — когда использовать NFS
- Нужны общие папки между Linux-серверами в приватной сети: NFS подходит.
- Для высокой безопасности и публичных сетей: NFS сам по себе недостаточен — добавьте VPN/Kerberos/TLS.
- Для однорангового доступа с небольшим количеством пользователей: NFS прост и эффективен.
Ролевые контрольные списки
Администратор сервера:
- Установить nfs-utils, включить nfs-server.
- Настроить /etc/exports, проверить exportfs -s.
- Настроить firewalld и открыть только нужные сервисы.
- Зафиксировать порты для демонов при желании.
Администратор клиента:
- Установить nfs-utils, создать точки монтирования.
- Выполнить mount host_ip:/share /point и проверить доступ.
- Добавить записи в /etc/fstab и проверить sudo mount -a.
Безопасник:
- Проверить использование no_root_squash и ограничение IP-диапазонов.
- Настроить Kerberos или туннелирование для шифрования.
- Настроить аудит файловых операций при необходимости.
Совместимость и заметки по версиям
- NFSv3 — широко поддерживается, не имеет встроенного шифрования, прост.
- NFSv4/4.1/4.2 — поддерживает улучшения безопасности и состояния, рекомендуются для новых деплоев.
- Kerberos интеграция доступна для NFSv4.
- Windows поддерживает NFS частично; для смешанных сред лучше SMB.
Примеры типичных ошибок и их причины
- Permission denied при монтировании: неправильно указаны IP в /etc/exports или firewall блокирует доступ.
- Ownership всегда nobody:nobody: активирован root_squash на сервере.
- Пониженная производительность: маленькие rsize/wsize, проблемы с сетью или синхронные операции (sync).
Короткий план для продакшна
- Разверните NFS в приватной сети или за VPN.
- Настройте Kerberos для аутентификации, если требуется высокий уровень доверия.
- Закрепите порты и правила firewall.
- Тестируйте восстановление и отказоустойчивость (reboot, network loss).
- Включите мониторинг I/O и логи.
Краткое резюме
- NFS на Rocky Linux 8 легко устанавливается с пакетом nfs-utils.
- Экспортируйте каталоги через /etc/exports и применяйте exportfs -arv.
- Не забывайте про firewall и /etc/fstab для постоянных монтирований.
- Для продакшна учитывайте шифрование, аутентификацию (Kerberos) и строгую фильтрацию по IP.
Если у вас остались вопросы, опишите вашу топологию и ошибки — это поможет дать более точные рекомендации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента