Гид по технологиям

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

6 min read Системное администрирование Обновлено 10 Dec 2025
Как настроить NFS‑сервер на Linux
Как настроить NFS‑сервер на Linux

инженер настраивает 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-common

Arch Linux:

sudo pacman -Syu nfs-utils

Fedora / 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 -p

RHEL/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 — не используйте * без надобности.
  • Регулярно проверяйте логи и состояние сервисов.

Мини‑методология развёртывания (шаги)

  1. Спланировать: выбрать каталоги, определить сети/хосты, учесть требования по безопасности.
  2. Установить пакеты nfs‑utils/nfs‑kernel‑server и зависимости.
  3. Задать /etc/exports с нужными опциями и UID/GID для анонимных пользователей.
  4. Открыть порты в брандмауэре и зафиксировать динамические порты при необходимости.
  5. Настроить SELinux/ACL при необходимости и проверить права на файловой системе.
  6. Протестировать монтирование с клиента, добавить записи в /etc/fstab при успехе.
  7. Настроить мониторинг сервисов и откатов (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.

Тест‑кейсы и приёмо‑сдаточные проверки

  1. Монтирование с клиента: mount server:/export /mnt — ожидание успешного монтирования.
  2. Права: создание файла с uid=1000 на клиенте и проверка owner на сервере.
  3. Root‑доступ: попытка записать файл как root на клиенте — должен примениться root_squash.
  4. Нагрузочное тестирование: параллельные записи несколькими клиентами — оценить задержки.
  5. Проверка отказоустойчивости: перезапустить 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 на задержки монтирования. Следуйте чек‑листам, тестируйте монтирование и мониторьте логи.

добавление конфигурации в exports для NFS

Важно: изображены примеры конфигураций; адаптируйте их под вашу сеть и политику безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

macOS High Sierra в VirtualBox на Windows
Виртуализация

macOS High Sierra в VirtualBox на Windows

Как увеличить память на Android TV
Android.

Как увеличить память на Android TV

Отключить Protected View в Microsoft Word
Безопасность

Отключить Protected View в Microsoft Word

Устранение двойного NAT: роутер + модем ISP
Сети

Устранение двойного NAT: роутер + модем ISP

Исправить Microsoft.Photos.exe: высокое использование памяти
Windows

Исправить Microsoft.Photos.exe: высокое использование памяти

Включить «Разрешить ненадёжные команды» на iPhone
iOS Команды

Включить «Разрешить ненадёжные команды» на iPhone