Вступление
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 является еще одним вариантом для изучения.