Монтирование NFS на сервере Ubuntu 18.04

NFS, или Network File System – это распределённый протокол файловой системы, позволяющий монтировать удалённые каталоги и использовать их как локальные. Таким образом вы можете использовать отдельное пространство для хранения файлов и обращаться к нему с нескольких удалённых серверов.

Данный мануал поможет выполнить монтирование NFS на сервере Ubuntu 18.04.

Требования

Для выполнения мануала нужно два сервера Ubuntu 18.04 (настроенные по этому мануалу), которые будут совместно использовать одну файловую систему. Исходный сервер называется хостом; сервер, на котором монтируется файловая система, называется клиентом. Их условные IP-адреса:

  • хост: 203.0.113.0
  • клиент: 203.0.113.24

Также для работы вам понадобится частная сеть (читайте Основы работы с частной сетью).

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

Сначала нужно установить все компоненты на каждый сервер.

Хост

На хост нужно установить пакет nfs-kernel-server, который позволяет настраивать совместное использование каталогов. Обновите индекс пакетов и установите nfs-kernel-server:

sudo apt update
sudo apt install nfs-kernel-server

После этого перейдите на клиент.

Клиент

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

sudo apt update
sudo apt install nfs-common

Теперь оба сервера готовы к работе.

2: Создание расшаренных каталогов на сервере host

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

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

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

Пример 1: Общее монтирование

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

Создайте каталог nfs:

sudo mkdir /var/nfs/general -p

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

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

NFS переведёт все операции root клиента

в nobody:nogroup в целях безопасности. Во избежание конфликта нужно изменить права на каталог:

sudo chown nobody:nogroup /var/nfs/general

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

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

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

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

3: Настройка экспорта NFS на хосте

Каталоги полностью готовы, теперь нужно открыть конфигурационный каталог NFS и расшарить их.

sudo nano /etc/exports

Файл содержит ряд комментариев, объясняющих функции и общую структуру каждой строки. Базовый синтаксис файла имеет такой вид:

directory_to_share    client(share_option1,...,share_optionN)

Добавьте настройки для каждого каталога, который нужно расшарить.

Примечание: Замените условный IP 203.0.113.24 IP-адресом своего клиента.

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

Параметры обоих каталогов почти одинаковы, за исключением no_root_squash, который присутствует только в настройках домашнего каталога.

Рассмотрим параметры подробнее:

  • rw: устанавливает права клиента на чтение и изменение каталога.
  • sync: синхронизирует каталоги по NFS, что обеспечивает надёжное и согласованное окружение (с другой стороны, это может замедлить скорость выполнения операций).
  • no_subtree_check: предотвращает проверку поддерева (процесс проверки хост-сервером доступности файла в экспортируемом дереве для каждого запроса). Это может вызвать много проблем в совместном использовании, например, если открытый на клиенте файл был переименован на сервере. Проверку поддерева рекомендуется отключить в большинстве случаев.
  • no_root_squash: по умолчанию NFS транслирует запросы от root-пользователя клиента не-root пользователю сервера, благодаря чему root-пользователь клиента не может использовать файловую систему хоста с теми же привилегиями. Данная директива блокирует эту функцию безопасности для некоторых совместно используемых ресурсов.

Внеся все изменения, сохраните и закройте файл.

Перезапустите NFS, чтобы клиенты получили доступ к расшаренному каталогу.

sudo systemctl restart nfs-kernel-server

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

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

Проверьте состояние брандмауэра:

sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

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

Многие приложения есть в списке брандмауэра ufw. Их можно добавить в настройки, просто указав имя. К сожалению, nfs не входит в этот список. Брандмауэр ufw читает файл /etc/services, чтобы найти порт и протокол приложения. В этот файл можно добавить NFS.

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

Чтобы открыть порт 2049 на сервере host, введите на хосте эту команду, указав IP клиента:

sudo ufw allow from 203.0.113.24 to any port nfs

Проверьте изменения:

sudo ufw status

В списке появится новый порт.

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
2049                       ALLOW       203.0.113.24
OpenSSH (v6)               ALLOW       Anywhere (v6)

UFW поддерживает трафик клиента NFS по порту 2049.

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

Итак, хост настроен и подготовлен к совместному использованию каталогов с клиентом. Теперь нужно смонтировать удалённые каталоги и создать несколько точек монтирования.

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

На клиенте создайте два каталога:

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

Теперь на клиенте есть место для хранения совместно используемых данных. Смонтируйте эти каталоги:

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

Эти команды выполнят монтирование каталогов серверов. Чтобы убедиться, что монтирование прошло успешно, проверьте дисковое пространство на клиенте.

df -h
Filesystem                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
36K /nfs/home

Это значит, что контент домашнего каталога занимает 36K доступного пространства.

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

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

Пример 1: Общий каталог

Создайте тестовый файл в /var/nfs/general:

sudo touch /nfs/general/general.test

Проверьте права на него:

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

Поскольку этот каталог был смонтирован со стандартным поведением NFS, а тестовый файл принадлежит пользователю root, в расшаренном каталоге права на файл изменятся (nobody:nogroup). Суперпользователь клиента не сможет выполнять задачи администратора (изменять привилегии, создавать каталоги для пользователей и групп и т.п.).

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

Создайте такой же файл в домашнем каталоге:

sudo touch /nfs/home/home.test

Проверьте права на него:

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

Файл home.test также принадлежит пользователю root, однако при монтировании этого каталога поведение NFS по умолчанию было изменено (параметр no_root_squash). Благодаря этому root-пользователи клиента сохраняют свои привилегии. Благодаря этому им не нужно предоставлять root права на хосте.

7: Автоматическое монтирование NFS

Чтобы настроить автоматическое монтирование каталогов, добавьте их в файл /etc/fstab на клиенте.

Откройте этот файл:

sudo nano /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

Примечание: Все использованные здесь опции можно найти на страницах мануала NFS, посвящённых файлу fstab:

man nfs

Теперь каталоги будут монтироваться автоматически при каждом запуске системы. Подключение может занять некоторое время.

8: Демонтирование удалённых каталогов NFS

Если файловая система больше не нуждается в удалённых каталогах, их можно демонтировать. Для этого нужно открыть смонтированный каталог и выполнить команду:

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

Это удалит смонтированные каталоги из файловой системы.

df -h
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 через соединения SSH или VPN, чтобы обеспечить защиту данных.

Читайте также: Монтирование удаленных файловых систем при помощи SSHFS

Tags: ,