Стаття також доступна російською (перейти до перегляду).

Вступ
- Можливості NFS
- Конфігурування NFS на сервері
- Створення користувача та оновлення індексу пакетів
- Розгортання серверної частини програми
- Створення та підготовка до експорту загальних ресурсів
- Налаштування брандмауеру
- Конфігурування NFS на клієнті
- Тестування доступу до загальних ресурсів
- Автоматичне монтування загальних ресурсів NFS при завантаженні клієнта
- Демонтування загальних NFS-ресурсів
Доволі часто постає питання організації віддаленого доступу користувачів Ubuntu до загального мережевого ресурсу. Вирішити це питання можна за допомогою мережевого розподіленого протоколу файлової системи, котрим є NFS (Network File System). Розглянемо його можливості та питання практичного використання при організації доступу до загальних мережевих ресурсів.
Можливості NFS
Програмний засіб дає можливість працювати з віддаленими каталогами так, наче вони є локальними.
Гнучкість налаштувань забезпечується наявністю кількох служб, котрі входять до складу NFS, як на стороні серверу, так і клієнту. Кожна зі служб має власну конфігурацію, встановлену за замовчуванням, котру можна легко змінити за допомогою загального файлу конфігурації /etc/nfs.conf. Файл з'явився на заміну кільком окремим файлам, починаючи з версії Ubuntu 22.04.
Вкажемо на деякі переваги використання NFS:
- Економія дискових ресурсів на локальних станціях (клієнтах) за рахунок використання загального сховища даних;
- Використання замість локальних лише віддалених домашніх каталогів користувачів, котрі налаштовані на сервері;
- Зменшення кількості зовнішніх пристроїв збереження даних у мережі.
Слід зазначити, що NFS не шифрує дані при передачі, і тому треба враховувати цю його особливість. Так, при організації загального доступу через приватну мережу можна обійтися без шифрування, але в іншому випадку краще вжити певні заходи, наприклад, застосувати тунель з шифруванням. Це дасть змогу у подальшому убезпечити компанію від втрати корпоративних даних. Більш детальний опис читайте в нашій статті “Що таке NFS”, а в цій статті ми сконцентруємось на його налаштуванні.
Конфігурування NFS на сервері
Перед початком роботи з NFS необхідно встановити відповідне програмне забезпечення на сервері та клієнтах – машинах, котрі будуть користуватися загальними ресурсами сервера. У нашому випадку, і сервер і клієнт керуються Ubuntu 22.04.
Спочатку розглянемо послідовність дій, котру треба виконати на сервері:
- Створення користувача та оновлення індексу пакетів;
- Розгортання серверної частини програми;
- Створення та підготовка до експорту загальних ресурсів;
- Налаштування брандмауеру.
Створення користувача та оновлення індексу пакетів
Створимо на сервері нового користувача із правами sudo. Для цього введемо в терміналі:
$ adduser testing_nfs

Користувача із ім’ям testing_nfs створено. Додамо його до групи sudo за допомогою наступної команди:
$ adduser testing_nfs sudo

Змінимо поточний акаунт:
$ su -l testing_nfs

Оновимо індекс локальних пакетів Ubuntu:
$ sudo apt update

Команда успішно виконана:
Reading package lists... Done Building dependency tree... Done Reading state information... Done
Розгортання серверної частини програми
Ініціюємо процес інсталяції програми за допомогою наступної команди:
$ sudo apt install nfs-kernel-server

Підтвердимо свою згоду на виділення додаткових 1,973 kB дискового простору, ввівши символ Y, після чого процес інсталяції продовжиться.

Кінцеве вікно виходу команди наведене нижче.

Результат: Setting up nfs-kernel-server (1:2.6.1-1ubuntu1.2), тобто програма встановлена.
За допомогою влаштованої довідкової системи завжди можна переглянути довідкову інформацію по мережевій файловій системі. Це можна зробити за допомогою наступної команди:
$ man nfs

Запустимо NFS-сервер у якості служби. Введемо в терміналі:
$ sudo systemctl start nfs-kernel-server.service

Сервер успішно запущено.
Створення та підготовка до експорту загальних ресурсів
Загальні ресурси можуть бути двох типів – без можливості root-доступу зі сторони клієнтів та з можливістю такого доступу. Спочатку розглянемо перший варіант організації доступу до загальних ресурсів.
Створимо каталог загального користування із ім’ям shared_res:
$ sudo mkdir /var/nfs/shared_res -p

Оскільки при створенні ресурсу були застосовані привілеї sudo, його власником буде root-користувач серверу. Для підтвердження цього, переглянемо встановлені для ресурсу права:
$ ls -la /var/nfs/shared_res

Результат:
drwxr-xr-x 2 root root 4096 Mar 9 16:21 . drwxr-xr-x 3 root root 4096 Mar 9 16:21 ..
Можна переконатися, що власником є root-користувач.
Змінимо власника каталогу для можливості захисту даних від дій root-користувача клієнтської машини. Для цього введемо в терміналі:
$ sudo chown nobody:nogroup /var/nfs/shared_res

Після цього ресурс захищений та готовий до експорту.
Тепер розглянемо створення загального ресурсу із можливістю root-доступу зі сторони клієнту. На практиці це може бути необхідно у випадку використання клієнтами домашніх каталогів, що зберігаються на сервері.
Використаємо вже існуючий на сервері каталог /home.
Для організації загального доступу до нього скористаємося файлом конфігурації NFS із ім’ям /etc/exports, котрий був автоматично створений при інсталяції програми.
Відкриємо вказаний файл за допомогою редактору nano:
$ sudo nano /etc/exports
В нижній частині файлу помістимо записи для кожного зі створених нами ресурсів. У нашому випадку такі записи будуть мати наступний вигляд:
/var/nfs/shared_res 178.20.157.79(rw,sync,no_subtree_check) /home 178.20.157.79(rw,sync,no_root_squash,no_subtree_check)

У першій частині кожного запису вказана назва ресурсу, до якого відкривається загальний доступ. Потім вказується IP-адреса серверу. І, нарешті, в дужках через кому перераховуються опції, котрі визначають правила обробки запитів та рівні доступу до ресурсу. Вкажемо значення деяких з них:
sync – ініціює запис та фіксацію поточного стану загального ресурсу перед кожною відповіддю клієнту; забезпечує стабільність та узгодженість стану системи, однак зменшує швидкість її роботи;
rw – дозволяє клієнту запис та зчитування даних;
no_root_squash – дає можливість отримати клієнтам root-доступ до загального ресурсу.
Збережемо внесені у файл зміни та вийдемо з редактору.
Перезавантажимо NFS-сервер для можливості застосування внесених нами змін. Для цього введемо в терміналі:
$ sudo systemctl restart nfs-kernel-server

Налаштування брандмауеру
Перед практичним використанням загальних ресурсів необхідно переконатися, що існуючі правила брандмауеру не перешкоджають проходженню їх трафіку.
Для початку, перевіримо статус брандмауеру, щоб з’ясувати чи включений він. Для цього введемо наступну команду:
$ sudo ufw status

Результат: Status: inactive, тобто брандмауер неактивний.
Перед його активацією бажано одразу включити правила, котрі дозволяють допустимі вхідні з’єднання.
Дозволимо вхідні SSH-з’єднання. Для цього введемо в терміналі:
$ sudo ufw allow ssh

Результат: Rules updated.
Таким чином ми дозволили всі з’єднання на порту 22, котрий прослуховується SSH за замовчуванням.
Для активації UFW введемо в терміналі:
$ sudo ufw enable

Результат: Firewall is active and enabled on system startup, що означає, що брандмауер включений.
Переглянемо діючі правила:
$ sudo ufw status verbose

Тепер необхідно додати окремі правила для NFS-трафіку.
Відкриємо порт 2049 на сервері для клієнтської машини:
$ sudo ufw allow from 178.20.157.79 to any port nfs
Тут 178.20.157.79 – IP-адреса нашого клієнта.

Результат: Rule added.
Ще раз перевіримо встановлені правила:
$ sudo ufw status

На виході ми отримали наступні зміни у правилах:
To Action From 2049 ALLOW 178.20.157.79
Це означає, що NFS-трафік для клієнтської машини відкритий.
Конфігурування NFS на клієнті
На клієнтській машині ми вже маємо користувача із ім'ям admin та правами sudo і тому не будемо створювати нового. Нам залишається лише оновити індекс локальних пакетів та встановити клієнтську частину програми.
$ sudo apt update

$ sudo apt install nfs-common


Результат: Setting up nfs-common (1:2.6.1-1ubuntu1.2), тобто програма встановлена.
Монтування каталогів сервера на клієнті
Для можливості використання загальних ресурсів сервера, їх необхідно змонтувати у порожні каталоги клієнтської системи, тобто створити точки монтування.
Створимо два порожні каталогу за допомогою наступних команд:
$ sudo mkdir -p /nfs/shared_res

$ sudo mkdir -p /nfs/home

Після цього змонтуємо загальні ресурси серверу на клієнтську систему за допомогою наступних команд:
$ sudo mount 178.20.159.96:/var/nfs/shared_res /nfs/shared_res

$ sudo mount 178.20.159.96:/home /nfs/home

Тут 178.20.159.96 – IP-адреса серверу.
Перевіримо успішність виконання операції:
$ df -h

Можна переконатися, що загальні каталоги змонтовані на клієнті. Використання ними однакових об’ємів дискового простору клієнта пояснюється тим, що вони змонтовані із однієї файлової системи.
Переглянути скільки реально займає дискового простору кожна точка монтування можна за допомогою команди:
$ du -sh /nfs/shared_res

Таким чином вміст каталогу /nfs/shared_res становить усього 4.0Kb.
Тестування доступу до загальних ресурсів
Сутність тестування полягає у запису тестових файлів у загальні каталоги та перевірки успішності виконаної операції.
Спочатку запишемо тестовий файл із ім’ям shared_res.test до каталогу загального користування із обмеженням root-доступу. Для цього введемо в терміналі:
$ sudo touch /nfs/shared_res/shared_res.test

Перевіримо власника створеного файлу:
$ ls -l /nfs/shared_res/shared_res.test

Результат:
-rw-r--r-- 1 nobody nogroup 0 Mar 11 11:05 /nfs/shared_res/shared_res.test
Можна переконатися, що власником файлу є nobody:nogroup. Це означає, що root-користувач клієнта не зможе виконувати в цьому каталозі адміністраторські дії, наприклад, такі, як зміна власника файлу та інші. І це узгоджується із тим фактом, що за замовчуванням NFS налаштована таким чином, щоб обмежити доступ до загальних ресурсів сервера. При створенні ж вказаного загального ресурсу на сервері ми свідомо не змінювали ці установки.
Тепер аналогічним чином запишемо тестовий файл із ім’ям home.test до загального ресурсу, котрий виконує функції домашнього каталогу для клієнта. Для цього введемо в терміналі:
$ sudo touch /nfs/home/home.test

Перевіримо власника створеного файлу:
$ ls -l /nfs/home/home.test

Результат:
-rw-r--r-- 1 root root 0 Mar 11 11:11 /nfs/home/home.test
Як бачимо, власником тут є root-користувач, оскільки ми раніше змінили налаштування, встановлені за замовчуванням, включивши до конфігураційного файлу /etc/exports опцію no_root_squash. Це означає, що root-користувач клієнта зможе виконувати в цьому каталозі адміністраторські дії, як ми того й хотіли.
Автоматичне монтування загальних ресурсів NFS при завантаженні клієнта
Для реалізації вказаної задачі достатньо додати строчки з налаштуваннями для кожного з ресурсів до файлу /etc/fstab на клієнті.
Відкриємо вказаний файл у редакторі nano із правами Адміністратора:
$ sudo nano /etc/fstab
Додамо до файлу настуапні строчки:
178.20.159.96:/var/nfs/shared_res /nfs/shared_res nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 178.20.159.96:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

На першій позиції тут вказується IP-адреса серверу та шлях доступу до загального ресурсу на сервері. На другій позиції вказується каталог монтування на клієнті. Після цього перераховуються через кому опції для налаштувань.
Збережемо внесені зміни та вийдемо з редактору.
Демонтування загальних NFS-ресурсів
Для прикладу, демонтуємо створені нами загальні ресурси:
$ sudo umount /nfs/shared_res $ sudo umount /nfs/home

Після цього на клієнті залишаються доступними лише локальні ресурси. Перевіримо це:
$ df -h

Можна переконатися, що віддалені ресурси вже недоступні для клієнта.
У випадку, якщо записи про ресурси вже були внесені до файлу /etc/fstab, то необхідно або видалити ці записи, або ж закоментувати. Також можна видалити із записів опцію auto. Після цього ресурси вже не будуть автоматично монтуватися при завантаженні клієнтської системи. Але завжди можна буде виконати монтування вручну після завантаження.
Якщо для Вашого проекту потрібен виділений сервер, дата-центр FREEhost.UA готовий допомогти Вам в цьому. На нашому сайті Ви знайдете найбільший вибір серверів для оренди в Україні. У нас Ви знайдете прості сервери для особистих проектів, а також потужне обладнання на базі серверних процесорів Xeon. Нашими перевагами є: цілодобова технічна підтримка українською мовою, висока надійність дата-центру, сервери розташовані в Україні, тому підг для користувачів буде мінімальний, для юридичних осіб ми надаємо всі необхідні бухгалтерські документи.
Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.
|
Дата: 14.03.2024 Автор: Олександр Ровник
|
|

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus