Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Настройка NFS в Ubuntu

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
06 мая 2022 г.
1938
11 минут чтения
Средний рейтинг статьи: 5

New Documentation

NFS – сетевая файловая система. Она представляет собой протокол, предназначенный для монтирования каталогов на удаленном сервере. Такой подход позволяет организовать доступ к накопителю сразу нескольким клиентам с разделением их файлов по разным папкам. Также она хорошо показывает себя при организации доступа к общим папкам. 

В этом материале мы рассмотрим, как провести настройку монтажа NFS на машине с Ubuntu 20.04.

Настройка Nfs В Ubuntu (1)

Предварительные требования

В нашем примере используем пару серверов. С одного из них будем «транслировать» файловую систему на второй. Чтобы ускорить подготовку, арендуем пару виртуальных машин у провайдера Timeweb Cloud. Это позволит акцентировать внимание на функциях NFS.

Требования к ним:

  1. Предустановленная Ubuntu 20.04.
  2. Аккаунт без прав root и привилегиями sudo.
  3. Настроенный брандмауэр UFW.

В статье будем использовать название «хост» для сервера, предоставляющего доступ к файловой системе, а «клиент» для того, куда будут смонтированы «внешние папки». Сразу выясните IP-адреса обоих серверов, их на практике подставите вместо host_ip и client_ip, которые мы применим здесь в качестве примера.

Загрузим и инсталлируем компоненты

Процедуру проведем последовательно на каждом сервере, чтобы подготовить их к дальнейшей работе.

Хост

Инсталлируем пакет 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. На клиентских системах это иногда требуется, причем без предоставления прав суперпользователя к самому хосту. 

Пример №1. Экспортируем ресурс общего назначения

Создадим «общий» ресурс с такими привилегиями, чтобы клиенту было сложно взаимодействовать с хостом при помощи прав суперпользователя. Такой подход актуален для совместной работы над проектами или хранения файлов, используемых в системе управления контентом.

Создадим общую папку для пользователя 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

Теперь система готовка к экспорту общего ресурса.

Пример №2

Рассмотрим второй пример, где сделаем домашние каталоги, расположенные на хосте и доступные с клиентских серверов, включая их администраторов. Экспортируем на хост каталог /home, с ним проще работать, потому что он уже существует и на нем настроены необходимые права. Методика та же, что и в предыдущем примере, только клиент и хост «меняются местами».

Настроим экспорт NFS на хосте

Теперь настроим общий доступ к экспортированным ресурсам через конфигурационный файл 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

Мы разобрались, как установить и настроить пакет NFS для общего доступа к ресурсам. Теперь же мы проведем тест их доступности для записи файлов.

Пример №1

Произведем запись тестового файла в каталог /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, он и отображается. Суперпользователи не могут пользоваться общим ресурсом как администраторы. Например, у них не получится создать новую папку для группы аккаунтов или изменить владельца файла. 

Пример №2

Создадим по аналогичной схеме файл, но уже в общем каталоге /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 к системе хоста.

Монтируем удаленные каталоги NFS при запуске

Ресурсы, открытые для общего доступа, «отваливаются» после перезагрузки системы. Но ситуацию легко исправить – добавим команду в файл /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, настроить его для расшаривания ресурсов или подключения к «внешним». Важно понимать, что протокол файловой системы не применяет шифрование, поэтому он не актуален для критических направлений вроде промышленных предприятий. 

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону