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

Вступление

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

В этом руководстве мы рассмотрим, как настроить монтирование NFS.

Предпосылки

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

  • Two Ubuntu 16.04 servers, each with a non-root user with sudo privileges и частные сети включены.

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

  • Host: 203.0.113.0

  • Clientс: 203.0.113.256

Вы должны заменить эти значения своими IP-адресами хоста и клиента.

[[шаг-1 -—- загрузка-и-установка-компонентов]] == Шаг 1. Загрузка и установка компонентов

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

На хосте

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

sudo apt-get update
sudo apt-get install nfs-kernel-server

Как только эти пакеты установлены, переключитесь на клиентский сервер.

На клиенте

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

sudo apt-get update
sudo apt-get install nfs-common

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

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

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

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

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

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

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

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

sudo mkdir /var/nfs/general -p

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

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. Экспорт домашнего каталога

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

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

[[step-3 -—- configuring-the-nfs-exports-on-the-host-server]] == Шаг 3. Настройка экспорта NFS на хост-сервере

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

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

sudo nano /etc/exports

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

/etc/exports

directory_to_share    client(share_option1,...,share_optionN)

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

/etc/exports

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

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

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

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

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

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

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

sudo systemctl restart nfs-kernel-server

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

[[step-4 -—- adjusting-the-firewall-on-the-host]] == Шаг 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 203.0.113.256 to any port nfs

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

sudo ufw status

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

OutputStatus: active

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

Это подтверждает, что UFW будет разрешать только трафик NFS через порт 2049 с нашего клиентского компьютера.

[[step-5 -—- create-the-mount-points-on-the-client]] == Шаг 5. Создание точек монтирования на клиенте

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

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

[.note] #Note: Если в вашей точке монтирования есть файлы и каталоги, как только вы подключите общий ресурс NFS, они будут скрыты. Если вы монтируете уже существующий каталог, убедитесь, что он пуст.
#

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

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

[[шаг-6 -—- монтирование-каталоги-на-клиенте]] == Шаг 6. Монтирование каталогов на клиенте

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

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

Эти команды должны монтировать общие ресурсы с хост-компьютера на клиентский компьютер. Вы можете перепроверить, что они успешно смонтированы несколькими способами. Вы можете проверить это с помощью простой команды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
203.0.113.0:/home      20G  1.2G   18G   7% /nfs/home
203.0.113.0:/var/nfs/general   20G  1.2G   18G   7% /nfs/general

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

Например:

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

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

[[step-7 -—- testing-nfs-access]] == Шаг 7. Тестирование доступа по 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, владельцем файла по умолчанию является none: 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-доступ на хосте.

[[шаг-8 -—- монтирование-удаленных-nfs-каталогов-при загрузке]] == Шаг 8 - Монтирование удаленных каталогов NFS при загрузке

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

Откройте этот файл с правами root в вашем текстовом редакторе:

sudo nano /etc/fstab

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

/etc/fstab

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

[.note] #Note: Более подробную информацию о параметрах, которые мы здесь указываем, можно найти на странице руководства, которая описывает монтирование NFS вfstab с помощью командыman nfs.
#

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

[[step-9 -—- unmounting-an-nfs-remote-share]] == Шаг 9 - Отключение удаленного общего ресурса 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