NFS – сетевая файловая система. Она представляет собой протокол, предназначенный для монтирования каталогов на удаленном сервере. Такой подход позволяет организовать доступ к накопителю сразу нескольким клиентам с разделением их файлов по разным папкам. Также она хорошо показывает себя при организации доступа к общим папкам.
В этом материале мы рассмотрим, как провести настройку монтажа NFS на машине с Ubuntu 20.04.
Предварительные требования
В нашем примере используем пару серверов. С одного из них будем «транслировать» файловую систему на второй. Чтобы ускорить подготовку, арендуем пару виртуальных машин у провайдера Timeweb Cloud. Это позволит акцентировать внимание на функциях NFS.
Требования к ним:
- Предустановленная Ubuntu 20.04.
- Аккаунт без прав root и привилегиями sudo.
- Настроенный брандмауэр UFW.
В статье будем использовать название «хост» для сервера, предоставляющего доступ к файловой системе, а «клиент» для того, куда будут смонтированы «внешние папки». Сразу выясните IP-адреса обоих серверов, их на практике подставите вместо host_ip и client_ip, которые мы применим здесь в качестве примера.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Загрузим и инсталлируем компоненты
Процедуру проведем последовательно на каждом сервере, чтобы подготовить их к дальнейшей работе.
Хост
Инсталлируем пакет nfs-kernel-server, открывающий доступ к директориям, размещенным во «внутренней» файловой системе.
По завершении инсталляции перейдем на клиентский сервер.
Клиент
На машину-клиент инсталлируем пакет nfs-common, организующий доступ к сторонним каталогам без дополнительных компонентов. Здесь также сначала обновим список пакетов для обеспечения актуальности всех установленных модулей:
Теперь обе системы готовы к дальнейшей настройке.
Создадим на хосте общие каталоги
В качестве примера организуем доступ к паре папок, но зададим им разные настройки. Этим мы покажем разные варианты настройки монтажа NFS с использованием суперпользователя. Последние выполняют любые операции внутри системы, только вот смонтированные каталоги – это внешние ресурсы, которые «откажутся» работать без отдельного разрешения. Так, независимо от прав на машине суперпользователю не получится записать данные от имени root.
Также недоступно переназначение владельца, иные подобные задачи на смонтированном томе NFS. На клиентских системах это иногда требуется, причем без предоставления прав суперпользователя к самому хосту.
Пример №1. Экспортируем ресурс общего назначения
Создадим «общий» ресурс с такими привилегиями, чтобы клиенту было сложно взаимодействовать с хостом при помощи прав суперпользователя. Такой подход актуален для совместной работы над проектами или хранения файлов, используемых в системе управления контентом.
Создадим общую папку для пользователя root с правами sudo:
Результат видим на экране:
Система безопасности, заложенная в NFS на клиенте, преобразует команды, исходящие от root, в операции nobody:nogroup. Поэтому изменим владельца папки, чтобы соответствовать применяемым учетным данным:
Теперь система готовка к экспорту общего ресурса.
Пример №2
Рассмотрим второй пример, где сделаем домашние каталоги, расположенные на хосте и доступные с клиентских серверов, включая их администраторов. Экспортируем на хост каталог /home, с ним проще работать, потому что он уже существует и на нем настроены необходимые права. Методика та же, что и в предыдущем примере, только клиент и хост «меняются местами».
Настроим экспорт NFS на хосте
Теперь настроим общий доступ к экспортированным ресурсам через конфигурационный файл NFS, расположенный по пути /etc/exports. Откроем его текстовым редактором:
Синтаксис внутри него выглядит так:
Создадим строку для каждой папки, которую планируем использовать в общем доступе. Вместо client_ip подставьте свой реальный IP:
Опции, используемые в настройках:
rw– открывает доступ на чтение-запись в указанном томе;sync– включает принудительную запись изменений на диске;no_subtree_check– отключает проверку вложенного дерева;no_root_squash– активирует преобразование запросов root в запросы без привилегий.
Последнее необходимо для блокировки доступа суперпользователя к ресурсам сервера, кроме папки для общего доступа (смонтированные каталоги NFS). Отметим, что после внесения изменений в файл конфигурации необходимо сохранить их при закрытии. Следом обязательно перезагрузите сервер:
Попутно с текущими настройками стоит убедиться, что брандмауэр разрешает трафик для общих каталогов.
Настроим брандмауэр на хосте
Перед внесением настроек проверим текущий статус:
Это необходимо, чтобы убедиться в активности сервиса:
В нашем примере разрешено подключение только по протоколу SSH, поэтому требуется вручную внести новое правило. Применим следующую команду, что открыть порт 2049:
Повторно проверим статус UFW:
Теперь мы видим разрешение для SSH и порта 2049:
Создадим точки монтирования каталогов на клиенте
Как только хост будет настроен и способен обслуживать общие ресурсы, подготовим клиента. Для этого смонтируем папки, которые планируется расшарить, в клиентских пустых каталогах. Важно учитывать, что при подобном использовании NFS в Ubuntu содержимое директорий окажется недоступным (файлы и папки станут скрытыми).
Создадим две папки:
Смонтируем общие ресурсы при помощи IP хоста:
Приведенные команды подключат выделенные ресурсы хоста к клиентской системе. Проверим успешность процедуры монтирования:
Вывод на экран:
Смонтированные ресурсы отображаются в самом низу. При помощи команды du посмотрим, какой объем занимает конкретная точка монтирования. К ней укажем прямой путь до каталога и опцию -s для отображения сводной информации, без детализации по каждому файлу. Если еще добавить опцию -h, то вывод будет представлен в более удобной для чтения форме:
Результат:
Каталог home первоначально занимает всего 36 Кбайт.
Протестируем доступ NFS
Мы разобрались, как установить и настроить пакет NFS для общего доступа к ресурсам. Теперь же мы проведем тест их доступности для записи файлов.
Пример №1
Произведем запись тестового файла в каталог /var/nfs/general:
Проверим права владельца:
Результат на экране:
Мы ранее меняли владельца root на nobody:nogroup, он и отображается. Суперпользователи не могут пользоваться общим ресурсом как администраторы. Например, у них не получится создать новую папку для группы аккаунтов или изменить владельца файла.
Пример №2
Создадим по аналогичной схеме файл, но уже в общем каталоге /nfs/home:
Проверим его владельца:
Результат на экране:
Мы здесь создали файл home.test с владельцем root по аналогии с ранее приведенным примером, где был создан general.test. Но в данном случае мы позволяем пользователям с доступом root на клиенте запускать операции без ограничений. Это удобно, т.к. не требуется отдельно открывать доступ root к системе хоста.
Монтируем удаленные каталоги NFS при запуске
Ресурсы, открытые для общего доступа, «отваливаются» после перезагрузки системы. Но ситуацию легко исправить – добавим команду в файл /etc/fstab, расположенный на клиенте. Сначала откроем редактор:
Перейдем в конец файла и внесем по строке на каждый из организованных ресурсов:
Подробнее об опциях, используемых при настройке NFS, читайте на официальной странице этого инструмента. Мы же ограничимся вводом:
Теперь на клиенте при каждом запуске будут подключаться заранее указанные папки. Правда, следует учитывать, что на коннект понадобится определенное время.
Отключим расшаренный доступ
Как только общий каталог перестал быть востребованным его лучше отключить:
Система удалит удаленные ресурсы и сохранит локальные хранилища.
Результат на экране:
Чтобы запретить повторное подключение после запуска, требуется внести изменения в /etc/fstab (удалить ранее внесенные строки или закомментировать их символом # вначале каждой). Работать с вручную смонтированными ресурсами можно без ограничений.
Подготовили для вас выгодные тарифы на облачные серверы
477 ₽/мес
657 ₽/мес
Выводы
В этом материале мы разобрались, как установить сервер NFS на Ubuntu 20.04, настроить его для расшаривания ресурсов или подключения к «внешним». Важно понимать, что протокол файловой системы не применяет шифрование, поэтому он не актуален для критических направлений вроде промышленных предприятий.
