2 Системи НФС
Network File System (NFS) - мережева файлова система. Дозволяє експортувати файлові системи через мережу. Часто використовується для обслуговування бездискових робочих станцій, організації спільного використання файлів та програм.
NFS була розроблена, щоб дозволити монтувати розділи дисків віддалених комп'ютерів, так ніби вони знаходяться на локальному жорсткому диску. Це забезпечує швидке, прозоре спільне використання файлів через мережу. Ви зможете зберігати документи і програми в одному місці та зробити його доступним тільки для визначених користувачів.
При не коректному встановленню NFS також створює потенційну небезпеку несанкціонованого доступу до диску через мережу і як наслідок розголошення і псування інформації. Тому значний наголос, при використанні мережевих файлових систем, потрібно робити на безпеку та контроль доступу.
Існують також інші мережеві файлові системи:
Samba файлова система для оффтопікових (ТМ) клієнтів.
Andrew файлова система для IBM, надає спільне використання файлів з додатковою безпекою та покращенню продуктивністю.
Coda файлова система розроблена для роботи з від'єднаними клієнтами.
Більшість властивостей файлових систем Andrew і Coda реалізовані в NFS4.
Основною перевагою NFS є готовність, стандартність, зрозумілість та широка підтримка на багатьох платформах. Віддалений виклик процедур RPC
Remote Procedure Calls (RPC) - віддалений виклик процедур. Багато клієнт-серверних програм не прослуховують мережу на своєму порті, а замість того користуються технологією RPC. Коли сервіс ініціалізується він прослуховує будь-який порт і тоді регіструє цей порт з допомогою утиліти Portmapper. NFS відноситься саме до RPC сервісів тому вимагає утиліти Portmapper перед її запуском. Встановлення NFS утиліт
Для роботи NFS додатково потрібні http://nfs.sourceforge.net/ (http://www.nfsv4.org) утиліти, які для Gentoo можна встановити командою:
- emerge net-fs/nfs-utils
Цей пакет встановить утиліти для portmapping, nfs серверні і клієнтські та автоматично вирішить всі залежності. Встановлення NFS сервера
Щоб встановити NFS сервер потрібно: включити підтримку NFS сервера в ядро, налаштувати файл /etc/exports та файли безпеки: /etc/hosts.allow і /etc/hosts.deny. Для забезпечення надійної роботи сервісу NFS в мережі його потрібно встановлювати на drbd - кластер дисків. Компіляція ядра Лінукс з підтримкою NFS для сервера
NFS сервер та станція потребують включення відповідної підтримки NFS в ядро Лінукса. Якщо у Ваше ядро така підтримка не входить, потрібно його перезібрати. По зсиці наведена детальна документація про компіляцію ядра GNU/Linux. Додатково потрібно додати: Networking --->
[*] Networking support Networking options ---> <*> Packet socket [*] Packet socket: mmapped IO <*> Unix domain sockets <*> IPsec user configuration interface <*> PF_KEY sockets [*] TCP/IP networking ..........
File systems ---> .........
Network File Systems ---> <*> NFS file system support ............ [ ] Allow direct I/O on NFS files (EXPERIMENTAL) <*> NFS server support [*] Provide NFSv3 server support [*] Provide server support for the NFSv3 ACL protocol extension [*] Provide NFSv4 server support (EXPERIMENTAL) --- Provide NFS server over TCP support --- Secure RPC: Kerberos V mechanism (EXPERIMENTAL) ..........
Налаштування NFS сервера
Зараз потрібно відредагувати конфіґураційний файл /etc/exports
Файл /etc/exports вказує як, що і до кого експортувати через NFS. Типовий /etc/exports для серверу, що обслуговує бездискові станції, виглядає так: $ cat /etc/exports
- one line like this for each slave
/diskless/10.0.0.101 10.0.0.101(sync,rw,no_root_squash,no_all_squash)
- common to all slaves
/opt 10.0.0.0/24(sync,ro,no_root_squash,no_all_squash) /usr 10.0.0.0/24(sync,ro,no_root_squash,no_all_squash) /home 10.0.0.0/24(sync,rw,no_root_squash,no_all_squash)
- if you want to have a shared log
/var/log 10.0.0.0/24(sync,rw,no_root_squash,no_all_squash)
Перше поле визначає директорію яка експортується друге кому і як. Останнє поле розділене на дві частини перша саме кому дозволено монтувати дану директорію і друга що він може з цією файловою системою робити: ro
дозволяється тільки читати,
rw
дозволяється читати і писати,
noaccess
всі файли і директорії нище вказаної будуть не доступні,
link_relative
якщо зустрічається абсолютне символічне посилання його змінювати на відносне (../../),
link_absolute
не змінювати символічні посилання.
no_root_squash
дозволяє root доступ до сервера, по замовчуванню клієнтський користувач root прив'язується до anonymous. Важлива для бездискових станцій що пишуть на диск, так що вони не будуть "squashed" коли робитимуть I/O запит,
no_all_squash
важлива для бездискових станцій що пишуть на диск, так що вони не будуть "squashed" коли робитимуть I/O запит,
all_squash
прив'язує всіх віддалених користувачів до anonymous. Тобто маютимуть допуск тільки до файлів з публічним допуском, а файли що створюватимуть будуть доступні всім з anonymous користувач/група. Тобто всі користувачі є nobody, так, як 2 не присвоюється для UID i GID використовується 65534. Щоб змінити потрібно явно вказати anonuid=1111 i anongid=1111.
map_static
по замовчуванню, допуски в NFS, для ідентичних користувачів, що мають однакові UID на сервері та клієнтській машині будуть прив'язані автоматично. Тобто користувачі будуть мати такі ж допуски до файлів на віддаленому сервері, якби вони знаходились локально.
Погана ідея експортувати /var/log вірне рішення описане тут: Syslog-ng - записувач подій в UNIX! Безпека NFS
Є декілька рівнів безпеки NFS. Рівень безпеки при монтуванні дозволяє вказати котрим комп'ютерам дозволено монтувати систему і з якими правами (читання/запис). Користувацький рівень безпеки дозволяє зв'язати користувача локальної системи з користувачем на NFS сервері, тоді користувач буде мати стандартні права і допуски в UNIX. Також можна використовувати політики SELinux(8).
Варто скористатись і TCP обоями. Старт NFS сервера
І нарешті останній файл, який прийдеться відредагувати для сервера: /etc/conf.d/nfs котрий визначає декілька ініціалізаційних опцій, ось його вигляд у Gentoo: $ cat /etc/conf.d/nfs
- Config file for /etc/init.d/nfs
- Number of servers to be started up by default
RPCNFSDCOUNT=16
- Options to pass to rpc.mountd
RPCMOUNTDOPTS=""
RPCNFSDCOUNT - рівне кількості клієнтських машин, можливо потрібно змінити.
Далі, як звично:
- /etc/init.d/nfs start
І щоб цей скрипт стартував при включенні системи виконуємо:
- rc-update add nfs default
Для інших потрібно пам'ятати, що nfs запускається після portmap чи rpc.portmap. Тобто порядок запуску в ручну такий: rpc.portmap rpc.mountd rpc.nfsd rpc.statd rpc.lockd (якщо потрібно) rpc.rquotad Встановлення клієнтів NFS
Можна перевірити чи встановлене ядро підтримує NFS, для цього виконуємо: $ cat /proc/filesystems
якщо є стрічка: nodev nfs
значить ядро зібране з підтримкою NFS і наступний пункт можна пропустити. Компіляція ядра Лінукс з підтримкою NFS для клієнтів
Детальна документація про компіляцію ядра Лінукса. Додатково потрібно додати: Networking --->
[*] Networking support Networking options ---> <*> Packet socket [*] Packet socket: mmapped IO <*> Unix domain sockets <*> IPsec user configuration interface <*> PF_KEY sockets [*] TCP/IP networking ..........
File systems ---> .........
Network File Systems ---> <*> NFS file system support [*] Provide NFSv3 client support [*] Provide client support for the NFSv3 ACL protocol extension [*] Provide NFSv4 client support (EXPERIMENTAL) [ ] Allow direct I/O on NFS files (EXPERIMENTAL) ............ [*] Root file system on NFS Для бездискових станцій --- Secure RPC: Kerberos V mechanism (EXPERIMENTAL) ..........
Налаштування клієнтських /etc/fstab
Файл /etc/fstab на клієнтських комп'ютерах вказує що експортує сервер і що клієнти можуть змонтувати в себе. Клієнтський fstab файл, для бездискових станцій знаходиться в /diskless/10.0.0.101/etc/fstab та повинен виглядати приблизно так:
- these entries are essential
10.0.0.10:/diskless/10.0.0.101 / nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0 10.0.0.10:/opt /opt nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0 10.0.0.10:/usr /usr nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0 10.0.0.10:/home /home nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0 none /proc proc defaults 0 0 10.0.0.10:/var/log /var/log nfs hard,intr,rw 0 0
- для підтримки SELinux
none /selinux selinuxfs defaults 0 0
- Тільки для кластерів openMosix
none /mnt/mfs mfs dfsa=1 0 0
В цьому прикладі 10.0.0.10 - ІР адрес NFS сервера. Перше поле визначає директорію на сервері що експортується, друге точку монтування на бездисковій станції, третє файлову систему і для NFS розділів повинна бути nfs. В четвертому полі визначаються різні опції які використовуються при монтуванні розділу, щоб побачити всі можливі опції, дивіться mount(8). Для спрощення приведено жорсткі точки монтування, але використовуючи різноманітні опції з /etc/fstab можна зробити кластер більш ефективним. Особливо не рекомендується вести системні журнали через nfs краще скористатись: Syslog-ng - записувач подій в UNIX Можливі проблеми та шляхи їх розв'язання
Гарна ідея після зміни файлу /etc/exports виконувати команду:
- exportfs -a -v
це дасть змогу перевірити файл /etc/exports, зробити всі (-а) спільні ресурси моментально доступними, якщо щось не так, то (-v) дозволить отримати більше інформації.
Для перевірки запущених сервісів portmapper виконуємо:
- rpcinfo -p
Щоб переконатись вірну роботу portmapper з TCP обоями запускаємо:
- strings /sbin/portmap | grep hosts
Уважно читаємо та аналізуємо логи :-)