Аутентичность пользователей NFS
Работа с общим диском, разделяемым между многими пользователями сети, предполагает, что в пределах сети существует общее пространство имен пользователей, т.е. пользователь user на любом клиентском (в терминах NFS) компьютере имеет то же реальное имя и (что важнее) тот же идентификатор, что и пользователь user на NFS-сервере. Это достигается использованием централизованной аутентификации. Кроме того, важно ограничить права пользователя root при доступе через NFS, т.к. пользователь root на любом компьютере в любой ОС МСВС имеет идентификатор 0, но от имени пользователя root на разных компьютерах могут работать разные люди.
Для ограничения доступа пользователя root на сервере NFS, любые файловые запросы от имени пользователей root клиентских компьютеров выполняются от имени nobody. Можно указать, пользователям root каких компьютеров мы предоставляем привилегированный доступ от имени root и через NFS.
По умолчанию файловая система экспортируется с правами чтения и записи для тех, кто её смонтирует. Однако права доступа к конкретным каталогам могут запрещать запись в них, фактически права доступа к удаленной файловой системе определяются комбинацией прав, данными при монтировании системы и прав доступа к каталогам; силу имеют более строгие права (например, нельзя записать файл в каталог, если нет права записи в каталог или если право есть, но файловая система экспортируется в режиме read-only - только для чтения).
Рассмотрим для примера файл /etc/exports ОС МСВС:
/home/kurs1 192.168.65.3(ro) helenbr(rw,no_root_squash)
/home/kurs2 192.168.65.1/32 (sync)
#/home/test3
Файловая система /home/kurs1 экспортируется только с возможностью чтения (опция ro) для компьютера 192.168.65.3, с возможностью чтения-записи (опция rw) для компьютера с именем helenbr. Для компьютера helenbr установлено ограничение прав пользователя root (no_root_squash), т.е., если файловую систему будет монтировать пользователь с идентификатором 0 (идентификатор пользователя root), он будет авторизован на NFS-сервере от имени пользователя nobody (непривилегированного пользователя).
Файловая система /home/kurs2 экспортируется с возможностью чтения-записи (режим по умолчанию) только для компьютера 192.168.65.1. Для доступа используется синхронный[13] режим работы nfs.
Строка #/home/test3 закомментирована и NFS-сервером не обрабатывается.
Для того, что бы изменения в файле /etc/exports вступили в силу, необходимо перезапустить NFS-сервер:
Service nfs restart
Блокировка файлов на NFS-сервере
Для того чтобы несколько процессов не конфликтовали при доступе к одному и тому же файлу, обычно используется механизм блокировки файла. Подробнее о блокировках сказано в документации по системным функциям lockf() и flock() (man lockf, man flock). В NFS механизм блокировки реализован посредством двух демонов: lockd и statd.
Оба демона запускаются на сервере NFS после mountd и nfsd. Для этого необходимо выполнить команду:
Service nfslock start
Демон lockd устанавливает и снимает блокировку файлов по запросу, а демон statd следит за состоянием блокировок и работоспособностью NFS-сервера.
В сети демон statd NFS-сервера обменивается информацией с демонами statd на других компьютерах. Демон lockd посылает запросы демону statd для установления статуса компьютеров, взаимодействующих с ним.
Если компьютер, за которым следит statd, перестает отвечать и перезапускается, удалённый statd сообщает об этом локальному, следящему за ним, и локальный демон информирует об этом программы, которые работали через это соединение. Если прекращает работу локальный сервис и затем следует его перезапуск, то statd информирует об этом другие компьютеры.