Налаштування NFS-сервера на Linux для спільного доступу до каталогу через NFS
Рівень: Просунутий
Орієнтовний час: ~30 хвилин
Мета: Налаштувати NFS-сервер на Linux для спільного доступу до каталогу з кількох клієнтів, що спростить автоматизацію рутинних завдань та проведення випереджального аудиту безпеки.
Вступ
Керування спільним сховищем для цілого парку серверів є базовою вимогою для підтримки виробничих середовищ із високими вимогами до доступності (uptime). Протокол NFS (Network File System) дозволяє системі надати спільний доступ до каталогу через NFS через мережу, виконуючи роль NAS (Network Attached Storage). Розгорнувши NFS-сервер на Linux, ви можете забезпечити централізований доступ до файлів для кількох клієнтів NFS одночасно. Цей посібник розповідає, як ефективно налаштувати NFS-сервер на Linux, використовуючи NFSv4.2 за замовчуванням.
У цьому посібнику використовується тип безпеки 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
Для чистого налаштування 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тільки в строго контрольованих середовищах.
Ви можете вказати кількох клієнтів, додавши більше 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
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-сервера.
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.
Щоб клієнт автоматично монтував файлову систему 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
Залежно від ОС клієнта, власник файлу відображатиметься як 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
Власник: Команда технічної документації