Лабораторна робота 5: NFS¶
Цілі¶
Виконавши цю лабораторну роботу, ви зможете
- встановити та налаштувати NFS
- обмінюватися файлами та каталогами між системами Linux за допомогою NFS
- використовувати звичайні утиліти NFS для запитів або вирішення проблем NFS
Приблизний час виконання цієї лабораторної роботи: 40 хвилин
NFS¶
NFS - це абревіатура від Network File System. Це дозволяє обмінюватися файлами та папками через мережу з іншими системами. NFS забезпечує простий спосіб зробити вміст локальної файлової системи доступним для кількох користувачів (або систем) у мережі.
Цей спільний доступ традиційно здійснюється між системами, подібними до UNIX/Linux, але системи під керуванням операційних систем Microsoft Windows також можуть отримати доступ до спільних ресурсів NFS, якщо на них встановлено належне програмне забезпечення.
Підтримка NFS має бути включена або скомпільована в ядро.
Як і більшість мережевих концепцій, NFS має клієнтську та серверну частини. Серверна сторона складається з системи, яка експортує (обмінює) файлові системи в інші системи. Клієнтська сторона складається із систем, яким потрібен доступ до файлової системи, експортованої сервером.
Для NFSv4 потрібні служби таких програм (демонів):
- portmap - зіставляє програми RPC зі звичайними мережевими портами
- mountd - обробляє вхідні запити на монтування
- nfsd - це основна програма NFS, яка обробляє фактичну передачу файлів
/etc/exports¶
Файл конфігурації /etc/exports служить списком контролю доступу для визначення файлових систем, які можна експортувати через NFS авторизованим клієнтам. Він надає інформацію для mountd та демона файлового сервера NFS на базі ядра nfsd.
Директиви в /etc/exports використовують наступний синтаксис:
shareable_directory allowed_clients(options_affecting_allowed_clients)
Завдання 1¶
Управління NFS¶
У цій вправі ви надасте спільний доступ (експортуєте) локальний каталог, який буде надано спільно з вашою партнерською системою, але спочатку ви навчитеся керувати службою NFS.
NFS — це клієнтсько-серверна програма на основі Remote Procedure Call (RPC). Тому корисно мати під рукою утиліти RPC, які можна використовувати для запитів, налагодження та здійснення викликів RPC до серверів RPC (наприклад, серверів NFS). rpcinfo — одна з таких корисних утиліт. Його синтаксис використання та параметри показані тут:
SYNOPSIS
rpcinfo [-m | -s] [host]
rpcinfo -p [host]
rpcinfo -T transport host prognum [versnum]
rpcinfo -l [-T transport] host prognum versnum
rpcinfo [-n portnum] -u host prognum [versnum]
rpcinfo [-n portnum] [-t] host prognum [versnum]
rpcinfo -a serv_address -T transport prognum [versnum]
rpcinfo -b [-T transport] prognum versnum
rpcinfo -d [-T transport] prognum versnum
Щоб запустити NFS¶
-
Переконайтеся, що ви ввійшли до системи як користувач із правами адміністратора.
-
Почніть з встановлення пакета
nfs-utils. Цей пакет містить різноманітні утиліти для використання з клієнтами та серверами NFS. Впишіть:dnf -y install nfs-utils -
Серед іншого, щойно встановлений пакет nfs-utils також надає сервісний модуль systemd (
nfs-server.service), необхідний для керування демоном NFS у системі. Використовуйтеsystemctlдля перегляду деяких допоміжних служб, які "потрібні" модулю nfs-server. Впишіть:systemctl show -p "Wants" nfs-server
Вихід
```bash
Wants=nfs-idmapd.service nfsdcld.service rpcbind.socket rpc-statd-notify.service rpc-statd.service auth-rpcgss-module.service network-online.target
```
Деякі важливі та помітні служби, яких потребує nfs-сервер, це nfs-idmapd, nfsdcld, rpcbind, rpc-statd-notify, rpc-statd, auth-rpcgss-module.
-
Команда
rpcinfoвикористовується для здійснення RPC-викликів до RPC-сервера та подальшого звітування про результати.rpcinfoмістить список усіх RPC-сервісів, зареєстрованих уrpcbind. Використовуйтеrpcinfo, щоб запросити список усіх зареєстрованих RPC-служб на вашому локальному сервері. Впишіть:rpcinfo -p localhost
Вихід
```bash
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
```
З наведеного вище зразка вихідних даних ми можемо сказати, що служба portmapper зареєстрована на сервері RPC, на якому працює localhost.
!!! Question "Питання"
```
1. Що таке портмапер?
2. З'ясуйте значення різних полів команди `rpcinfo` (заголовки стовпців) (Program, Vers, proto та service)
```
-
Перевірте стан
nfs-server.service. Впишіть:systemctl status nfs-server
Вихід
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: inactive (dead)
nfs-server.service наразі не працює відповідно до результатів нашої демонстраційної системи.
-
Використовуйте systemctl для запуску демона nfs-server. Впишіть:
systemctl start nfs-server -
Ще раз перевірте статус служби nfs-сервера.
-
Виконайте команду
rpcinfoще раз, щоб перевірити, чи щось змінилося.
!!! Question "Питання"
```
Які нові служби ви побачите у списку `rpcinfo` після запуску nfs-сервера?
```
-
Перевірте, чи налаштовано автоматичний запуск
nfs-server.serviceщоразу після перезавантаження системи. Впишіть:systemctl is-enabled nfs-server -
Якщо nfs-сервер вимкнено у вашій системі, виконайте команду, щоб налаштувати його для автоматичного запуску з системою.
-
Якщо підсистема брандмауера працює на вашому сервері, вам потрібно буде дозволити/дозволити трафік NFS через брандмауер для віддалених клієнтів NFS. Це можна зробити, запустивши:
firewall-cmd --permanent --add-service nfs && firewall-cmd --reload
Завдання 2¶
Експорт загального доступу¶
Створення загального доступу виконується шляхом створення каталогу або надання спільного доступу до вже існуючого каталогу в локальній файловій системі.
Утиліта exportfs використовується для перегляду та підтримки таблиці експортованих файлових систем NFS. Його синтаксис використання та параметри:
SYNOPSIS
/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]
/usr/sbin/exportfs -r [-v]
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f
/usr/sbin/exportfs -s
Note
Не забудьте замінити всі посилання на server
Щоб створити та експортувати спільний доступ¶
Ви створите та надасте спільний доступ до каталогу під назвою /mnt/nfs. Цей каталог буде вихідною файловою системою, експортованою з сервера NFS.
-
Переконайтеся, що ви ввійшли до системи як користувач із правами адміністратора.
-
Створіть каталог у
/mntпід назвоюnfsі перейдіть до цього каталогу.mkdir /mnt/nfs && cd /mnt/nfs -
Створіть 5 зразків файлів у створеному вами новому каталозі. Впишіть:
touch {1..5}nfs -
Використайте функцію оболонки HEREDOC для створення нового запису експорту NFS у
/etc/exports. Потрібний вам однорядковий запис —/mnt/nfs foocentos2(rw) localhost(rw). Впишіть:cat << EOF > /etc/exports /mnt/nfs 172.16.99.0/24(rw) localhost(rw) EOF
Ви також можете скористатися будь-яким зручним для вас текстовим редактором для створення запису.
-
Перевірте вміст
/etc/exports, щоб переконатися, що немає помилок. -
Після внесення будь-яких змін до файлу
/etc/exportsслід виконати командуexportfs. Впишіть:exportfs -r -
Використовуйте прапорець
-sз командоюexportfs, щоб відобразити поточний список експорту, придатний для/etc/exports. Наприклад, перегляньте список каталогів, дозволених хостів і параметрів. Впишіть:exportfs -s
!!! question
Що було на виході? Складіть список вмісту виводу.
Завдання 3¶
Монтування спільних ресурсів NFS¶
Ця вправа стосується клієнтської сторони NFS. Ви спробуєте отримати доступ до сервера NFS як клієнт.
showmount — це зручна утиліта для запиту та відображення інформації про монтування на NFS-серверах. Він також може показувати стан сервера NFS і список клієнтів, які монтуються з сервера. Його синтаксис і параметри показані тут:
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
OPTIONS
-a or --all
List both the client hostname or IP address and mounted directory in host:dir format.
-d or --directories
List only the directories mounted by some client.
-e or --exports
Show the NFS server's export list.
-h or --help
Provide a short help summary.
-v or --version
Report the current version number of the program.
--no-headers
Suppress the descriptive headings from the output.
Для локального доступу до спільного ресурсу NFS¶
Ви перевірите конфігурацію сервера NFS із Вправи 1, спробувавши отримати доступ до експортованого каталогу з вашого локального комп’ютера, перш ніж тестувати його з віддаленого комп’ютера.
-
Увійшовши в систему як суперкористувач, створіть каталог під назвою
/mnt/nfs-local. Цей каталог слугуватиме тестовою точкою монтування для спільного ресурсу NFS. -
Для швидкої передпочаткової перевірки запустіть
showmountяк клієнт, щоб показати список доступного експорту на сервері. Впишіть:showmount -e localhost
Вихід
```bash
Export list for localhost:
/mnt/nfs 172.16.99.0/24,localhost
```
Ви повинні побачити будь-який експорт NFS, налаштований на сервері.
-
Тепер ви готові змонтувати спільний ресурс NFS у тестовій точці монтування. Впишіть:
mount -t nfs localhost:/mnt/nfs /mnt/nfs-local -
Змініть свій PWD на каталог
/mnt/nfs-localі перегляньте його вміст. -
Поки ви все ще перебуваєте в каталозі
/mnt/nfs-local, спробуйте видалити деякі файли. Впишіть:rm -rf 1nfs 2nfs
Вихід
```bash
rm: cannot remove '1nfs': Permission denied
rm: cannot remove '2nfs': Permission denied
```
!!! Question "Питання"
```
Чи була ваша спроба видалення файлу успішною?
```
-
Тепер спробуйте створити додаткові файли (6nfs, 7nfs, 8nfs) на спільному ресурсі NFS. Впишіть:
touch {6..8}nfs
!!! Question "Питання"
```
Чи була ваша спроба створення файлу успішною? Чому, на вашу думку, це не вдалося?
```
ВИКОНАЙТЕ ЦЮ ВПРАВУ ЗІ СВОЄЇ ПАРТНЕРСЬКОЇ СИСТЕМИ
Для віддаленого доступу до спільного ресурсу NFS¶
-
Увійшовши в serverPR як суперкористувач, установіть пакет
nfs-utils, якщо його не встановлено. -
Створіть каталог під назвою “
/mnt/nfs-remote”, який слугуватиме точкою монтування для віддаленого спільного ресурсу NFS. Впишіть:mkdir /mnt/nfs-remote -
Припускаючи, що IP-адреса віддаленого сервера XY дорівнює 172.16.99.100, змонтуйте спільний ресурс NFS на сервері XY, виконавши:
mount -t nfs 172.16.99.100:/mnt/nfs /mnt/nfs-remote -
Використайте команду
mount, щоб відобразити додаткову інформацію про спільний NFS-ресурс, який ви щойно змонтували. Впишіть:mount -t nfs4
Вихід
```bash
172.16.99.100:/mnt/nfs on /mnt/nfs-remote type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255
...<SNIP>...
```
-
cdдо точки монтування NFS та спробуйте видалити її вміст. Впишіть:cd /mnt/nfs-remote ; rm -f
!!! question
Ваша спроба була успішною?
-
Вийдіть із serverPR як суперкористувач і знову увійдіть як непривілейований користувач «ying»
-
Під час входу в serverPR як «ying» cd до каталогу, змонтованого на кроці 2. Впишіть:
cd /mnt/nfs-remote/ -
Занотуйте вміст довідника. Якщо ви бачите очікувані файли, ви завершили лабораторію NFS!
!!! question "Лабораторні завдання:"
``` 1. Налаштуйте налаштування NFS на локальному сервері (serverXY), щоб суперкористувач у H.Q. (hq.example.org) зможе підключити ваш спільний ресурс nfs (/mnt/nfsXY) для використання на машині hq. 2. Суперкористувач у HQ повинен мати можливість записувати (створювати) нові файли та видаляти файли на вашому спільному ресурсі NFS. ```
!!! Tip "Порада"
```
Вам потрібно вимкнути спеціальну обробку NFS файлів, які належать root. Це робиться шляхом вказівки певного параметра, який «скасує» суперкористувача у файлі «/etc/exports». Спеціальна опція називається `no_root_squash`. Зверніть увагу, що використання параметра `no_root_squash` вважається поганою практикою та ризиком для безпеки. Зразок запису для виконання цього для будь-якого хосту, який відповідає `localhost` в `/etc/exports`, виглядатиме так:
```bash
/mnt/nfs 172.16.99.0/24(rw) localhost(rw,no_root_squash)
```
```
Author: Wale Soyinka
Contributors: Steven Spencer, Ganna Zhyrnova