Версія 1 (бета)

Встановлення та налаштування NFS серверу і клієнтів.

За мотивами:


Вступ

Network File System (NFS) - мережева файлова система. Дозволяє експортувати файлові системи через мережу. Часто використовується для обслуговування бездискових робочих станцій, організації спільного використання файлів та програм.

NFS була розроблена, щоб дозволити монтувати розділи дисків віддалених комп'ютерів, так ніби вони знаходяться на локальному жорсткому диску. Це забезпечує швидке, прозоре спільне використання файлів через мережу. Ви зможете зберігати документи і програми в одному місці та зробити його доступним тільки для визначених користувачів.

При неправильному налаштуванні NFS також створює потенційну небезпеку несанкціонованого доступу до диску через мережу, і, як наслідок, розголошення і псування інформації. Тому при використанні мережевих файлових систем потрібно приділяти багато уваги безпеці та контролю доступу.

Існують також інші мережеві файлові системи:

Більшість властивостей файлових систем 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

Цей пакет встановить portmapper та серверні і клієнтські утиліти nfs та автоматично вирішить всі залежності.

Встановлення сервера NFS

Щоб встановити сервер NFS потрібно: включити підтримку NFS сервера в ядро, налаштувати файл /etc/exports та файли безпеки: /etc/hosts.allow і /etc/hosts.deny. Для забезпечення надійної роботи сервісу NFS в мережі його потрібно встановлювати на drbd.

Компіляція ядра Лінукс з підтримкою сервера 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
          ............
          [ ]   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 : дозволяє доступ до сервера з uid root — типово клієнтський користувач root прив'язується до anonymous. Важливо для бездискових станцій, що пишуть на диск, щоб їх не "squash"ило;

no_all_squash : Важливо для бездискових станцій, щоб їх не "squash"ило;

all_squash : прив'язує всіх віддалених користувачів до anonymous. Тобто вони матимуть доступ тільки до файлів з публічними правами, а файли що вони створюватимуть, будуть доступні всім користувачам anonymous. Тобто всі користувачі є nobody, оскільки 2 не присвоюється для UID, а GID використовується 65534. Щоб змінити UID/GID потрібно явно вказати anonuid=1111 та 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 - адреса IP сервера NFS. Перше поле визначає директорію, що експортується (на сервері), друге — точку монтування на бездисковій станції, третє — файлову систему (для NFS — відповідно, nfs). В четвертому полі визначаються додаткові параметри, які використовуються при монтуванні розділу, список параметрів наведено у mount(8). Для простоти у прикладі використано жорсткі точки монтування, але за допомогою різних параметрів у /etc/fstab можна зробити кластер більш ефективним.

Можливі проблеми та шляхи їх розв'язання

Після зміни файлу /etc/exports варто виконати команду:

# exportfs -a -v

Вона перевірить його на помилки та зробить доступними усі публічні ресурси (-a), а якщо щось не так — докладно про це повідомить (-v).

Для перевірки запущених сервісів portmapper виконуємо:

# rpcinfo -p

Щоб переконатись, що portmapper та обгортання TCP працює вірно, запускаємо:

# strings /sbin/portmap | grep hosts

Уважно читаємо та аналізуємо логи.

Література

  • RFC 3530 - NFS версії 4
  • RFC 1813 - NFS версії 3
  • RFC 1094 - NFS версії 2

--Svyat 23:37, 27 серп 2005 (EEST)