Настройка NFS на Ubuntu 20.04: сервер и клиент

Кратко: установите nfs-kernel-server на хосте и nfs-common на клиенте, создайте точки шаринга и пропишите экспорт в /etc/exports. Настройте UFW для порта 2049 и добавьте монтирование в /etc/fstab для автоподключения. В статье есть пошаговый SOP, рекомендации по безопасности и сценарии тестирования.
Введение
Network File System (NFS) — сетевой протокол для совместного доступа к файловым системам. NFS позволяет монтировать удалённые каталоги на сервере так, будто они локальные. В этом руководстве показано, как настроить NFS-сервер и подключить NFS-шары на клиенте под Ubuntu 20.04.
Определение терминов
- NFS: протокол для совместного доступа к файлам по сети.
- Host (хост): сервер, который экспортирует (делится) каталоги.
- Client (клиент): машина, которая монтирует экспортированные каталоги.
Важные примечания
Important: используйте no_root_squash только при полной уверенности в безопасности клиента. Это даёт root-доступ с клиента на сервер.
Note: в примерах сохранены переменные host_ip и client_ip — замените их на реальные адреса или сети (например, 192.168.1.0/24).
Содержание
- Требования
- Установка NFS на хосте и клиенте
- Создание директорий для шаринга
- Конфигурация /etc/exports
- Настройка UFW
- Монтирование на клиенте и автоподключение
- Тестирование
- Отладка и типичные ошибки
- Безопасность и лучшие практики
- Альтернативы и сравнение
- SOP: пошаговый план для администратора
- Критерии приёмки
- Краткое резюме
Требования
- Две системы с Ubuntu 20.04 (host и client). У каждой должен быть пользователь с sudo.
- Желательно частная сеть между ними.
- Базовое знание работы с терминалом и редактирования файлов (nano/vi).
Шаг 1 — Установка NFS на хосте и клиенте
Хост
Установите пакет nfs-kernel-server, который предоставляет NFS-сервер.
$ sudo apt update
$ sudo apt install nfs-kernel-serverКлиент
На клиенте устанавливаем nfs-common — он позволяет монтировать NFS-шары, но не предоставляет экспорт.
$ sudo apt update
$ sudo apt install nfs-commonШаг 2 — Создание директорий для шаринга на хосте
Есть два распространённых подхода к шарингу:
- Общая директория с безопасными правами (по умолчанию корень клиента “ограничивается”).
- Домашняя директория с разрешением для root-клиента (no_root_squash).
Первый способ — безопасная общая папка
Создаём директорию и назначаем ownership nobody:nogroup, чтобы корневые операции клиентского root переводились в неправа пользователя.
$ sudo mkdir -p /var/nfs/general
$ sudo chown nobody:nogroup /var/nfs/generalЭто снижает риск того, что root на клиенте получит права root на хосте.
Второй способ — шаринг /home с no_root_squash
Если вы хотите, чтобы root на клиенте действовал как root на сервере (небезопасно для незнакомых клиентов), можно экспортировать /home с опцией no_root_squash. Внимание: меняя права в /home, можно повлиять на локальных пользователей.
Шаг 3 — Конфигурация экспорта на хосте
Откройте /etc/exports и добавьте строки для каждой директории, которую хотите экспортировать.
$ sudo nano /etc/exportsПример содержания:
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)Объяснение опций:
- rw — чтение и запись для клиента.
- sync — сервер подтверждает операцию только после записи на диск.
- no_subtree_check — отключает проверку пути при каждом обращении; полезно при переименованиях.
- no_root_squash — позволяет root-клиенту действовать как root на сервере (использовать осторожно).
После изменения перезапустите сервис:
$ sudo systemctl restart nfs-kernel-serverИли примените экспорт без перезапуска:
$ sudo exportfs -raШаг 4 — Настройка брандмауэра UFW
NFS использует порт 2049 (TCP/UDP). Разрешайте доступ по конкретному IP или подсети, а не всем подряд.
$ sudo ufw allow from client_ip to any port nfs
$ sudo ufw statusПример вывода status показывает правило для порта 2049. Если вы используете дополнительные RPC-сервисы (mountd, statd, lockd), они могут использовать динамические порты; лучше закреплять их в конфигурации или использовать ufw по протоколу/службе.
Шаг 5 — Создание точек монтирования на клиенте и тестовое монтирование
На клиенте создайте каталоги для монтирования:
$ sudo mkdir -p /nfs/general
$ sudo mkdir -p /nfs/homeСмонтируйте вручную:
$ sudo mount host_ip:/var/nfs/general /nfs/general
$ sudo mount host_ip:/home /nfs/homeПроверьте монтирование:
$ df -hЕсли файлы смонтированы, вы увидите строки вида host_ip:/var/nfs/general в списке.
Чтобы проверить реальный размер содержимого под точкой монтирования, используйте du:
$ du -sh /nfs/generalШаг 6 — Тестирование прав доступа
Тест 1: создание файла в /nfs/general (с дефолтными опциями, root будет переведён в nobody:nogroup)
$ sudo touch /nfs/general/general.test
$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.testТест 2: создание файла в /nfs/home при использовании no_root_squash
$ sudo touch /nfs/home/home.test
$ ls -l /nfs/home/home.test
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.testЭти тесты подтверждают поведение опции no_root_squash и стандартную политику «root squashing».
Шаг 7 — Автоматическое монтирование при загрузке
Чтобы монтирования сохранялись после перезагрузки, добавьте записи в /etc/fstab на клиенте:
host_ip:/var/nfs/general /nfs/general 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Подсказки по опциям fstab:
- nofail — не мешает загрузке, если ресурс недоступен.
- noatime — уменьшает запись меток доступа.
- nolock — отключает механизм блокировок (используйте с осторожностью).
- intr — устаревшая, в новых ядрах может игнорироваться.
- actimeo — кэш времени атрибутов (в секундах).
После редактирования перезагрузите клиент и проверьте df -h.
Шаг 8 — Отмонтирование
Если шар больше не нужен:
$ sudo umount /nfs/home
$ sudo umount /nfs/generalЧастая ошибка — попытка использовать команду unmount вместо umount.
Удалите или закомментируйте строки в /etc/fstab, чтобы предотвратить автоматическое монтирование после перезагрузки.
Отладка и типичные ошибки
Полезные команды для диагностики:
- showmount -e host_ip — показывает экспортированные каталоги.
- rpcinfo -p host_ip — показывает RPC-службы и порты.
- sudo exportfs -v — показывает активные экспорты и опции.
- sudo journalctl -u nfs-kernel-server — лог сервера NFS.
- sudo systemctl status nfs-kernel-server — статус сервиса.
Типичные проблемы и решения:
- Permission denied при монтировании: проверьте /etc/exports, IP-клиента, права на каталоге и UFW.
- Stale NFS file handle: файл/каталог был удалён или перемещён на сервере; размонтируйте и перемонтируйте.
- Неправильные UID/GID: NFS полагается на совпадение UID/GID между сервером и клиентом; используйте консистентную систему учётных записей или idmapd для NFSv4.
Особая заметка про NFSv4 и idmapd:
NFSv4 использует домен и idmapd для преобразования имён пользователей. Проверьте /etc/idmapd.conf и параметр Domain на обеих машинах при проблемах с отображением владельцев.
Безопасность и лучшие практики
- Ограничивайте доступ по IP или подсети.
- Используйте no_root_squash только при необходимости.
- Защитите сервер брандмауэром и VPN при работе через публичные сети.
- Для шифрования и аутентификации рассмотрите Kerberos (sec=krb5, krb5i, krb5p).
- Жёстко контролируйте права на экспортируемых каталогах и минимизируйте привилегии.
Альтернативы и когда NFS не подходит
- Samba (SMB): лучше для интеграции с Windows и когда требуется ACL совместимость.
- SSHFS: простой, безопасный для однопользовательских подключений, но менее производительный при большом числе клиентов.
- GlusterFS/CephFS: распределённые файловые системы для масштабирования и отказоустойчивости.
Когда NFS не подходит:
- нужна сильная клиентская аутентификация с шифрованием без дополнительной настройки (тогда SSHFS или Kerberos + NFS).
- требуется геораспределённое хранение с репликацией и автоматическим восстановлением (тогда Gluster/Ceph).
SOP: пошаговый план для администратора
- На хосте: sudo apt update && sudo apt install nfs-kernel-server
- На клиенте: sudo apt update && sudo apt install nfs-common
- На хосте: создать директории и установить права (пример: /var/nfs/general)
- Отредактировать /etc/exports и добавить строки экспорта
- sudo exportfs -ra && sudo systemctl restart nfs-kernel-server
- Настроить UFW: sudo ufw allow from client_ip to any port nfs
- На клиенте: создать точки монтирования и выполнить sudo mount host_ip:/var/nfs/general /nfs/general
- Протестировать создание файлов и проверить права
- Добавить записи в /etc/fstab для автоподключения
- Документировать включённые опции и ограничения доступа
Критерии приёмки
- Клиент успешно монтирует указанные шары после команды mount и после перезагрузки (fstab).
- Созданные файлы имеют ожидаемые права и владельцев в соответствии с опциями (no_root_squash или root squashing).
- NFS-сервер отвечает на rpcinfo и showmount без ошибок.
- Брандмауэр пропускает трафик только от разрешённых клиентов.
Тестовые сценарии
- TC1: Монтирование вручную — команда mount отрабатывает без ошибок.
- TC2: Создание файла пользователем root на клиенте — ожидаемые владельцы на сервере.
- TC3: Перезагрузка клиента — шары автоматически монтируются.
- TC4: Отключение доступа в UFW — попытка монтирования от заблокированного IP должна завершиться с ошибкой.
Рекомендации по производительности
- Используйте TCP вместо UDP для надежности.
- Настраивайте actimeo/attribute cache под рабочие нагрузки: меньше кэш — свежие данные, больше кэш — лучше производительность.
- Разграничивайте экспортируемые каталоги по нагрузке (не экспортируйте весь диск без нужды).
Пример команд для отладки
# показать экспортируемые каталоги
showmount -e host_ip
# проверить rpc-службы
rpcinfo -p host_ip
# применить экспорт без перезапуска
sudo exportfs -ra
# логи NFS
sudo journalctl -u nfs-kernel-server --since "1 hour ago"Краткое резюме
NFS — простой и проверенный способ шаринга файлов между Linux-машинами. Для безопасной и стабильной работы:
- ограничивайте доступ по IP,
- внимательно выбирайте опции экспорта (rw, sync, no_root_squash),
- используйте fstab для автоподключения и добавляйте тесты для приёмки.
Если вам нужна помощь при диагностике ошибок или вы хотите пример конфигурации для нескольких клиентов/подсетей — опишите вашу сеть, и я помогу адаптировать конфигурацию.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента