Файловый сервер NFS [209.2]

Рейтинг: 66.7% · 13 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Файловый сервер NFS [209.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2] (вы здесь)
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 29. Файловый сервер NFS [209.2]

NFS (Network File System) решает классическую задачу администратора: отдать каталог с сервера так, чтобы на десятках машин он выглядел как обычная локальная папка. Домашние каталоги пользователей, общие сборочные артефакты, образы для гипервизоров - все это часто живет на одном NFS-сервере. В этом уроке разберем, как объявить экспорт через /etc/exports, чем NFSv4 отличается от NFSv3 по портам и архитектуре, как смонтировать ресурс на клиенте и автоматизировать монтирование, и почему idmapd и опции вроде root_squash напрямую влияют на безопасность.

Изображение

Как это работает

NFS - это сетевая файловая система поверх RPC (Remote Procedure Call). Клиент не качает файл целиком, а отправляет на сервер удаленные вызовы: открой, прочитай блок со смещением, запиши, получи атрибуты. Ядро на обеих сторонах делает вид, что все локально, а трафик идет по сети.

Ключевая разница версий - в количестве сетевых служб. NFSv3 опирается на отдельные демоны и портовый брокер rpcbind (порт 111): сначала клиент спрашивает у rpcbind, на каком порту слушает mountd, потом отдельно работает блокировка через lockd/statd. Из-за разброса портов NFSv3 неудобен для файрвола. NFSv4 - современный стандарт по умолчанию в 2026 - собрал все в один протокол на TCP-порту 2049. Ему не нужны rpcbind, mountd и отдельный демон блокировок: монтирование, lock, ACL идут одним каналом. Поэтому для нового сервера открываете ровно один порт.

Еще одно отличие - модель имен. В NFSv3 владелец файла передается числовым UID/GID, и если на сервере пользователь maria имеет UID 1001, а на клиенте 1005, файлы окажутся чужими. NFSv4 умеет работать с именами вида user@domain, и сопоставлением занимается демон nfsidmap (служба idmapd, настройка в /etc/idmapd.conf). Важный нюанс 2026 года: при доступе через AUTH_SYS (обычный экспорт без Kerberos) современные ядра все равно гоняют числовые id, и idmapd реально включается в работу в основном с krb5. Несовпадение домена в idmapd.conf - классическая причина, когда все файлы видны как nobody:nobody.

Опции экспорта определяют права и режим записи. root_squash (по умолчанию) превращает удаленного root в анонимного пользователя - чтобы клиентский админ не стал админом на вашем сервере. sync заставляет сервер подтверждать запись только после реального сброса на диск (надежно, но медленнее), async быстрее, но рискует потерей данных при сбое.

Команды и примеры

Установка пакетов. Debian/Ubuntu:

Код: Выделить всё

apt install nfs-kernel-server   # сервер
apt install nfs-common          # клиент
RHEL/Fedora:

Код: Выделить всё

dnf install nfs-utils           # и сервер, и клиент в одном пакете
Файл /etc/exports - что и кому отдаем:

Код: Выделить всё

/srv/share    192.168.10.0/24(rw,sync,root_squash)
/srv/ro       10.0.0.5(ro,sync)  10.0.0.6(ro,sync)
/export/home  *.lab.local(rw,sync,no_subtree_check)
Между адресом клиента и скобкой с опциями НЕ должно быть пробела - это самая частая ошибка синтаксиса. Применяем экспорт без перезапуска службы:

Код: Выделить всё

exportfs -ra          # перечитать /etc/exports
exportfs -v           # показать активные экспорты
exportfs -u 192.168.10.0/24:/srv/share   # снять конкретный экспорт
Запуск службы (systemd, актуально для обоих семейств):

Код: Выделить всё

systemctl enable --now nfs-server     # RHEL/Fedora
systemctl enable --now nfs-kernel-server  # Debian/Ubuntu
Проверка с клиента, что отдает сервер:

Код: Выделить всё

showmount -e 192.168.10.1    # список экспортов (использует mountd, NFSv3-стиль)
nfsstat -m                   # какие точки уже примонтированы и с какой версией
Монтирование на клиенте вручную:

Код: Выделить всё

mount -t nfs -o vers=4.2 192.168.10.1:/srv/share /mnt/share
Постоянное монтирование через /etc/fstab:

Код: Выделить всё

192.168.10.1:/srv/share  /mnt/share  nfs  vers=4.2,_netdev,rw,hard,intr  0  0
Опция _netdev говорит systemd дождаться сети. hard означает, что при пропаже сервера операции зависнут и продолжатся после восстановления (безопаснее для данных, чем soft).

Автомонтирование по требованию через autofs - монтирует при первом обращении и отмонтирует после простоя:

Код: Выделить всё

# /etc/auto.master
/mnt/auto   /etc/auto.nfs   --timeout=60

# /etc/auto.nfs
share   -fstype=nfs4,rw   192.168.10.1:/srv/share
После правки: systemctl restart autofs. Обращение к /mnt/auto/share смонтирует ресурс автоматически.

Частые грабли
  • Пробел перед скобкой в /etc/exports: запись 'host (rw)' экспортирует каталог хосту host с опциями по умолчанию, а опции rw отдает ВСЕМ. Пишите 'host(rw)' слитно.
  • Все файлы показываются как nobody:nobody - почти всегда несовпадение домена idmapd на клиенте и сервере либо забытый nfsidmap. Проверьте Domain в /etc/idmapd.conf с обеих сторон.
  • Открыли только порт 2049, а монтирование по NFSv3 не идет - v3 еще требует rpcbind (111) и mountd. Либо явно используйте vers=4, либо откройте порты v3.
  • no_root_squash на боевом экспорте - дыра: root на клиенте становится root на сервере. Включайте только осознанно и для доверенных машин.
  • Опция soft при записи может молча терять данные при таймауте. Для важных данных - hard.
  • Забыли _netdev в fstab - на загрузке монтирование падает, потому что сети еще нет.
  • subtree_check на современных ядрах считается ненадежным - явно ставьте no_subtree_check.
Мини-лаба
  • На сервере создайте каталог: mkdir -p /srv/share и положите туда тестовый файл.
  • Добавьте в /etc/exports строку с вашей клиентской подсетью, опциями rw,sync,root_squash,no_subtree_check.
  • Примените: exportfs -ra и убедитесь через exportfs -v.
  • С клиента проверьте видимость: showmount -e <ip_сервера>.
  • Смонтируйте: mount -t nfs -o vers=4.2 <ip>:/srv/share /mnt/share и запишите файл.
  • Проверьте через nfsstat -m, что используется именно NFSv4.2.
  • Сделайте монтирование постоянным через /etc/fstab с _netdev и перезагрузитесь для проверки.
Контрольные вопросы
  • На каком TCP-порту работает NFSv4 и какие службы он делает ненужными по сравнению с NFSv3?
  • Что делает опция root_squash и чем она отличается от no_root_squash с точки зрения безопасности?
  • В чем разница между sync и async при экспорте и какой риск несет async?
  • Почему файлы на NFSv4-клиенте могут отображаться как nobody:nobody и где это чинится?
  • Чем поведение клиента с опцией hard отличается от soft при недоступности сервера?
  • Как добавить новый экспорт и применить его без перезапуска службы nfs-server?
👍7 ❤️3 🔥 😄 🤔2
Аватара пользователя
Figatova
Сообщения: 1
Зарегистрирован: 14 май 2026, 16:23

Re: Файловый сервер NFS [209.2]

Сообщение Figatova »

А если у меня и v3-клиенты, и v4 одновременно - можно один экспорт на оба или надо разные строки в exports писать?
👍1 ❤️2 🔥 😄 🤔
Аватара пользователя
smaqshahid
Сообщения: 1
Зарегистрирован: 26 май 2026, 06:44

Re: Файловый сервер NFS [209.2]

Сообщение smaqshahid »

Поймал nobody:nobody ровно как тут написано. Оказалось на клиенте в idmapd.conf домен localdomain, а на сервере lab.local. Выровнял - заработало.
👍1 ❤️3 🔥 😄 🤔
Ответить
← Предыдущая глава
Файловый сервер Samba [209.1]
Следующая глава →
DHCP-сервер [210.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость