EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Настройка NFS-сервера на Linux для совместного доступа к каталогу через NFS

Уровень: Продвинутый
Ориентировочное время: ~30 минут
Цель: Настроить NFS-сервер на Linux для совместного доступа к каталогу с нескольких клиентов, что упростит автоматизацию рутинных задач и проведение упреждающего аудита безопасности.

Введение

Управление совместным хранилищем для целого парка серверов является базовым требованием для поддержания производственных сред с высокими требованиями к доступности (uptime). Протокол NFS (Network File System) позволяет системе предоставить общий доступ к каталогу через NFS по сети, выполняя роль NAS (Network Attached Storage). Развернув NFS-сервер на Linux, вы можете обеспечить централизованный доступ к файлам для нескольких клиентов NFS одновременно. Это руководство рассказывает, как эффективно настроить NFS-сервер на Linux, используя NFSv4.2 по умолчанию.

Warning

В этом руководстве используется тип безопасности sec=sys (AUTH_SYS). В этом режиме сервер по своей природе доверяет клиенту в вопросе идентификации пользователей (UID/GID) без какой-либо криптографической аутентификации. Контроль доступа опирается исключительно на фильтрацию по IP-адресам в /etc/exports и стандартные права доступа UNIX к файлам. Такая конфигурация отлично подходит для доверенных внутренних сетей (например, в виртуальной среде Proxmox), но не рекомендуется для недоверенных сетей. Для дополнительной безопасности рассмотрите внедрение аутентификации Kerberos (например, sec=krb5, sec=krb5i или sec=krb5p).

Предварительные требования

Перед началом убедитесь, что выполнены следующие условия:

  • Операционная система: Ubuntu 22.04/24.04 LTS, Debian 12/13 или CentOS/RHEL 9/AlmaLinux 10
  • Необходимое ПО: nfs-kernel-server (2.6+) для Ubuntu/Debian или nfs-utils (2.x+) для CentOS/RHEL/AlmaLinux
  • Доступ: sudo или root доступ на всех машинах
  • Сеть: Серверы должны иметь возможность взаимодействовать через приватную сеть.
  • Необходимые знания: Уверенное использование командной строки Linux.

Терминология

Перед продолжением ознакомьтесь со следующими основными понятиями:

  • NFS (Network File System): Протокол, позволяющий пользователям получать доступ к файлам по сети так, как будто они хранятся на локальном накопителе.
  • NFS-сервер: Центральный компьютер, который хранит файлы и делает их доступными по сети.
  • NFS-клиент: Удаленная машина, которая подключается к серверу для доступа к общим файлам.
  • Общий каталог: Локальная папка на сервере, которая будет доступна клиентам.
  • Экспорт: Процесс предоставления доступа к локальному каталогу клиентам по сети.
  • /etc/exports: Основной конфигурационный файл, используемый демоном NFS для определения того, какие каталоги экспортировать и какие правила доступа применять.
  • Монтирование: Процесс присоединения удаленного сетевого ресурса к локальной структуре каталогов.
  • Точка монтирования: Локальный каталог на клиенте, к которому присоединяется удаленная файловая система.
  • nfs-utils: Пакет программного обеспечения, содержащий необходимые утилиты и демоны для клиента и сервера NFS.
  • RPC (Remote Procedure Call): Протокол, который одна программа может использовать для запроса услуги от программы, расположенной на другом компьютере.
  • Portmapper / rpcbind: Служба, сопоставляющая номера программ RPC с номерами сетевых портов, необходимая для NFS для установления соединений.
  • Разрешения: Права доступа, определяющие, кто может читать, записывать или выполнять файлы.
  • Доступ только для чтения (RO): Состояние прав доступа, позволяющее клиентам просматривать, но не изменять файлы.
  • Доступ на чтение и запись (RW): Состояние прав доступа, позволяющее клиентам изменять общие файлы.
  • root_squash: Функция безопасности, сопоставляющая запросы от удаленного пользователя root с непривилегированным пользователем (nobody) для предотвращения несанкционированного root-доступа.
  • Брандмауэр: Система сетевой безопасности, отслеживающая и контролирующая входящий и исходящий сетевой трафик.
  • Файловая система Linux: Структурированный метод, используемый Linux для хранения и организации файлов на диске.
  • Имя хоста: Человекочитаемая метка, присвоенная устройству, подключенному к компьютерной сети.
  • IP-адрес: Уникальный числовой идентификатор, присвоенный каждому устройству, подключенному к сети.
  • Автомонтирование: Практика автоматического монтирования файловых систем при загрузке.
  • NAS (Network Attached Storage): Архитектура хранения данных на уровне файлов, делающая данные доступными по сети.

Шаг 1: Установка необходимых пакетов

Сначала установите необходимое программное обеспечение на сервере и клиентах. Пакет nfs-utils предоставляет необходимые демоны и инструменты для управления файловой системой. Современные конфигурации должны использовать по умолчанию NFSv4.2, который работает с сохранением состояния (stateful) и упрощает правила брандмауэра.

На NFS-сервере (Debian/Ubuntu):

sudo apt update sudo apt install nfs-kernel-server

На NFS-сервере (CentOS/RHEL/AlmaLinux):

sudo dnf install nfs-utils sudo systemctl enable --now rpcbind nfs-server

Info

Для чистой настройки NFSv4 служба rpcbind технически не требуется для самого монтирования NFS. Однако она необходима, если вы планируете использовать команду showmount (как показано в Шаге 5) для обнаружения экспортов или если вам нужно поддерживать устаревших клиентов NFSv3.

На NFS-клиенте (Debian/Ubuntu):

sudo apt update sudo apt install nfs-common

На NFS-клиенте (CentOS/RHEL/AlmaLinux):

sudo dnf install nfs-utils

Вы должны увидеть, что установка успешно завершена. Необходимые службы RPC и NFS теперь установлены и запущены.

Шаг 2: Создание общего каталога и настройка разрешений NFS

Создайте на сервере каталог, который планируете экспортировать.

sudo mkdir -p /mnt/nfs_share

Настройте соответствующие разрешения NFS, чтобы клиенты могли получить доступ к файлам. В этом руководстве мы назначим владельцем выделенного непривилегированного сервисного пользователя и предоставим соответствующие права группе.

Debian/Ubuntu:

sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share

CentOS/RHEL/AlmaLinux:

sudo chown nobody:nobody /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share

Такая конфигурация позволяет избежать обхода локальной модели разрешений Linux, гарантируя, что контроль доступа NFS не будет вашим единственным уровнем безопасности. Разрешение 2775 безопасно обеспечивает совместную работу группы без нарушения принципа наименьших привилегий.

Шаг 3: Настройка NFS-сервера на Linux

Чтобы определить правила экспорта, необходимо отредактировать файл /etc/exports на сервере.

Откройте файл:

sudo nano /etc/exports

Добавьте следующую строку, чтобы предоставить доступ конкретной подсети клиентов (например, <CLIENT_SUBNET>):

/mnt/nfs_share <CLIENT_SUBNET>(rw,sync,no_subtree_check,root_squash)

Это настраивает сервер на экспорт каталога со следующими параметрами:

  • rw: Предоставляет доступ на чтение и запись (RW). Используйте ro для доступа только для чтения (RO).
  • sync: Принудительно записывает изменения на диск перед ответом клиенту.
  • no_subtree_check: Отключает проверку поддерева (subtree checking), что повышает надежность.
  • root_squash: Явно сопоставляет запросы от удаленного пользователя root с непривилегированным пользователем (nobody). Это поведение по умолчанию, но его всегда следует указывать явно для целей аудита. Используйте no_root_squash только в строго контролируемых средах.

Info

Вы можете указать нескольких клиентов, добавив больше IP-адресов или подсетей через пробел в той же строке, что предоставит доступ нескольким машинам.

Примените конфигурацию экспорта:

Debian/Ubuntu:

sudo exportfs -a sudo systemctl restart nfs-kernel-server

CentOS/RHEL/AlmaLinux:

sudo exportfs -a sudo systemctl restart nfs-server

Теперь сервер активно экспортирует каталог в сеть.

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

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

Использование UFW (Debian/Ubuntu):

На свежей установке Ubuntu UFW по умолчанию неактивен. В чистой системе Debian 13 он может даже не быть установлен. Если вы планируете использовать UFW, убедитесь, что он установлен (sudo apt install ufw) и явно включен перед добавлением правил:

sudo ufw enable sudo ufw allow from <CLIENT_SUBNET> to any port nfs

Использование Firewalld (CentOS/RHEL/AlmaLinux):

sudo firewall-cmd --permanent --zone=public --add-service=nfs sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind sudo firewall-cmd --permanent --zone=public --add-service=mountd sudo firewall-cmd --reload

Info

AlmaLinux/RHEL (SELinux): На чистой установке AlmaLinux SELinux находится в режиме Enforcing. Для типового пути /mnt/nfs_share, используемого в этом руководстве, существующий контекст mnt_t совместим с демоном nfsd. Однако если вы планируете экспортировать нестандартные пути (например, /srv, /data или /home/...), NFS не сможет записывать в них, пока вы не настроите SELinux должным образом. Вы можете либо переключить глобальный boolean (sudo setsebool -P nfs_export_all_rw 1), либо задать правильный fcontext с помощью semanage.

Клиенты из разрешенной подсети теперь могут получить доступ к службам NFS.

Шаг 5: Проверка экспорта с помощью команды showmount

На сервере заблаговременно проверьте активные экспорты и внутреннее состояние аудита для обеспечения безопасности. Выполните следующую команду, чтобы проверить точные параметры экспорта, примененные демоном NFS:

sudo cat /var/lib/nfs/etab

В качестве альтернативы вы можете использовать sudo exportfs -v для просмотра подробного списка экспорта.

Затем с клиентской машины используйте команду showmount, чтобы убедиться, что экспорт виден по сети. Замените <SERVER_IP> фактическим IP-адресом вашего NFS-сервера.

Info

showmount работает только если на сервере открыт порт 111 (rpcbind). Если вы используете чистый NFSv4 и не открывали этот порт, пропустите этот шаг — проверьте экспорт командой sudo exportfs -v на сервере, а доступность с клиента — монтированием в Шаге 6.

showmount -e <SERVER_IP>

Ожидаемый вывод:

Export list for <SERVER_IP>: /mnt/nfs_share <CLIENT_SUBNET>

Если экспорт присутствует в списке, конфигурация сервера правильна и доступна для клиента.

Шаг 6: Монтирование файловой системы NFS на клиенте

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

Создайте точку монтирования:

sudo mkdir -p /mnt/client_share

Смонтируйте каталог:

sudo mount -t nfs -o vers=4.2 <SERVER_IP>:/mnt/nfs_share /mnt/client_share

Общий ресурс смонтирован. Вы можете проверить это, запустив df -h, чтобы увидеть подключенный сетевой диск. Указание vers=4.2 гарантирует, что клиент явно использует последнюю версию протокола вместо автоматического перехода на более старые NFSv3 или NFSv4.0.

Tip

Чтобы клиент автоматически монтировал файловую систему NFS при запуске, вы можете настроить статическое монтирование, добавив запись в /etc/fstab. Обратите внимание, что это статическое монтирование; настоящие динамические конфигурации Automount в производственных средах обычно реализуются через autofs (/etc/auto.master).

Откройте /etc/fstab:

sudo nano /etc/fstab

Добавьте следующую строку:

<SERVER_IP>:/mnt/nfs_share /mnt/client_share nfs auto,nofail,noatime,_netdev,hard,vers=4.2,timeo=600 0 0

Это предотвращает зависание процесса загрузки клиента, если сервер временно недоступен.

Проверка

Чтобы подтвердить правильность разрешений NFS и сетевых настроек, выполните тест чтения/записи с клиента:

touch /mnt/client_share/test_file.txt ls -l /mnt/client_share/

Ожидаемый вывод:

-rw-r--r-- 1 nobody nogroup 0 May 24 12:00 test_file.txt

Info

В зависимости от ОС клиента владелец файла будет отображаться как nobody nogroup (Debian/Ubuntu) или nobody nobody (RHEL/AlmaLinux). Это ожидаемое поведение idmapping в NFSv4, когда запросы корректно сопоставляются с непривилегированным пользователем. Если возникают расхождения, убедитесь, что параметр Domain в /etc/idmapd.conf совпадает на сервере и клиенте.

Если файл успешно создан, ваши клиенты могут связываться с сервером и записывать данные должным образом.

Отмена изменений

Чтобы размонтировать общий ресурс на клиенте:

sudo umount /mnt/client_share

Удалите запись из /etc/fstab на клиенте, если вы её добавляли.

Чтобы прекратить совместный доступ к каталогу на сервере, удалите соответствующую строку из /etc/exports и примените изменения:

Debian/Ubuntu:

sudo exportfs -a sudo systemctl restart nfs-kernel-server

CentOS/RHEL/AlmaLinux:

sudo exportfs -a sudo systemctl restart nfs-server

Чтобы полностью удалить установленные пакеты:

Debian/Ubuntu:

sudo apt remove nfs-kernel-server nfs-common

CentOS/RHEL/AlmaLinux:

sudo dnf remove nfs-utils

Это действие полностью отключит функциональность NFS на ваших машинах.

Заключение

Вы успешно узнали, как настроить NFS-сервер на Linux. Правильно настроив параметры, вы сможете безопасно предоставить общий доступ к каталогу через NFS для нескольких клиентов NFS. Эта конфигурация служит надежной основой для автоматизации рутинных административных задач и централизации логов для проведения упреждающего аудита безопасности.

Версия документа: 1.0
Последнее обновление: Май 2026
Владелец: Команда технической документации

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA