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

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

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

Требования

В руководстве используется два сервера, которые будут совместно использовать одну файловую систему. Исходный сервер называется host; сервер, на котором монтируется файловая система, называется client. Их условные IP-адреса:

  • Host: 203.0.113.0
  • Client: 203.0.113.256

Замените эти адреса IP-адресами своих серверов. Также для работы вам понадобится:

  • Два настроенных сервера Ubuntu 16.04 (руководство по начальной настройке можно найти здесь).
  • Пользователь с доступом sudo на каждом сервере.
  • Частная сеть.

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

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

Сервер host

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

sudo apt update
sudo apt install nfs-kernel-server

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

Сервер client

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

sudo apt update
sudo apt install nfs-common

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

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

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

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

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

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

В первом примере показано, как создать 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

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

Экспорт домашнего каталога

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

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

3: Экспортирование NFS

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

sudo nano /etc/exports

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

directory_to_share    client(share_option1,...,share_optionN)

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

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

/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: предотвращает проверку поддерева (процесс проверки host-сервером доступности файла в экспортируемом дереве для каждого запроса). Это может вызвать много проблем в совместном использовании, например, если открытый на клиенте файл был переименован на сервере. Проверку поддерева рекомендуется отключить в большинстве случаев.
  • 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, введите:

sudo ufw allow from 203.0.113.0 to any port nfs

Примечание: Укажите ip своего клиента.

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

sudo ufw status

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

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

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

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

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

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

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

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

6: Монтирование удаленных каталогов

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

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

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

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

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

7: Тестирование доступа 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
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-пользователи клиента сохраняют свои привилегии.

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

Чтобы настроить автоматическое монтирование каталогов, добавьте их в файл 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

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

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

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

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

Как видите, теперь доступных удалённых каталогов в файловой системе больше нет.

Заключение

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

Tags: ,

Добавить комментарий