Product SiteDocumentation Site

11.4. NFS File Server

NFS (Network File System) — это протокол, позволяющий удалённый доступ к файловой системе через сеть. Все системы Unix могут работать с этим протоколом.
NFS — очень полезный инструмент, но исторически он страдал от множества ограничений, большинство из которых были устранены в версии 4 протокола. Обратной стороной является то, что последнюю версию NFS сложнее настроить, если вы хотите использовать базовые функции безопасности, такие как аутентификация и шифрование, поскольку для этих частей она использует Kerberos. А без них протокол NFS должен быть ограничен доверенной локальной сетью, поскольку данные передаются по сети в незашифрованном виде (т.е. sniffer может его перехватить), а права доступа предоставляются на основе IP-адреса клиента (который можно подделать).

11.4.1. Усиление безопасности NFS

Если вы не используете функции безопасности на основе Kerberos, крайне важно обеспечить, чтобы только машины, которым разрешено использовать NFS, могли подключаться к различным необходимым серверам RPC, поскольку базовый протокол доверяет данным, полученным из сети. Брандмауэр также должен блокировать IP spoofing, чтобы не допустить, чтобы внешний компьютер действовал как внутренний, а доступ к соответствующим портам должен быть ограничен машинами, предназначенными для доступа к общим ресурсам NFS.
Старые версии протокола требовали других сервисов RPC, которые использовали динамически назначаемые порты. К счастью, в NFS -версии 4 необходимы только порт 2049 (для NFS) и 111 (для portmapper), и, и поэтому их легко защитить брандмауэром.

11.4.2. NFS Server

Сервер NFS является частью ядра Linux; в ядрах, предоставляемых Debian, он построен как модуль ядра. Если сервер NFS должен запускаться автоматически при загрузке, nfs-kernel-server пакет должен быть установлен; он содержит соответствующие сценарии запуска.
Файл(ы) конфигурации сервера NFS, /etc/exports и /etc/exports.d/, содержит каталоги, доступные по сети (exported). Для каждого общего ресурса NFS доступ предоставляется только указанному списку компьютеров. Более детальный контроль доступа можно получить с помощью нескольких опций. Синтаксис этого файла довольно прост:
/directory/to/share machine1(option1,option2,...) machine2(...) ...
Обратите внимание, что в NFSv4 все экспортированные каталоги должны быть частью одной иерархии, а корневой каталог этой иерархии должен быть экспортирован и идентифицирован с помощью параметра fsid=0 или fsid=root.
Каждую машину можно идентифицировать либо по DNS-имени, либо по IP-адресу. Целые наборы машин также могут быть указаны с использованием синтаксиса, такого как *.falcot.com или диапазон IP-адресов, например 192.168.0.0/255.255.255.0 или 192.168.0.0/24.
По умолчанию каталоги доступны только для чтения (или с помощью опции ro ). Опция rw разрешает доступ для чтения и записи. Клиенты NFS обычно подключаются через порт, ограниченный root (ниже 1024); это ограничение может быть снято опцией insecure (опция secure подразумевается, но при необходимости для ясности её можно сделать явной).
По умолчанию сервер отвечает на запрос NFS только после завершения текущей операции с диском (опция sync); это можно отключить с помощью опции async. Асинхронная запись немного увеличивает производительность, но снижает надёжность, поскольку существует риск потери данных в случае сбоя сервера между подтверждением записи и фактической записью на диск. Поскольку значение по умолчанию недавно изменилось (по сравнению с историческим значением NFS), то значение рекомендуется указать явно.
Чтобы не предоставлять root-доступ к файловой системе любому клиенту NFS, все запросы, поступающие от пользователя root, рассматриваются сервером как исходящие от пользователя nobody. Это поведение соответствует параметру root_squash и включено по умолчанию. Параметр no_root_squash, отключающий такое поведение, является рискованным и его следует использовать только в контролируемых средах. Если все пользователи должны быть сопоставлены с пользователем nobody, используйте all_squash. Параметры anonuid=uid и anongid=gid позволяют указать другого поддельного пользователя вместо UID/GID 65534 (что соответствует пользователю nobody и группе nogroup).
В NFSv4 вы можете добавить параметр sec, чтобы указать желаемый уровень безопасности: sec=sys используется по умолчанию без каких-либо специальных функций безопасности, sec=krb5 включает только аутентификацию, sec=krb5i добавляет целостность. защита, а sec=krb5p — это наиболее полный уровень, включающий защиту конфиденциальности (с шифрованием данных). Чтобы это работало, вам нужна работающая настройка Kerberos (эта служба не рассматривается в этой книге).
Доступны другие варианты; они задокументированы в странице руководства exports(5).

11.4.3. NFS клиент

Как и в случае с другими файловыми системами, интеграция общего ресурса NFS в системную иерархию требует монтирования (и пакета nfs-common). Поскольку эта файловая система имеет свои особенности, потребовалось внести некоторые изменения в синтаксис команды mount и файла /etc/fstab.

Пример 11.19. Manually mounting with the mount command

# mount -t nfs4 -o rw,nosuid arrakis.internal.falcot.com:/shared /srv/shared

Пример 11.20. NFS entry in the /etc/fstab file

arrakis.internal.falcot.com:/shared /srv/shared nfs4 rw,nosuid 0 0
Запись, описанная выше, монтирует при запуске системы каталог NFS /shared/ из сервера arrakis в локальный каталог /srv/shared/. Запрашивается доступ для чтения и записи (следовательно параметр rw). Опция nosuid — это мера защиты, которая стирает любой бит setuid или setgid из программ, хранящихся на общем ресурсе. Если общий ресурс NFS предназначен только для хранения документов, другой рекомендуемый вариант — noexec, что предотвращает выполнение программ, хранящихся на общем ресурсе. Обратите внимание, что на сервере каталог shared находится ниже корневого экспорта NFSv4 (например, /export/shared), это не каталог верхнего уровня.
nfs(5) на странице руководства все параметры описаны довольно подробно.