Как настроить NFS‑сервер на Linux

Введение
NFS (Network File System) — сетевая файловая система, разработанная Sun Microsystems. NFS использует RPC (вызовы удалённых процедур) для предоставления каталогов на сервере клиентам в сети так, словно это локальные диски. NFS удобен для централизованного хранения, совместного доступа и для загрузки встроенных (embedded) Linux‑устройств через сеть.
Определение терминов в одну строку:
- NFS — протокол сетевой файловой системы.
- rpcbind (portmap) — служба, сопоставляющая RPC‑программы с портами.
- mountd — демон, обрабатывающий запросы на монтирование экспортируемых каталогов.
- GSS/Kerberos — механизм аутентификации, интегрирующийся с NFSv4 для защиты.
Когда использовать NFS
Используйте NFS если нужно:
- централизовать данные для множества клиентов;
- загружать embedded‑устройства по сети (network boot);
- уменьшить избыточность хранения на рабочих станциях.
Ограничения и случаи, где NFS стоит избегать:
- чувствительные данные без шифрования (NFS сам по себе не шифрует трафик);
- медленные или ненадёжные сети — NFS чувствителен к задержкам;
- смешанные сети с Windows — лучше рассмотреть SMB/CIFS для полной совместимости.
Важно: NFS версии 4+ поддерживают дополнительные механизмы защиты (включая Kerberos), но они требуют корректной настройки и иногда приводят к дополнительным задержкам при монтировании.
Установка NFS на популярных дистрибутивах
Debian/Ubuntu/Linux Mint:
sudo apt update
sudo apt install -y nfs-kernel-server nfs-commonArch Linux:
sudo pacman -Syu nfs-utilsFedora / CentOS / RHEL:
sudo dnf -y install nfs-utils
# или на старых CentOS / RHEL
# sudo yum -y install nfs-utilsПосле установки служба обычно стартует автоматически. На системах с systemd это может быть nfs-server.service или nfs-kernel-server в зависимости от дистрибутива.
Проверка запущенных сервисов:
sudo systemctl status nfs-server.service
sudo systemctl enable --now nfs-server.serviceПроверьте доступность RPC служб:
rpcinfo -pПример базовой конфигурации /etc/exports
Файл /etc/exports определяет, какие каталоги и с какими опциями будут экспортироваться.
Откройте файл для редактирования:
sudo vim /etc/exportsПримеры строк в /etc/exports:
# Разрешить чтение/запись для подсети 192.168.1.0/24, синхронно, без root доступа
/home/share 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)
# Разрешить полный доступ только с конкретного хоста
/opt/data 10.0.0.42(rw,sync,no_subtree_check)
# Публичный доступ (все пользователи будут маппиться в nobody)
/public *(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534)Пояснения к часто используемым опциям:
- rw — чтение/запись; ro — только чтение;
- sync — запись синхронно на диск (безопаснее, но медленнее);
- async — асинхронная запись (быстрее, но риск потери данных при сбое);
- no_subtree_check — ускоряет экспорт подкаталогов и уменьшает ложные ошибки прав;
- root_squash — маппит root клиента в nobody для безопасности (рекомендуется);
- no_root_squash — деактивирует root_squash (небезопасно на ненадёжных сетях);
- all_squash — маппит всех пользователей в nobody (для публичных экспортов);
- anonuid/anongid — задают UID/GID для анонимных подключений.
После изменения экспортов пересчитайте/перенастройте экспорт:
# Перезапустить службу
sudo systemctl restart nfs-server.service
# Или обновить экспорт без перезапуска
sudo exportfs -ra
# Посмотреть текущие экспорты
sudo exportfs -vНастройка статических портов и межслужебные зависимости
rpcbind (portmap) использует порт 111 (TCP/UDP). Порт NFS обычно 2049 (TCP). Другие демоны, такие как mountd и statd, могут использовать динамические порты. В брандмауэрах удобно назначить статические порты для этих демонов и открыть их.
Проверка портов:
ss -tulpen | grep -E '2049|111|mountd'
rpcinfo -pRHEL/CentOS/Fedora позволяют задать порты в конфигурационных файлах (например, /etc/sysconfig/nfs). В Debian/Ubuntu можно указать опции для mountd через /etc/default/nfs-kernel-server.
Открытие портов в брандмауэре
Минимальные порты для работы NFS (по умолчанию):
- 111/tcp и 111/udp (rpcbind)
- 2049/tcp и 2049/udp (nfs)
- динамические порты для mountd/statd — лучше фиксировать
Пример для firewalld:
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reloadПример для ufw (Ubuntu):
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow from 192.168.1.0/24 to any port 111Монтирование на клиенте
Ручное монтирование:
# Принудительно NFSv3
sudo mount -t nfs -o vers=3 server.example:/home/share /mnt/share
# NFSv4 (без указания корня exportfs, сервер экспортирует точку /)
sudo mount -t nfs -o vers=4 server.example:/ /mnt/nfsrootЗапись в /etc/fstab для автоматического монтирования:
server.example:/home/share /mnt/share nfs defaults,vers=4 0 0Для embedded‑устройств и BusyBox:
# BusyBox mount синтаксис схож
mount -t nfs -o vers=3 server:/home/share /mntПроверка со стороны сервера:
showmount -e server.exampleРешение проблемы задержки монтирования (AUTH_GSS / Kerberos)
На серверах, использующих NFSv4, некоторые дистрибутивы могут испытывать задержку при монтировании клиента (до ~15 секунд) из‑за попыток GSS/Kerberos аутентификации и таймаутов. В логе сервера вы можете увидеть сообщения типа:
... RPC: AUTH_GSS upcall timed out
rpc.mountd[1041]: refused mount request from 192.168.2.2 for /home/example/casper/target: unmatched hostЕсли Kerberos в вашей сети не используется или вы не планируете GSS‑аутентификацию для embedded‑клиентов, можно запретить загрузку модуля rpcsec_gss_krb5 на сервере, чтобы избежать задержек:
echo "blacklist rpcsec_gss_krb5" | sudo tee /etc/modprobe.d/nfs-gss-blacklist.conf
sudo rebootАльтернатива (без перезагрузки) — выгрузить модуль и остановить gssd, если он активен:
sudo systemctl stop gssproxy.service gssproxy
sudo modprobe -r rpcsec_gss_krb5 || trueПримечание: Блокировка rpcsec_gss_krb5 предотвращает GSS/Kerberos аутентификацию. Делайте это только если уверены, что аутентификация Kerberos не нужна.
SELinux и права на экспортируемые каталоги
На системах с включённым SELinux экспортируемый каталог должен иметь корректный контекст безопасности:
sudo chcon -Rt nfs_t /export/pathЕсли SELinux ограничивает доступ, проверьте audit.log и применяйте необходимые boolean‑параметры (setsebool).
Полезные команды для отладки
- Просмотреть экспорты сервера: sudo exportfs -v
- Посмотреть хосты, смонтировавшие экспорт: sudo exportfs -s или showmount -a
- Логи: journalctl -u nfs-server.service, /var/log/syslog, /var/log/messages
- Проверить RPC сервисы: rpcinfo -p
- Проверить порты: ss -tulpen | grep nfs
Типичные сообщения об ошибках и действия:
- refused mount request / unmatched host — расширьте IP/Netmask в /etc/exports или используйте * (аккуратно);
- permission denied при записи — проверьте UID/GID и опции root_squash/all_squash, права файловой системы;
- long mount time — смотрите AUTH_GSS таймауты и модуль rpcsec_gss_krb5.
Практики безопасности и рекомендации
- Используйте root_squash по умолчанию, чтобы не позволять root клиентам действовать как root на сервере.
- Если нужен безопасный трафик, используйте аутентификацию Kerberos с шифрованием или туннелируйте NFS через VPN/SSH.
- Для публичных экспортов применяйте all_squash и задавайте anonuid/anongid.
- Ограничивайте доступ по IP/сети в /etc/exports — не используйте * без надобности.
- Регулярно проверяйте логи и состояние сервисов.
Мини‑методология развёртывания (шаги)
- Спланировать: выбрать каталоги, определить сети/хосты, учесть требования по безопасности.
- Установить пакеты nfs‑utils/nfs‑kernel‑server и зависимости.
- Задать /etc/exports с нужными опциями и UID/GID для анонимных пользователей.
- Открыть порты в брандмауэре и зафиксировать динамические порты при необходимости.
- Настроить SELinux/ACL при необходимости и проверить права на файловой системе.
- Протестировать монтирование с клиента, добавить записи в /etc/fstab при успехе.
- Настроить мониторинг сервисов и откатов (backup конфигов).
Чек‑лист ролей
Администратор сервера:
- Установить и запустить nfs‑server.
- Настроить /etc/exports и exportfs -ra.
- Открыть порты в брандмауэре.
- Настроить SELinux контексты.
Разработчик embedded:
- Убедиться, что клиент использует корректную версию NFS (vers=3/4).
- Протестировать автоматическое монтирование при загрузке.
- Проверить задержки логов и реакции на ошибки unmatched host.
Security officer:
- Верифицировать правила root_squash/all_squash.
- Решить политику шифрования и Kerberos.
- Ограничить доступ по сети.
Критерии приёмки
- Клиент успешно монтирует экспорт и проводит операции чтения/записи в течение 5 минут без ошибок.
- Логи сервера не содержат ошибок unmatched host или AUTH_GSS таймаутов после фикса настроек.
- Брандмауэр открывает только необходимые порты.
- Права пользователей и маппинг UID/GID корректны для сервисов, использующих NFS.
Тест‑кейсы и приёмо‑сдаточные проверки
- Монтирование с клиента: mount server:/export /mnt — ожидание успешного монтирования.
- Права: создание файла с uid=1000 на клиенте и проверка owner на сервере.
- Root‑доступ: попытка записать файл как root на клиенте — должен примениться root_squash.
- Нагрузочное тестирование: параллельные записи несколькими клиентами — оценить задержки.
- Проверка отказоустойчивости: перезапустить nfs‑server и проверить восстановление экспорта.
Небольшое сравнение NFS и альтернатив
- NFS vs SMB/CIFS: SMB лучше для интеграции с Windows; NFS — проще для UNIX‑систем и embedded.
- NFS vs iSCSI: iSCSI предоставляет блочные устройства (более сложный сценарий), NFS — файловый доступ поверх сети.
1‑строчный глоссарий
- NFS — сетевой протокол файловой системы.
- RPC — механизм удалённых вызовов процедур.
- rpcbind — служба для сопоставления RPC программ и портов.
- mountd — демон, обслуживающий запросы на монтирование экспортов.
- GSS/Kerberos — система аутентификации для NFSv4.
Краткое резюме
NFS — надёжный и простой способ централизовать файловое хранилище в UNIX‑сетях и загрузку embedded‑устройств. Главное — правильно настроить /etc/exports, брандмауэр и (при необходимости) SELinux, а также учитывать влияние GSS/Kerberos на задержки монтирования. Следуйте чек‑листам, тестируйте монтирование и мониторьте логи.
Важно: изображены примеры конфигураций; адаптируйте их под вашу сеть и политику безопасности.
Похожие материалы
macOS High Sierra в VirtualBox на Windows
Как увеличить память на Android TV
Отключить Protected View в Microsoft Word
Устранение двойного NAT: роутер + модем ISP
Исправить Microsoft.Photos.exe: высокое использование памяти