Подробное руководство по настройке NFS-сервера в Linux

Установка NFS-сервера — это только первый шаг. Его грамотная настройка определяет безопасность, стабильность и производительность общего доступа к файлам. Эта статья посвящена ключевому этапу — конфигурации сервера. Мы детально разберем работу с файлом экспорта, права доступа, интеграцию с брандмауэром и управление службами, чтобы ваш сетевой ресурс работал надежно.

Шаг 1: Базовая настройка и файл /etc/exports

Сердце NFS-сервера — файл /etc/exports. В нем указывается, какие каталоги экспортируются и на каких условиях.

Формат записи:

<экспортируемый_каталог> <клиент_или_сеть>(<параметры_доступа>)

Практические примеры настройки:

Чтение и запись для всей подсети:

/srv/data 192.168.1.0/24(rw,sync,no_subtree_check)

Только чтение для конкретного клиента:

/srv/backup 192.168.1.50(ro,sync,no_root_squash)

Экспорт для нескольких клиентов с разными правами:

/srv/media 192.168.1.100(rw,sync) 192.168.1.200(ro,sync)

Ключевые параметры доступа:

  • rw/ro: Чтение и запись / Только чтение.

  • sync/async: Гарантирует запись на диск перед подтверждением (sync) или кэширует (async). Для надежности используйте sync.

  • no_subtree_check: Ускоряет работу, отключая проверку поддеревьев. Рекомендуется.

  • no_root_squash: Отключает «схлопывание» прав пользователя root с клиента. Используйте с большой осторожностью, только в доверенных сетях. По умолчанию включен root_squash.

  • Файл /etc/exports в редакторе nano с разными примерами настроек для разных клиентов и сетей
    Примеры конфигурации файла /etc/exports с разными правами доступа для подсетей и отдельных хостов

Шаг 2: Применение настроек и управление службами

После редактирования файла /etc/exports необходимо применить изменения и перезапустить службы.

Проверить синтаксис файла:

sudo exportfs -a

Перезапустить службу NFS:

# Для Debian/Ubuntu, openSUSE:

sudo systemctl restart nfs-kernel-server

# Для Fedora/RHEL, Arch Linux:

sudo systemctl restart nfs-server

Добавить службу в автозагрузку:

sudo systemctl enable nfs-server

# или

nfs-kernel-server

Терминал с командами перезапуска и проверки статуса службы NFS (systemctl restart nfs-server, systemctl status nfs-server)
Управление службой NFS: перезапуск для применения новых настроек и проверка статуса работы

Шаг 3: Настройка прав доступа к файлам и каталогам

Параметры в /etc/exports регулируют сетевой доступ. Локальные права файловой системы также критически важны.

Простейший вариант (для тестов):

sudo chmod -R 777 /srv/data

sudo chown nobody:nogroup /srv/data

Безопасный вариант: Создайте специальную группу для пользователей NFS, назначьте её каталогу и дайте права.

sudo groupadd nfs-users

sudo chown -R :nfs-users /srv/data

sudo chmod -R 775 /srv/data

# Добавьте нужных пользователей в группу:

sudo usermod -aG nfs-users user1

Шаг 4: Настройка брандмауэра для NFS

NFS использует несколько служб и портов. Чтобы клиенты могли подключиться, настройте брандмауэр.

Для firewalld (Fedora, RHEL, CentOS):

sudo firewall-cmd —permanent —add-service={nfs,nfs3,rpc-bind,mountd}

sudo firewall-cmd —reload

Для ufw (Ubuntu, Debian):

sudo ufw allow from 192.168.1.0/24 to any port nfs

sudo ufw allow 111/udp

sudo ufw reload

Терминал с успешным выполнением команд firewall-cmd для открытия сервисов nfs, rpc-bind и mountd
Настройка брандмауэра firewalld для разрешения работы NFS-сервера

Шаг 5: Проверка работоспособности сервера

Убедитесь, что сервер корректно экспортирует ресурсы:

sudo exportfs -v

Эта команда покажет все активные экспорты с их параметрами.

Краткое обновление системы в разных дистрибутивах

Перед настройкой и периодически после неё обновляйте систему для безопасности.

  • Ubuntu/Debian: sudo apt update && sudo apt upgrade

  • Fedora/RHEL: sudo dnf update

  • Arch Linux: sudo pacman -Syu

  • openSUSE: sudo zypper update

FAQ: Решение проблем с настройкой NFS-сервера

1. Клиент получает ошибку «Permission denied» даже при правильных настройках.
Основная причина — несовпадение UID/GID пользователей на сервере и клиенте. Пользователь с UID=1000 на клиенте будет «отображаться» в UID=1000 на сервере. Решение: синхронизировать пользователей (NIS, LDAP) или использовать одинаковые UID вручную.

2. Запись в каталог работает, но владельцем файлов становится «nobody».
Это действие параметра root_squash (включен по умолчанию). Если нужно сохранять права, используйте no_root_squash или настройте all_squash с параметрами anonuid и anongid, указав UID/GID нужного пользователя.

3. Как безопасно добавить новый каталог для экспорта?

  1. Создайте каталог, настройте локальные права (chown, chmod).

  2. Добавьте запись в конец файла /etc/exports.

  3. Примените изменения: sudo exportfs -ra. Полный перезапуск службы обычно не требуется.

4. NFS подключение работает, но очень медленно.
Попробуйте:

  • Добавить параметр async в /etc/exports (рискуете потерей данных при сбое питания).

  • Убедиться, что в сети нет потерь пакетов (ping -f <клиент>).

  • Использовать более производительную сеть (Gigabit Ethernet вместо Wi-Fi).

5. Клиент «зависает» при потере связи с сервером.
Это стандартное поведение при параметре hard (жесткое монтирование, используется по умолчанию). Клиент будет бесконечно ждать ответа сервера. Для чувствительных к таймаутам задач используйте параметр soft на стороне клиента при монтировании (mount -o soft ...).

6. Как посмотреть, кто подключен к моему NFS-серверу?
Используйте утилиту showmount:

sudo showmount -a <ip_адрес_сервера>

Если IP не указан, команда покажет подключения к локальному серверу.

Заключение

Успешная настройка NFS-сервера строится на трех китах: точная конфигурация файла /etc/exports, корректные права файловой системы и правильная настройка брандмауэра. Понимание таких параметров, как sync, root_squash и no_subtree_check, позволяет найти баланс между производительностью, удобством и безопасностью. Регулярная проверка логов (journalctl -u nfs-server) и подключений (showmount) поможет поддерживать стабильную работу сетевого хранилища.