NFS – сетевая файловая система. Она представляет собой протокол, предназначенный для монтирования каталогов на удаленном сервере. Такой подход позволяет организовать доступ к накопителю сразу нескольким клиентам с разделением их файлов по разным папкам. Также она хорошо показывает себя при организации доступа к общим папкам.
В этом материале мы рассмотрим, как провести настройку монтажа NFS на машине с Ubuntu 20.04.
В нашем примере используем пару серверов. С одного из них будем «транслировать» файловую систему на второй. Чтобы ускорить подготовку, арендуем пару виртуальных машин у провайдера Timeweb Cloud. Это позволит акцентировать внимание на функциях NFS.
Требования к ним:
В статье будем использовать название «хост» для сервера, предоставляющего доступ к файловой системе, а «клиент» для того, куда будут смонтированы «внешние папки». Сразу выясните IP-адреса обоих серверов, их на практике подставите вместо host_ip и client_ip, которые мы применим здесь в качестве примера.
cloud
Процедуру проведем последовательно на каждом сервере, чтобы подготовить их к дальнейшей работе.
Инсталлируем пакет nfs-kernel-server
, открывающий доступ к директориям, размещенным во «внутренней» файловой системе.
sudo apt update
sudo apt install nfs-kernel-server
По завершении инсталляции перейдем на клиентский сервер.
На машину-клиент инсталлируем пакет nfs-common
, организующий доступ к сторонним каталогам без дополнительных компонентов. Здесь также сначала обновим список пакетов для обеспечения актуальности всех установленных модулей:
sudo apt update
sudo apt install nfs-common
Теперь обе системы готовы к дальнейшей настройке.
В качестве примера организуем доступ к паре папок, но зададим им разные настройки. Этим мы покажем разные варианты настройки монтажа NFS с использованием суперпользователя. Последние выполняют любые операции внутри системы, только вот смонтированные каталоги – это внешние ресурсы, которые «откажутся» работать без отдельного разрешения. Так, независимо от прав на машине суперпользователю не получится записать данные от имени root.
Также недоступно переназначение владельца, иные подобные задачи на смонтированном томе NFS. На клиентских системах это иногда требуется, причем без предоставления прав суперпользователя к самому хосту.
Создадим «общий» ресурс с такими привилегиями, чтобы клиенту было сложно взаимодействовать с хостом при помощи прав суперпользователя. Такой подход актуален для совместной работы над проектами или хранения файлов, используемых в системе управления контентом.
Создадим общую папку для пользователя root с правами sudo:
sudo mkdir /var/nfs/general –p
ls -la /var/nfs/general
Результат видим на экране:
drwxr-xr-x 2 root root 4096 May 24 19:16
Система безопасности, заложенная в NFS на клиенте, преобразует команды, исходящие от root, в операции nobody:nogroup
. Поэтому изменим владельца папки, чтобы соответствовать применяемым учетным данным:
sudo chown nobody:nogroup /var/nfs/general
Теперь система готовка к экспорту общего ресурса.
Рассмотрим второй пример, где сделаем домашние каталоги, расположенные на хосте и доступные с клиентских серверов, включая их администраторов. Экспортируем на хост каталог /home
, с ним проще работать, потому что он уже существует и на нем настроены необходимые права. Методика та же, что и в предыдущем примере, только клиент и хост «меняются местами».
Теперь настроим общий доступ к экспортированным ресурсам через конфигурационный файл NFS, расположенный по пути /etc/exports
. Откроем его текстовым редактором:
sudo nano /etc/exports
Синтаксис внутри него выглядит так:
directory_to_share client(share_option1,...,share_optionN)
Создадим строку для каждой папки, которую планируем использовать в общем доступе. Вместо client_ip подставьте свой реальный IP:
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
Опции, используемые в настройках:
rw
– открывает доступ на чтение-запись в указанном томе;sync
– включает принудительную запись изменений на диске;no_subtree_check
– отключает проверку вложенного дерева;no_root_squash
– активирует преобразование запросов root в запросы без привилегий.Последнее необходимо для блокировки доступа суперпользователя к ресурсам сервера, кроме папки для общего доступа (смонтированные каталоги NFS). Отметим, что после внесения изменений в файл конфигурации необходимо сохранить их при закрытии. Следом обязательно перезагрузите сервер:
sudo systemctl restart nfs-kernel-server
Попутно с текущими настройками стоит убедиться, что брандмауэр разрешает трафик для общих каталогов.
Перед внесением настроек проверим текущий статус:
sudo ufw status
Это необходимо, чтобы убедиться в активности сервиса:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
В нашем примере разрешено подключение только по протоколу SSH, поэтому требуется вручную внести новое правило. Применим следующую команду, что открыть порт 2049:
sudo ufw allow from client_ip to any port nfs
Повторно проверим статус UFW:
sudo ufw status
Теперь мы видим разрешение для SSH и порта 2049:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
Как только хост будет настроен и способен обслуживать общие ресурсы, подготовим клиента. Для этого смонтируем папки, которые планируется расшарить, в клиентских пустых каталогах. Важно учитывать, что при подобном использовании NFS в Ubuntu содержимое директорий окажется недоступным (файлы и папки станут скрытыми).
Создадим две папки:
sudo mkdir -p /nfs/general
sudo mkdir -p /nfs/home
Смонтируем общие ресурсы при помощи IP хоста:
sudo mount host_ip:/var/nfs/general /nfs/general
sudo mount host_ip:/home /nfs/home
Приведенные команды подключат выделенные ресурсы хоста к клиентской системе. Проверим успешность процедуры монтирования:
df –h
Вывод на экран:
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general
10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home
Смонтированные ресурсы отображаются в самом низу. При помощи команды du
посмотрим, какой объем занимает конкретная точка монтирования. К ней укажем прямой путь до каталога и опцию -s
для отображения сводной информации, без детализации по каждому файлу. Если еще добавить опцию -h
, то вывод будет представлен в более удобной для чтения форме:
du -sh /nfs/home
Результат:
36K /nfs/home
Каталог home первоначально занимает всего 36 Кбайт.
Мы разобрались, как установить и настроить пакет NFS для общего доступа к ресурсам. Теперь же мы проведем тест их доступности для записи файлов.
Произведем запись тестового файла в каталог /var/nfs/general
:
sudo touch /nfs/general/general.test
Проверим права владельца:
ls -l /nfs/general/general.test
Результат на экране:
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
Мы ранее меняли владельца root на nobody:nogroup
, он и отображается. Суперпользователи не могут пользоваться общим ресурсом как администраторы. Например, у них не получится создать новую папку для группы аккаунтов или изменить владельца файла.
Создадим по аналогичной схеме файл, но уже в общем каталоге /nfs/home
:
sudo touch /nfs/home/home.test
Проверим его владельца:
ls -l /nfs/home/home.test
Результат на экране:
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test
Мы здесь создали файл home.test с владельцем root по аналогии с ранее приведенным примером, где был создан general.test. Но в данном случае мы позволяем пользователям с доступом root на клиенте запускать операции без ограничений. Это удобно, т.к. не требуется отдельно открывать доступ root к системе хоста.
Ресурсы, открытые для общего доступа, «отваливаются» после перезагрузки системы. Но ситуацию легко исправить – добавим команду в файл /etc/fstab
, расположенный на клиенте. Сначала откроем редактор:
sudo nano /etc/fstab
Перейдем в конец файла и внесем по строке на каждый из организованных ресурсов:
. . .
host_ip:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Подробнее об опциях, используемых при настройке NFS, читайте на официальной странице этого инструмента. Мы же ограничимся вводом:
man nfs
Теперь на клиенте при каждом запуске будут подключаться заранее указанные папки. Правда, следует учитывать, что на коннект понадобится определенное время.
Как только общий каталог перестал быть востребованным его лучше отключить:
cd ~
sudo umount /nfs/home
sudo umount /nfs/general
Система удалит удаленные ресурсы и сохранит локальные хранилища.
df -h
Результат на экране:
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
Чтобы запретить повторное подключение после запуска, требуется внести изменения в /etc/fstab (удалить ранее внесенные строки или закомментировать их символом # вначале каждой). Работать с вручную смонтированными ресурсами можно без ограничений.
Подготовили для вас выгодные тарифы на облачные серверы
В этом материале мы разобрались, как установить сервер NFS на Ubuntu 20.04, настроить его для расшаривания ресурсов или подключения к «внешним». Важно понимать, что протокол файловой системы не применяет шифрование, поэтому он не актуален для критических направлений вроде промышленных предприятий.