Как настроить монтирование NFS в Ubuntu 18.04

Вступление

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

В этом руководстве мы рассмотрим, как установить компоненты, необходимые для функциональности NFS, настроить монтирование NFS и размонтировать удаленный общий ресурс NFS.

Предпосылки

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

  • Два сервера Ubuntu 18.04. У каждого из них должен быть настроен не-root * пользователь с привилегиями + sudo +, простой брандмауэр, настроенный с помощью UFW, и частная сеть, если она вам доступна.

  • Чтобы получить помощь в настройке не-root * пользователя с привилегиями + sudo + и брандмауэром, следуйте нашим https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 Руководство [Начальная настройка сервера с Ubuntu 18.04].

  • Для получения справки по настройке частных сетей см. Https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking[Как настроить и использовать частную сеть DigitalOcean] ,

В этом руководстве мы ссылаемся на сервер, который совместно использует свои каталоги, как * host *, а сервер, который монтирует эти каталоги, как * client *. Чтобы сохранить их правильность, мы будем использовать следующие IP-адреса в качестве резервных для значений * host * и * client *:

  • * Host *: + 203.0.113.0 +

  • * Клиент *: + 203.0.113.24 +

Когда эти IP-адреса появятся в командах и файлах конфигурации, вам необходимо заменить их собственными соответствующими IP-адресами * host * и * client *.

Шаг 1 - Загрузка и установка компонентов

Начнем с установки необходимых компонентов на каждом сервере.

На хосте

На сервере * host * установите пакет + nfs-kernel-server +, который позволит вам поделиться своими каталогами. Поскольку это первая операция, которую вы выполняете с + apt + в этом сеансе, обновите локальный индекс пакета перед установкой:

sudo apt update
sudo apt install nfs-kernel-server

После установки этих пакетов переключитесь на сервер * client *.

На клиенте

На сервере * client * нам нужно установить пакет с именем + nfs-common +, который обеспечивает функциональность NFS без включения ненужных серверных компонентов. Снова обновите локальный индекс пакета перед установкой, чтобы убедиться, что у вас есть актуальная информация:

sudo apt update
sudo apt install nfs-common

Теперь, когда на обоих серверах есть необходимые пакеты, мы можем приступить к их настройке.

Шаг 2 - Создание общих каталогов на хосте

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

Суперпользователи могут делать что угодно в своей системе. Однако смонтированные NFS каталоги не являются частью системы, в которой они смонтированы, поэтому по умолчанию сервер NFS отказывается выполнять операции, требующие привилегий суперпользователя. Это ограничение по умолчанию означает, что суперпользователи на * клиенте * не могут записывать файлы с правами * root *, переназначать владельца или выполнять любые другие задачи суперпользователя при монтировании NFS.

Однако иногда в системе * client * есть доверенные пользователи, которым необходимо выполнить эти действия в смонтированной файловой системе, но которым не нужен суперпользовательский доступ на * host *. Вы можете настроить сервер NFS так, чтобы это разрешалось, хотя это представляет элемент риска, поскольку такой пользователь could может получить root-доступ ко всей системе * host *.

Пример 1. Экспорт универсального монтирования

В первом примере мы создадим универсальное NFS-монтирование, которое использует поведение NFS по умолчанию, чтобы пользователю с привилегиями root на компьютере * client * было трудно взаимодействовать с * host * с помощью этих привилегий * client * superuser. , Вы можете использовать что-то вроде этого для хранения файлов, которые были загружены с помощью системы управления контентом, или для создания пространства, в котором пользователи могут легко обмениваться файлами проекта.

Сначала создайте каталог с общим доступом + nfs +:

sudo mkdir /var/nfs/general -p

Поскольку мы создаем его с помощью + sudo +, каталог принадлежит пользователю * root * на * host *.

ls -la /var/nfs/general
Output4 drwxr-xr-x  2 root   root    4096 Jul 25 15:26 .

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

sudo chown nobody:nogroup /var/nfs/general

Теперь вы готовы экспортировать этот каталог.

Пример 2. Экспорт домашнего каталога

Во втором примере цель состоит в том, чтобы сделать домашние каталоги пользователей, хранящиеся на * host *, доступными на * клиентских * серверах, одновременно предоставляя доверенным администраторам этих * клиентских * серверов доступ, необходимый им для удобного управления пользователями.

Для этого мы экспортируем каталог + / home. Поскольку он уже существует, нам не нужно его создавать. Мы также не будем менять разрешения. Если мы did, это может привести к ряду проблем для любого с домашним каталогом на машине * host *.

Шаг 3 - Настройка экспорта NFS на хост-сервере

Далее мы углубимся в файл конфигурации NFS, чтобы настроить совместное использование этих ресурсов.

Откройте файл + / etc / exports + в текстовом редакторе с правами * root *:

sudo nano /etc/exports

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

/ и т.д. / экспорта

   (,,)

Нам нужно создать строку для каждого из каталогов, которые мы планируем использовать. Поскольку наш пример * client * имеет IP-адрес + 203.0.113.24 +, наши строки будут выглядеть следующим образом. Обязательно измените показанный здесь IP-адрес на ваш * клиент *:

/ и т.д. / экспорта

/var/nfs/general    (rw,sync,no_subtree_check)
/home       (rw,sync,no_root_squash,no_subtree_check)

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

  • + rw +: эта опция дает компьютеру * client * права на чтение и запись на том.

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

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

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

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

sudo systemctl restart nfs-kernel-server

Однако прежде чем вы сможете использовать новые общие ресурсы, вы должны быть уверены, что трафик к общим ресурсам разрешен правилами брандмауэра.

Шаг 4 - Настройка брандмауэра на хосте

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

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

В нашей системе пропускается только трафик SSH, поэтому нам нужно добавить правило для трафика NFS.

Во многих приложениях вы можете использовать + sudo ufw app list + и включать их по имени, но + nfs + не является одним из них. Однако, поскольку + ufw также проверяет` + / etc / services` на наличие порта и протокола службы, мы все равно можем добавить NFS по имени. В соответствии с передовой практикой рекомендуется включить наиболее ограничивающее правило, которое по-прежнему будет разрешать трафик, который вы хотите разрешить, поэтому вместо того, чтобы разрешать трафик из любого места, мы будем конкретны.

Используйте следующую команду, чтобы открыть порт + 2049 + на * хосте *, обязательно заменив * IP-адрес вашего * клиента:

sudo ufw allow from  to any port nfs

Вы можете проверить изменение, набрав:

sudo ufw status

Вы должны увидеть трафик, разрешенный через порт + 2049 + в выходных данных:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
2049                       ALLOW
OpenSSH (v6)               ALLOW       Anywhere (v6)

Это подтверждает, что UFW будет разрешать трафик NFS только через порт «+ 2049 +» с нашей * клиентской * машины.

Шаг 5 - Создание точек монтирования и каталогов монтирования на клиенте

Теперь, когда сервер * host * настроен и обслуживает его общие ресурсы, мы подготовим наш * клиент *.

Чтобы сделать удаленные общие ресурсы доступными на * клиенте *, нам нужно смонтировать каталоги на * хосте *, которые мы хотим использовать, в пустые каталоги на * клиенте *.

Мы создадим две директории для наших монтировок:

sudo mkdir -p /nfs/general
sudo mkdir -p /nfs/home

Теперь, когда у нас есть место для размещения удаленных общих ресурсов, и мы открыли брандмауэр, мы можем подключить общие ресурсы, обратившись к нашему * хосту * серверу, который в этом руководстве называется + 203.0.113.0 +:

sudo mount :/var/nfs/general /nfs/general
sudo mount :/home /nfs/home

Эти команды будут монтировать общие ресурсы с главного компьютера на компьютер * client *. Вы можете перепроверить, что они успешно смонтированы несколькими способами. Вы можете проверить это с помощью простой команды + mount + или + findmnt +, но + df -h + предоставляет более легко читаемый вывод, который показывает, как по-разному отображается использование диска для общих ресурсов NFS:

df -h
OutputFilesystem                Size  Used Avail Use% Mounted on
udev                      238M     0  238M   0% /dev
tmpfs                      49M  628K   49M   2% /run
/dev/vda1                  20G  1.2G   18G   7% /
tmpfs                     245M     0  245M   0% /dev/shm
tmpfs                     5.0M     0  5.0M   0% /run/lock
tmpfs                     245M     0  245M   0% /sys/fs/cgroup
tmpfs                      49M     0   49M   0% /run/user/0

Обе акции, которые мы установили, появляются внизу. Поскольку они были смонтированы из одной файловой системы, они показывают одинаковое использование диска. Чтобы увидеть, сколько места фактически используется под каждой точкой монтирования, используйте команду использования диска + du + и путь монтирования. Флаг + -s + предоставляет сводку по использованию, а не отображает использование для каждого файла. + -H + печатает читабельный вывод.

Например:

du -sh /nfs/home
Output36K /nfs/home

Это показывает нам, что содержимое всего домашнего каталога использует только 36 КБ доступного пространства.

Шаг 6 - Тестирование доступа NFS

Далее, давайте проверим доступ к общим ресурсам, написав что-то каждому из них.

Пример 1: акция общего назначения

Сначала запишите тестовый файл в общий каталог + / var / nfs / general +:

sudo touch /nfs/general/general.test

Затем проверьте его владение:

ls -l /nfs/general/general.test
Output-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test

Поскольку мы смонтировали этот том без изменения поведения NFS по умолчанию и создали файл в качестве пользователя * клиента * компьютера * с правами root с помощью команды + sudo +, владельцем файла по умолчанию является + nobody: nogroup +. * клиент * суперпользователи не смогут выполнять типичные административные действия, такие как смена владельца файла или создание нового каталога для группы пользователей, в этом смонтированном NFS-ресурсе.

Пример 2: Домашний каталог Share

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

sudo touch /nfs/home/home.test

Затем посмотрите на владение файлом:

ls -l /nfs/home/home.test
Output-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test

Мы создали + home.test как * root *, используя команду` + sudo`, точно так же, как мы создали файл + general.test +. Однако в этом случае он принадлежит * root *, потому что мы переопределили поведение по умолчанию, когда указали опцию + no_root_squash + на этом монтировании. Это позволяет нашим * root * пользователям на * клиентской * машине действовать как * root * и делает администрирование учетных записей пользователей намного более удобным. В то же время это означает, что нам не нужно предоставлять этим пользователям root-права на * host *.

Шаг 7 - Монтирование удаленных каталогов NFS при загрузке

Мы можем подключить удаленные NFS-ресурсы автоматически при загрузке, добавив их в файл + / etc / fstab + на * client *.

Откройте этот файл с правами суперпользователя в текстовом редакторе:

sudo nano /etc/fstab

В нижней части файла добавьте строку для каждого из наших акций. Они будут выглядеть так:

/ И т.д. / Fstab

. . .
:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
:/home       /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

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

Шаг 8 - Размонтирование удаленного общего ресурса NFS

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

cd ~
sudo umount /nfs/home
sudo umount /nfs/general

Это удалит удаленные общие ресурсы, оставляя доступным только ваше локальное хранилище:

df -h
Output
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  320K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user

Если вы также хотите предотвратить их повторную установку при следующей перезагрузке, отредактируйте + / etc / fstab + и либо удалите строку, либо закомментируйте ее, поместив символ # в начале строки. Вы также можете предотвратить автоматическое монтирование, удалив опцию + auto +, которая позволит вам монтировать его вручную.

Заключение

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

Однако если вы используете NFS для личных данных, вам нужно решить, как вы хотите защитить эти данные. Возможно, вам удастся направить NFS через SSH или VPN-соединение, чтобы создать более безопасный интерфейс, но это часто приводит к значительному снижению производительности. Если производительность является проблемой, рассмотрите SSHFS. Это немного медленнее, чем незашифрованный трафик NFS, но обычно намного быстрее, чем туннельный NFS. Аутентифицированное шифрование Kerberos для NFS является еще одним вариантом для изучения.

Related