Данная статья применима к:
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
Astra Linux Common Edition 2.12
NFS (сокращение от Network File System, Сетевая Файловая Системa):
сервис, обеспечивающий общий доступ к файлам и каталогам систем *nix / Linux.
NFS позволяет монтировать удалённые разделяемые файлы подобно локальным.
Существует в двух вариантах:
- вариант nfs-kernel-server, работающий на уровне ядра (входит в состав Astra Linux)
- и вариант работающий на уровне пользовательских программ (в состав Astra Linux не входит)
В Astra Linux Special Edition для того, чтобы включить NFS v2, нужно добавить оцию "-V 2" в две переменные в файле /etc/default/nfs-kernel-server (второй переменной по умолчанию нет, её надо создавать):
RPCNFSDOPTS="-V 2"
Исходные данные
- Сервер NFS - 192.168.1.10;
- Клиент NFS - 192.168.1.20.
Установка
Пакеты nfs (сервер) и nfs-common (клиент) входят в стандартный дистрибутив Astra Linux Special Edition, и доступны в сетевом репозитории Astra Linux Common Edition. Поддержка nfs интегрирована в ядро всех ОС.
По умолчанию пакет nfs не устанавливается. Установить сервер nfs и клиент nfs-common можно из графического менеджера пакетов, или из командной строки.
Сервер:
sudo apt install nfs-kernel-server
sudo apt install nfs-common
sudo apt install autofs
Настройка сервера
Подготовка
Для развёртывания сервера NFS, как и любого другого сервера, желательно назначить ему постоянный IP-адрес. Далее в примерах считаем, что это адрес 192.168.1.10.
Должно быть настроено разрешение имён клиентских компьютеров, или им должны быть назначены статические IP-адреса.
И нужно выделить ресурс, который в дальнейшем станет разделяемым. Для примера создадим каталог /nfsshare и выставим для него полный доступ на чтение и запись:
Исправляем ошибки в пакете
Для нормального запуска и возобновления работы сервиса после перезагрузки компьютера после установки пакета нужно внести изменения в его UNIT-файл /etc/systemd/system/multi-user.target.wants/nfs-server.service
добавив следующие строки в секцию unit:
Requires=rpcbind.service
After=rpcbind.service
После чего перезапустить сервис:
sudo systemctl restart nfs-kernel-server
Конфигурация
Основная конфигурация сервиса nfs хранится в файле /etc/exports
. Кроме этого файла сервис использует файлы:
/etc/fstab
- записи обо всех файловых системах, включая nfs, автоматически монтируемых при загрузке системы./etc/hosts.allow
,/etc/hosts.deny
- используется, чтобы решить, принять или отклонить подключения, приходящие с внешних IP-адресов
Экспорт разделяемого ресурса
Для экспорта созданного ранее разделяемого ресурса (каталога) /nfsshare просто добавим в конфигурационный файл /etc/exports
строку
/srv/nfsshare 192.168.1.20/255.255.255.0(rw,nohide,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
Где:
- 192.168.1.20 - статический адрес компьтера-клиента (может быть использовано имя)
- (rw,no_root_squash,sync) –набор опций, опции могут быть:
- rw –чтение запись (может принимать значение ro – только чтение);
- no_root_squash – по умолчанию в общих ресурсах NFS пользователь root становится обычным пользователем nfsnobody.
Таким образом, владельцем всех файлов, созданных root, становится nfsnobody, что предотвращает загрузку на сервер программ с установленным битом setuid.
Если указан параметр no_root_squash, удалённые пользователи root могут изменить любой файл в разделяемой файловой системе, и оставить для других пользователей троянские приложения.
В целях безопасности этот параметр лучше не использовать - nohide - NFS автоматически не показывает нелокальные ресурсы (например, примонтированые с помощью mount –bind), эта опция включает отображение таких ресурсов;
- sync – синхронный режим доступа (может принимать обратное значение- async).
sync указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами.
async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря данных; - noaccess – запрещает доступ к указанной директории.
Применяется, если доступ к определенной директории выдан всем пользователям сети , и необходимо ограничить доступ для некоторых пользователей; - all_squash– подразумевает, что все подключения будут выполнятся от анонимного пользователя;
- subtree_check (no_subtree_check)- в некоторых случаях приходится экспортировать не весь раздел, а лишь его часть.
При этом сервер NFS должен выполнять дополнительную проверку обращений клиентов, чтобы убедиться в том, что они предпринимают попытку доступа лишь к файлам, находящимся в соответствующих подкаталогах.
Такой контроль поддерева (subtree checks) несколько замедляет взаимодействие с клиентами, но если отказаться от него, могут возникнуть проблемы с безопасностью системы.
Отменить контроль поддерева можно с помощью опции no_subtree_check. Опция subtree_check, включающая такой контроль, предполагается по умолчанию.
Контроль поддерева можно не выполнять в том случае, если экспортируемый каталог совпадает с разделом диска; - anonuid=1000– привязывает анонимного пользователя к «местному» пользователю;
- anongid=1000– привязывает анонимного пользователя к группе «местного» пользователя.
- rw –чтение запись (может принимать значение ro – только чтение);
Строк с записями о разделяемых ресурсах может быть добавлено несколько. После внесения изменений для того, чтобы они вступили в силу, нужно выполнить команду
Безопасный экспорт разделяемых ресурсов
Современная версия протокола NFSv4 способна защищать всю передаваемую по сети информацию, применяя защитное преобразование данных с помощью Kerberos. Поэтому важно, чтобы эта служба была правильно настроена, если она находится за брандмауэром или в сегментированной сети.
Версии NFSv2 и NFSv3 по-прежнему передают незащищённые данные.Сервер NFS определяет, какие файловые системы экспортировать и какие узлы получат к ним доступ с помощью файла /etc/exports.
Будьте внимательны и не добавляйте лишних пробелов, редактируя этот файл.
Например, следующая строка в файле /etc/exports предоставляет каталог /tmp/nfs/ для чтения/записи с компьютера master.astralinux.ru:/tmp/nfs/ master.astralinux.ru(rw)
А следующая строка файла/etc/exports, напротив, определяет для того же каталога компьютеру master.astralinux.ru разрешение только на чтение, а всем остальным разрешает не только чтение, но и запись
Отличие состоит всего в одном пробеле после имени компьютера:/tmp/nfs/ master.astralinux.ru (rw)
Чтобы избежать подобных ошибок,
проверяйте все настроенные общие ресурсы NFS с помощью команды showmount:
- Не используйте параметр no_root_squash. По умолчанию, в общих ресурсах NFS пользователь root становится обычным пользователем nfsnobody.
Таким образом, владельцем всех файлов, созданных root, становится nfsnobody, что предотвращает загрузку на сервер программ с установленным битом setuid.
Если указан параметр no_root_squash, удалённые пользователи root могут изменить любой файл в разделяемой файловой системе и оставить для других пользователей троянские приложения.
Настройка клиента
После установки клиентского пакета nfs-common, на компьютере - клиенте следует примонтировать разделяемые ресурсы. Список доступных ресурсов можно проверить, выполнив команду:
sudo showmount -e 192.168.1.10
Export list for 192.168.1.10:
/srv/nfsshare 192.168.1.20
Монтируем ресурс
Чтобы примонтировать разделяемый ресурс, создадим на клиентской машине каталог /share:
Кроме того, можно использовать команду проверки свободного места на всех примонтированных ресурсах:
Автоматически монтируем ресурс
Чтобы ресурс NFS монтировался автоматически после каждой перезагрузки, его нужно зарегистрировать в файле /etc/fstab добавив строчку вида
Автоматически монтируем ресурс по запросу
Автоматическое монтирование ресурсов NFS можно выполнить с помощью пакета autofs