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

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

• 7 min read • DevOps • Обновлено 26 Nov 2025
Настройка NFS на Ubuntu 20.04
Настройка NFS на Ubuntu 20.04

Схема NFS: сервер и клиент с смонтированными директориями

Кратко: установите 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 — Создание директорий для шаринга на хосте

Есть два распространённых подхода к шарингу:

  1. Общая директория с безопасными правами (по умолчанию корень клиента “ограничивается”).
  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: пошаговый план для администратора

  1. На хосте: sudo apt update && sudo apt install nfs-kernel-server
  2. На клиенте: sudo apt update && sudo apt install nfs-common
  3. На хосте: создать директории и установить права (пример: /var/nfs/general)
  4. Отредактировать /etc/exports и добавить строки экспорта
  5. sudo exportfs -ra && sudo systemctl restart nfs-kernel-server
  6. Настроить UFW: sudo ufw allow from client_ip to any port nfs
  7. На клиенте: создать точки монтирования и выполнить sudo mount host_ip:/var/nfs/general /nfs/general
  8. Протестировать создание файлов и проверить права
  9. Добавить записи в /etc/fstab для автоподключения
  10. Документировать включённые опции и ограничения доступа

Критерии приёмки

  • Клиент успешно монтирует указанные шары после команды 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 для автоподключения и добавляйте тесты для приёмки.

Если вам нужна помощь при диагностике ошибок или вы хотите пример конфигурации для нескольких клиентов/подсетей — опишите вашу сеть, и я помогу адаптировать конфигурацию.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро