2 Системи НФС

Матеріал з Wiki TNEU
Перейти до: навігація, пошук

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

Особисті інструменти
Простори назв

Варіанти
Дії
Навігація
Інструменти