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 — разрешить чтение и запись в этой папке;
- ro — разрешить только чтение;
- sync — отвечать на следующие запросы только тогда, когда данные будут сохранены на диск (по умолчанию);
- async — не блокировать подключения пока данные записываются на диск;
- secure — использовать для соединения только порты ниже 1024;
- insecure — использовать любые порты;
- nohide — не скрывать поддиректории при, открытии доступа к нескольким директориям;
- root_squash — подменять запросы от root на анонимные, используется по умолчанию;
- no_root_squash — не подменять запросы от root на анонимные;
- all_squash — превращать все запросы в анонимные;
- subtree_check — проверять не пытается ли пользователь выйти за пределы экспортированной папки;
- no_subtree_check — отключить проверку обращения к экспортированной папке, улучшает производительность, но снижает безопасность, можно использовать когда экспортируется раздел диска;
- anonuid и anongid — указывает uid и gid для анонимного пользователя.
Внеся все изменения, сохраните и закройте файл.
Перезапустите 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.
- showmount -e : Показывает доступные расшаренные объекты на локальном компьютере
- showmount -e <server-ip or hostname>: Список доступных расшаренных объектов на удаленном сервере
- showmount -d : Список всех поддиректорий
- exportfs -v : Отображает список расшаренных файлов и опций на сервере
- exportfs -a : Экспорт всех доступных объектов, перечисленных в /etc/exports, или имя
- exportfs -u : Реэкспорт всех доступных объектов, перечисленные в /etc/exports, или имя
- exportfs -r : Обновить список сервера после изменения /etc/exports
Заключение
NFS предоставляет быстрый и простой способ настройки сетевого доступа к удалённым каталогам. Однако имейте в виду: сам протокол не шифруется. При использовании NFS в производственной среде стоит рассмотреть варианты маршрутизации NFS через соединения SSH или VPN, чтобы обеспечить защиту данных.
Источники:
- https://www.8host.com/blog/montirovanie-nfs-na-servere-ubuntu-18-04/
- https://losst.ru/nastrojka-nfs-v-ubuntu-16-04
- https://andreyex.ru/operacionnaya-sistema-linux/kak-nastroit-nfs-network-file-system-na-rhel-centos-fedora-i-debian-ubuntu/
Was this helpful?
0 / 0