Назад в блог

Настройка монтирования NFS на Ubuntu 20.04

Настройка монтирования NFS на Ubuntu 20.04

The Сетевая файловая система (NFS) — это распределенное решение для хранения данных. Это протокол файловой системы, который позволяет монтировать удаленные каталоги на локальном сервере и использовать их так, как будто это локальное хранилище. NFS позволяет нескольким клиентам совместно использовать удаленное хранилище. Он хорошо подходит для сред, в которых регулярно требуются общие ресурсы. NFS построен на системе ONC RPC (Open Network Computing Remote Procedure Call). Это открытый стандарт, определенный в RFC (Request for Comments). Это позволяет любому желающему реализовать этот протокол.

В этом руководстве мы рассмотрим шаги по установке и настройке монтирования NFS на Ubuntu 20.04.

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

Как следует из описания NFS, конфигурация NFS состоит из двух частей:

  • Хост: Физически хранит данные и предоставляет доступ к хранилищу «клиентским» системам.

  • Клиент: Система, которая подключается к «хосту» и использует удаленное хранилище так, как будто оно локальное.

Для нашей демонстрации мы будем использовать два сервера, оба под управлением Ubuntu 20.04. Вот простое руководство по том, как настроить сервер Ubuntu. На протяжении всего руководства эти серверы будут называться хостом и клиентом. Обратите внимание, что действия для клиента будут одинаковыми, даже если их несколько.

Серверам назначены следующие IP-адреса. Эти серверы размещены на CloudSigma:

  • хост: 31.171.240.79

  • клиент: 31.171.250.109

Обязательно замените их соответствующими IP-адресами.

Установка NFS

NFS легко доступен в официальных репозиториях Ubuntu. Существуют различные пакеты программного обеспечения для систем хоста и клиента .

  • Установка NFS на хосте

На хосте нам нужны компоненты, которые позволяют машине работать в качестве NFS- хоста. Они поставляются в виде пакета nfs-kernel-server. Ubuntu использует APT в качестве менеджера пакетов. Сначала запустите терминал и обновите базу данных пакетов APT :

Server Apt Update

Next, install the nfs-kernel-server package. If necessary, APT will take care of any additional dependencies:

Install nfs kernel server

  • Установка NFS на клиенте

На системе client нам нужна функция подключения к каталогам host по сети. Ей не требуется функциональность сервера NFS. В Ubuntu она поставляется в пакете nfs-common. Обновите базу данных пакетов APT :

Client apt update

Затем установите пакет nfs-common :

Install nfs common

Общие каталоги на хосте

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

Можно разрешить определенным доверенным пользователям выполнять эти задачи на смонтированных файловых системах. Однако это связано с определенным риском, поскольку такой client потенциально может получить полный доступ к host. Этот риск можно снизить с помощью правильного управления правами пользователей. В Linux файл sudoers управляет всеми привилегиями пользователей в системе. Для получения дополнительной информации вы можете ознакомиться с нашим руководством по настройке файла sudoers в Linux.

  • Монтирование общего назначения

Первым примером будет монтирование NFS общего назначения с поведением NFS по умолчанию. При таком подходе клиенту крайне сложно выполнять действия суперпользователя на смонтированных ресурсах. Этот тип монтирования NFS обычно развертывается для хранения файлов, загрузки с использованием CMS (системы управления контентом), совместного использования файлов проектов и т. д.

Следующие шаги должны быть выполнены на системе host. Сначала создайте каталог для общего доступа с именем nfs:

Create nfs general dir

Поскольку директория была создана с sudo привилегиями, владельцем будет root:

List nfs general

По умолчанию NFS будет преобразовывать любые операции root со стороны клиента в nobody:nogroup учетные данные в целях безопасности. Для согласованности измените владельца директории в соответствии с этими учетными данными:

Change owner nogroup

  • Домашняя директория

Второй пример — сделать домашнюю директорию пользователя host доступной для клиентов. Доверенные администраторы с выбранных клиентов могут получить доступ для удобного управления пользователями. /home директория существует по умолчанию, поэтому создавать ее не нужно. Что касается прав доступа к директории, нет необходимости вносить какие-либо изменения, так как это принесет больше проблем, чем пользы.

Настройка экспорта NFS

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

exports file

Раздел комментариев в файле описывает общую структуру синтаксиса конфигурации. Вкратце, любая директория должна быть объявлена в следующем формате:

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

exports file mod

Вот краткое описание параметров конфигурации:

  • rw: Клиенту предоставляются права как на чтение, так и на запись тома.

  • sync: Заставляет NFS записывать изменения на диск перед ответом. Это обеспечивает более стабильную и согласованную работу. Ответ будет отражать фактическое состояние удаленного тома. Однако операции с файлами будут выполняться медленнее.

  • no_subtree_check: Отключает проверку поддерева. Если ее не отключить, хосты будут вынуждены проверять существование файла в экспортированном дереве при каждом запросе от клиента. Это может привести ко многим проблемам, например, к переименованию файла во время его использования клиентом. В большинстве случаев отключение проверки поддерева является оптимальным решением.

  • no_root_squash: Как упоминалось ранее, NFS будет преобразовывать любой запрос от удаленного пользователя root в запрос от непривилегированного пользователя. Это предусмотренная функция безопасности для предотвращения нежелательного доступа к хост-системе. Однако использование этой опции отключит данное поведение.

Сохраните конфигурационный файл и выйдите из редактора. Чтобы изменения вступили в силу, перезапустите сервер NFS:

Restart nfs kernel server

Настройка брандмауэра

Для любого сервера правильная настройка брандмауэра является обязательной. Предполагая, что вы соответствующим образом настроили свой сервер Ubuntu 20.04, брандмауэр UFW должен быть активен. Это простой, но мощный брандмауэр, который поставляется с большинством дистрибутивов Linux. Для начинающих вот краткое руководство, объясняющее UFW, принцип его работы и распространенные примеры использования UFW.

По умолчанию брандмауэр блокирует весь входящий и исходящий трафик. Чтобы сервер NFS мог правильно подключаться и обмениваться трафиком, нам нужно добавить исключение для протокола NFS. Сначала проверьте статус брандмауэра. Он также выведет все текущие правила:

ufw status

Как мы видим, в систему разрешен только SSH-трафик. Нам нужно добавить исключение, чтобы разрешить трафик NFS.

В большинстве случаев настоятельно рекомендуется использовать наиболее строгое правило, которое при этом разрешает необходимый трафик. Таким образом, мы разрешим подключение к хосту только определенным клиентам:

ufw allow ports

После этого снова проверьте статус брандмауэра:

ufw status after change

Создание точки монтирования

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

Для двух удаленных томов создайте две отдельные точки монтирования:

Create client nfs general directory

Create client nfs home directory

Теперь, когда точки монтирования готовы, вам нужно смонтировать удаленные тома:

Mount general directory on client

Mount home directory on client

Мы можем проверить, было ли монтирование успешным. Проверьте список всех смонтированных томов:

Disk free in client

Вуаля! Удаленные тома успешно смонтированы. Мы также можем проверить использование пространства с помощью следующей команды:

Disk usage in client home

Тестирование доступа к NFS

На данный момент удаленные тома смонтированы правильно. Однако в этом не будет никакого смысла, если клиент не сможет читать/записывать данные на удаленном томе. Для проверки создайте тестовый файл на смонтированном(ых) томе(ах) NFS. Здесь файл будет создан с привилегиями root для проверки правильности работы конфигураций, специфичных для root:

Create file in nfs

Затем проверьте владельца файла:

Check ownership of file created

Как мы видим, NFS транслирует владельца файла в nobody:nogroup. Каталог /var/nfs/ general принадлежит nobody:nogroup, поэтому NFS транслирует владельца файла. Время протестировать другую точку монтирования NFS:

Create home file

Проверьте существование и владельца файла:

Check ownership of home file

В этом случае NFS не транслировала владельца файла. Этот клиент был настроен на возможность выполнения административных действий. Более того, оригинальный каталог host directory /home не принадлежит nobody:nogroup.

Дополнительные хитрости

  • Монтирование при загрузке

До сих пор нам приходилось вручную монтировать том NFS в локальный каталог. Если их не размонтировать, монтирования NFS будут сохраняться до перезагрузки системы. Если том NFS используется регулярно, то ручное монтирование становится крайне утомительным. В случае нескольких монтирований NFS монтировать их вручную одно за другим непрактично.

Используя файл /etc/fstab кода, мы можем автоматизировать этот процесс. Во время загрузки этот скрипт автоматически смонтирует тома NFS в целевые точки монтирования. Откройте файл в текстовом редакторе:

fstab file

Добавьте следующие строки для монтирования удаленных томов хост-системы:

fstab file after change

Сохраните скрипт и закройте текстовый редактор. При следующей загрузке Linux автоматически смонтирует удаленные тома. Обратите внимание, что загрузка системы может занять некоторое время, так как она подключается и монтирует тома.

  • Размонтирование тома NFS

Если удаленный том больше не нужен, размонтирование томов удалит их из клиентской системы. Однако перед размонтированием убедитесь, что ни одно приложение или скрипт не использует удаленный том. Размонтирование томов NFS аналогично размонтированию любых других томов. В данном случае размонтируйте /nfs/home и /nfs/general:

Unmount nfs

Затем проверьте действие:

Disks after unmount

Заключение

В этом руководстве мы создали NFS-сервер и продемонстрировали некоторые основы удаленного совместного доступа по NFS. Если вы планируете использовать NFS в рабочей среде, помните, что протокол NFS не шифруется. Это может создать определенные проблемы с безопасностью, например, атаки типа «человек посередине» (man-in-the-middle).

Приятной работы!

author

Pranay Kapgate

Автор · CloudSigma

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

Комментарии

Комментариев пока нет. Будьте первым.