Сетевая файловая система NFS или Network File System - это популярный протокол сетевой файловой системы, который позволяет пользователям подключать удаленные сетевые каталоги на своей машине и передавать файлы между серверами. По сути, это альтернатива папки общего доступа Windows для Linux, в отличие от Samba реализована на уровне ядра и работает более стабильно. Для работы необходим сервер, на котором будет размещена общая папка и клиенты, которые могут монтировать сетевую папку как обычный диск в системе.
Прежде всего необходимо продумать структуру данных. NFS требует, чтобы все экспортируемые директории находились в пределах одной общей директории, называемой корневой.
Создаем корень NFS, скажем в /, и добавляем туда несколько экспортируемых папок:
sudo mkdir /nfs
sudo mkdir /nfs/adm
sudo mkdir /nfs/doc
В целях безопасности NFS умеет понижать права подключившихся пользователей до nobody:nogroup и это хорошая практика для общих ресурсов.
Сменим владельца директории:
sudo chown -R nobody:nogroup /nfs
Важный момент - в экспортируемых расположениях не должно быть символических ссылок.
Поэтому если нам надо экспортировать директорию, лежащую за пределами корня NFS, то нам потребуется ее смонтировать в папки NFS. В Uncom OS любую существующую папку файловой системы можно смонтировать в любую удобную вам точку монтирования.
Например, мы хотим поделиться по сети директорией /home/uncom/Музыка
, для этого создадим точку монтирования:
sudo mkdir /nfs/music
А затем добавим в /etc/fstab
запись:
/home/uncom/Музыка /nfs/music none bind 0 0
С особенностями монтирования дисков в Uncom OS вы можете ознакомиться в данной статье
Теперь каталог с музыкой будет автоматически монтироваться в расположение NFS при загрузке системы.
Чтобы выполнить монтирование без перезагрузки выполните:
sudo mount -a
После того, как вы создали необходимую структуру хранения данных, необходимо установить сам NFS-сервер. Установите пакет nfs-kernel-server
с помощью магазина приложений Uncom OS или воспользуйтесь следующей командой в терминале:
sudo apt install nfs-kernel-server
Все общие папки и другие настройки NFS находятся в файле /etc/exports
.
Синтаксис записи папки следующий:
адрес_папки клиент(опции)
адрес_папки
- путь к эскпортируемым данным;
клиент
- ip-адрес или адрес сети, из которой могут получить доступ к этой папке.
Расмотрим основные опции:
rw
- разрешить чтение и запись в этой папке;
ro
- разрешить только чтение;
crossmnt
- автоматически монтировать вместе с корневой файловой системой все вложенные;
fsid=0
- признак корневой файловой системы;
wdelay
- позволяет серверу откладывать запись, если он предполагает, что планируется еще одна операция записи, чтобы потом записывать данные большими блоками. Увеличивает производительность при большой глубине очереди;
sync
- отвечать на следующие запросы только тогда, когда данные будут сохранены на диск (по умолчанию);
async
- не блокировать подключения пока данные записываются на диск;
secure
- использовать для соединения только порты ниже 1024;
insecure
- использовать любые порты;
nohide
- не скрывать поддиректории при открытии доступа к нескольким директориям;
root_squash
- подменять запросы от root
на анонимные, используется по умолчанию;
no_root_squash
- не подменять запросы от root
на анонимные;
all_squash
- понижать права всех пользователей до nobody:nogroup
;
subtree_check
- проверять, не пытается ли пользователь выйти за пределы экспортированной папки;
no_subtree_check
- отключить проверку обращения к экспортированной папке, улучшает производительность, но снижает безопасность, можно использовать когда экспортируется раздел диска;
anonuid
и anongid
- указывает uid и gid для анонимного пользователя.
Полный список опций можно посмотреть во встроенном руководстве по сервису NFS с помощью команды:
man nfs
Опция
all_squash
используется для понижения прав всех пользователей доnobody:nogroup
.
NFS по умолчанию не использует аутентификацию, и доступ разграничивается по IP-адресам и стандартным UNIX-правам. При этом важно понимать, что права определяются не по имени пользователя, а по его UID/GID, т.е. идентификаторам. В целях безопасности NFS умеет понижать права до минимальных, но по умолчанию это применяется только к суперпользователю, а обычные пользователи будут подключаться со своими UID/GID, но так как мы назначили владельцем экспортируемых директорийnobody:nogroup
, то нам нужно также понизить в правах и обычных пользователей, либо пересмотреть всю систему прав доступа.
Мы не рекомендуем использовать опцию
no_root_squash
, которая отключает понижение правroot
при подключении к NFS, так как это являетя уязвимостью в безопасности системы. Опцияno_root_squash
позволяет пользователю с локальными правами администратора выгрузить на сервер исполняемый файл с установленным битом SUID, что будет означать смену прав на суперпользователя при его запуске из-под обычной учетной записи.
Опция insecure требуется для подключения файловой системы NFS у клиента, пользующегося графическим файловым менеджером Nautilus, интегрированным в Uncom OS. Без этой опции при попытке подключения к папке NFS клиент получит ошибку:
Например, для нашей папки, если вы хотите разрешить к ней подключаться только с определённого IP адреса, эта строка может выглядеть вот так:
/nfs 127.0.0.1(rw,sync,no_subtree_check)
Можно разрешить только нужную подсеть, например:
/nfs 192.168.1.0/24(rw,sync,no_subtree_check)
Для того, чтобы разрешить все адреса, используйте подсеть 0.0.0.0/0
или символ *
.
Подключим корневую директорию:
/nfs 192.168.1.0/24(rw,sync,crossmnt,fsid=0,no_subtree_check,wdelay,all_squash)
Затем подключим остальные экспортируемые директории:
/nfs/doc 192.168.1.0/24(rw,sync,no_subtree_check,wdelay,all_squash)
/nfs/adm 192.168.1.0/24(rw,sync,no_subtree_check,wdelay,all_squash)
Если вам необходимо подключить к одной папке разные адреса с разным набором опций, добавьте в строку нужное количество адресов и укажите для каждого из них нужные вам опции:
/nfs/adm 192.168.1.101(...) 192.168.1.102(...)
Осталось разобраться с последним экспортируемым ресурсом, который мы примонтировали из домашней папки пользователя. Понятно, что владельцем файлов в ней является сам пользователь и попытки обратиться туда с минимальными правами не увенчаются успехом. Поэтому немного изменим строку экспорта:
/nfs/music 192.168.1.0/24(rw,sync,no_subtree_check,wdelay,all_squash,anonuid=1000,anongid=1000)
Здесь у нас добавились две опции - anonuid
и anonguid
, описанные нами ранее.
Обе этих опции работают совместно с all_squash
, предполагается что 1000 - это UID/GID пользователя uncom, из домашней директории которого мы примонтировали этот ресурс.
После того как вы добавили в файл все экспортируемые ресурсы, выполните команду:
sudo exportfs -ra
Перезапустить или проверить статус службы вы можете командами:
sudo systemctl restart nfs-server
sudo systemctl status nfs-server
Если вам интересно ознакомиться с полным списком опций, применяемых к каждой из смонтированных папок, выполните команду:
cat /var/lib/nfs/etab
Как видим, набор опций в выводе гораздо шире указанных нами, так как тут также перечислены опции, применяемые по умолчанию.
На клиентском компьютере вам нужно установить пакет nfs-common
, чтобы иметь возможность работать с этой файловой системой. Его можно установить через магазин приложений либо с помощью команды:
sudo apt install nfs-common
Никакой дополнительной настройки пакет не требует.
Откройте файловый менеджер, во вкладке "Другие расположения" найдите внизу строку "Ввести адрес сервера". Вам необходимо указать протокол подключения, адрес сервера, адрес папки общего доступа на сервере, после чего нажать "Подключиться".
Как было указано при настройке NFS-сервера, дополнительная авторизация не требуется, авторизация происходит через сопоставление UID и GID учетных записей клиента и сервера.
Для отключения от папки общего доступа NFS нажмите "Отключить"
Выполним подключение из терминала в ручном режиме.
Прежде всего создадим точки монтирования, куда будет подключаться сетевая файловая система. Например:
mkdir /mnt/music
После чего смонтируем в нее одноименный экспортируемый ресурс:
mount -t nfs4 192.168.1.101:/music /mnt/music
В команде монтирования для указания нужного ресурса используется синтаксис server:/export
, пути к экспортируемым ресурсам указываются относительно корневой директории NFS-сервера. В нашем случае сервер представлен IP-адресом 192.168.1.101
, а экспортируем мы ресурс /nfs/music
.
Если все сделано правильно, то можете открыть указанную точку монтирования и убедиться, что в ней присутствует содержимое сетевой файловой системы.
Также проверить монтирование и получить полную информацию о примонтированных NFS-ресурсах можно командой:
mount -t nfs4
Для того, чтобы размонтировать ресурс используйте команду:
umount /mnt/music
В качестве аргумента укажите точку монтирования.
Откройте файл /etc/fstab
и добавьте в него строку:
192.168.1.101:/adm /mnt/music nfs4 defaults 0 0
Теперь сетевая файловая система будет автоматически монтироваться при загрузке компьютера. Чтобы выполнить монтирование без перезагрузки используйте:
mount -a
К недостаткам данного способа относится то, что в случае плохого канала связи с NFS-сервером может наблюдаться значительная задержка при загрузке системы, однако если сервер полностью недоступен монтирование производиться не будет. Чтобы избежать задержек при запуске системы, используйте опцию _netdev
Для монтирования при помощи systemd используются специальные юниты, имя которых должно отображать физический путь к ним, чтобы сформировать имя на основании пути используйте команду:
systemd-escape -p "/mnt/adm"
Для указанного пути в выводе получим имя mnt-adm, после чего создадим юнит монтирования и откроем его редактором nano:
sudo nano /etc/systemd/system/mnt-adm.mount
И внесем в него следующий текст:
[Unit]
Description=NFS ADM[Mount]
What=192.168.1.101:/adm
Where=/mnt/adm
Type=nfs4
Options=_netdev,auto
TimeoutSec=10[Install]
WantedBy=multi-user.target
В опции What указываем сетевой ресурс, а в опции Where - точку монтирования.
Затем создадим еще один юнит, для автомонтирования ресурса по требованию, это наиболее удобный вариант и рекомендуется для сетевых и съемных ресурсов.
sudo nano /etc/systemd/system/mnt-adm.automount
В нем разместим следующие строки:
[Unit]
Description=Automount NFS ADM[Automount]
Where=/mnt/adm
TimeoutIdleSec=900[Install]
WantedBy=multi-user.target
Теперь перечитаем список юнитов, добавим юнит автомонтирования в автозагрузку и сразу запустим.
systemctl daemon-reload
systemctl enable --now mnt-adm.automount
Перезагружать систему не требуется, при работающем юните достаточно обратиться к указанной точке монтирования, и сетевая файловая система будет подключена автоматически.
При написании данной статьи использовались материалы с
https://interface31.ru/tech_it/2023/07/nastraivaem-setevuyu-faylovuyu-sistemu-nfs-v-debian-i-ubuntu.html
Материалы распространяются под лицензией Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)