NFS-сервер у Linux: налаштування спільного каталогу | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
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