Введение
NFS, или Сетевая файловая система, является протоколом распределенной файловой системы, который позволяет монтировать удаленные каталоги на вашем сервере. Это позволяет управлять пространством хранения в другом месте и записывать в это пространство с нескольких клиентов. NFS обеспечивает относительно стандартный и производительный способ доступа к удаленным системам через сеть и хорошо работает в ситуациях, когда общие ресурсы должны регулярно обращаться.
В этом руководстве вы узнаете, как установить необходимое программное обеспечение для функционирования NFS на Ubuntu 18.04, настроить монтирование NFS на сервере и клиенте, а также смонтировать и размонтировать удаленные общие ресурсы.
Предварительные требования
Для выполнения этого руководства мы будем использовать два сервера, один из которых будет предоставлять часть своей файловой системы другому. Для завершения этого урока вам понадобятся:
-
Два сервера Ubuntu 18.04. На каждом из них должен быть создан не-root пользователь с настроенными привилегиями
sudo
, настроенный брандмауэр с помощью UFW и частная сеть, если это доступно.-
Для помощи в создании не-root пользователя с привилегиями
sudo
и настройке брандмауэра следуйте нашему руководству Начальная настройка сервера с Ubuntu 18.04. -
Если вы используете виртуальные машины DigitalOcean для своего сервера и клиента, прочтите Как создать VPC, чтобы настроить частную сеть.
-
На протяжении этого руководства мы обращаемся к серверу, который делит свои каталоги, как к хосту, а к серверу, который монтирует эти каталоги, как к клиенту. Мы будем использовать следующие IP-адреса в качестве заменителей для значений хоста и клиента:
- Хост:
203.0.113.0
- Клиент:
203.0.113.24
Когда эти IP-адреса появляются в командах и конфигурационных файлах, замените их на ваши собственные соответствующие IP-адреса хоста и клиента.
Шаг 1 — Загрузка и установка компонентов
Сначала начните с установки необходимых компонентов на каждом сервере.
На хосте
На сервере хоста установите пакет nfs-kernel-server
, который позволит вам делиться вашими каталогами. Поскольку это первая операция, которую вы выполняете с помощью apt
в этой сессии, обновите свой локальный индекс пакетов перед установкой:
Затем установите пакет:
После установки этих пакетов переключитесь на сервер клиента.
На клиенте
На сервере клиента установите пакет под названием nfs-common
, который предоставляет функциональность NFS без включения серверных компонентов. Снова обновите локальный индекс пакетов перед установкой, чтобы убедиться, что у вас есть актуальная информация:
Затем установите пакет:
Теперь, когда оба сервера имеют необходимые пакеты, вы можете начать их настройку.
Шаг 2 — Создание общих каталогов на хосте
Мы собираемся разделить два отдельных каталога с разными настройками конфигурации, чтобы проиллюстрировать два ключевых способа настройки монтирования NFS в отношении доступа суперпользователя.
Суперпользователи могут выполнять любые действия в любом месте своей системы. Однако каталоги, смонтированные по NFS, не являются частью системы, на которой они смонтированы, поэтому по умолчанию сервер NFS отказывается выполнять операции, требующие привилегий суперпользователя. Это ограничение по умолчанию означает, что суперпользователи на клиентской системе не могут записывать файлы как root, изменять владельца или выполнять другие задачи суперпользователя на монтированной NFS.
Иногда, однако, на клиентской системе есть доверенные пользователи, которым нужно выполнять эти действия в монтированной файловой системе, но которым не нужны привилегии суперпользователя на хосте. Вы можете настроить сервер NFS для разрешения этого, хотя это вносит элемент риска, поскольку такой пользователь может получить root-доступ ко всей системе хоста.
Пример 1: Экспорт общего монтирования
В первом примере вы создадите общее NFS-монтирование, используя поведение NFS по умолчанию, чтобы сделать сложнее для пользователя с привилегиями root на клиентской машине взаимодействовать с хостом, используя эти привилегии суперпользователя клиента. Вы можете использовать что-то подобное для хранения файлов, загруженных с использованием системы управления контентом, или для создания пространства для пользователей для обмена проектными файлами.
Сначала создайте общий каталог:
Поскольку вы создаете это с помощью sudo
, каталог принадлежит пользователю хоста root:
Outputtotal 8
drwxr-xr-x 2 root root 4096 Feb 7 23:21 .
drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..
NFS будет переводить любые операции root на клиенте на учетные данные nobody:nogroup
в качестве меры безопасности. Поэтому вам нужно изменить владение каталогом, чтобы соответствовать этим учетным данным:
Теперь вы готовы экспортировать этот каталог.
Пример 2: Экспорт домашнего каталога
В нашем втором примере целью является сделать домашние каталоги пользователей, хранящиеся на хосте, доступными на серверах клиента, позволяя доверенным администраторам этих клиентских серверов получить доступ, необходимый для удобного управления пользователями.
Для этого вы экспортируете каталог /home
. Поскольку он уже существует, вам не нужно его создавать. Вы не будете изменять разрешения. Если бы вы это сделали, это могло бы привести к ряду проблем для любого пользователя с домашним каталогом на машине хоста.
Шаг 3 — Настройка экспорта NFS на сервере хоста
Затем мы погрузимся в файл конфигурации NFS, чтобы настроить совместное использование этих ресурсов.
На хост-машине откройте файл /etc/exports
в выбранном вами текстовом редакторе с привилегиями root. Здесь мы будем использовать nano
:
В файле есть комментарии, показывающие общую структуру каждой строки конфигурации. Синтаксис следующий:
directory_to_share client(share_option1,...,share_optionN)
Вам нужно создать строку для каждого из каталогов, которые вы планируете совместно использовать. Поскольку нашему примеру клиента присвоен IP-адрес 203.0.113.24
, наши строки будут выглядеть следующим образом. Обязательно измените IP-адрес на 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.no_root_squash
отключает это поведение для определенных ресурсов.
После завершения внесения изменений сохраните и закройте файл. Если вы используете nano
, вы можете сделать это, нажав CTRL + X
, затем Y
и ENTER
. Затем, чтобы сделать ресурсы доступными для настроенных клиентов, перезапустите сервер NFS следующей командой:
Однако, прежде чем вы сможете фактически использовать новые ресурсы, убедитесь, что доступ к ним разрешен правилами брандмауэра.
Шаг 4 — Настройка брандмауэра на хосте
Сначала проверьте статус брандмауэра, чтобы убедиться, что он включен, и, если да, просмотрите, что в настоящее время разрешено:
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-адрес клиента:
Вы можете проверить изменение, выполнив следующее:
Вы должны получить список разрешенного трафика с порта 2049
в выводе:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
Это подтверждает, что UFW разрешит только трафик NFS на порту 2049
с вашей клиентской машины.
Шаг 5 — Создание точек монтирования и монтирование каталогов на клиенте
Теперь, когда сервер хост настроен и предоставляет свои ресурсы, вы подготовите свой клиент.
Чтобы сделать удаленные ресурсы доступными на клиенте, вам нужно смонтировать каталоги на хосте, которые вы хотите предоставить в пустые каталоги на клиенте.
Примечание: Если в вашей точке монтирования есть файлы и каталоги, они станут скрытыми сразу после монтирования NFS-раздела. Чтобы избежать потери важных файлов, убедитесь, что если вы монтируете в существующий каталог, то этот каталог пустой.
Создайте два каталога для ваших монтирований. Выполните следующую команду, чтобы создать первый::
Затем выполните эту команду, чтобы создать второй::
Теперь у вас есть место для размещения удаленных разделов, и вы открыли файрвол, вы можете монтировать разделы, используя IP-адрес вашего хоста сервера, который в этом руководстве равен 203.0.113.0
:
Эти команды смонтируют разделы с компьютера-хоста на клиентскую машину. Вы можете дважды проверить, что они успешно смонтированы несколькими способами. Вы можете проверить это с помощью команды mount
или findmnt
, но df -h
предоставляет более читаемый вывод, который показывает, как отображается использование диска для NFS-разделов:
OutputFilesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.6M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general
203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home
Оба смонтированных вами раздела отображаются внизу. Поскольку они были смонтированы из одной файловой системы, они показывают одно и то же использование диска. Чтобы проверить, сколько места фактически используется под каждой точкой монтирования, используйте команду использования диска du
и путь к монтированию. Флаг -s
предоставляет сводку использования вместо отображения использования для каждого файла. Флаг -h
выводит человекочитаемый вывод:
Output44K /nfs/home
Это показывает вам, что содержимое всего домашнего каталога использует всего 44 Кб доступного пространства.
Шаг 6 — Проверка доступа к NFS
Затем протестируйте доступ к общим ресурсам, записав что-то в каждый из них.
Пример 1: Общий ресурс общего назначения
Сначала создайте тестовый файл в общем ресурсе /var/nfs/general
:
Затем проверьте его владельца:
Output-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test
Поскольку вы смонтировали этот том, не изменяя поведение NFS по умолчанию, и создали файл от имени пользователя клиента как пользователь root с помощью команды sudo
, владельцем файла по умолчанию становится nobody:nogroup
. Суперпользователи клиента не смогут выполнять типичные административные действия, такие как изменение владельца файла или создание нового каталога для группы пользователей, в этом смонтированном через NFS общем ресурсе.
Пример 2: Общий ресурс домашнего каталога
Для сравнения разрешений общего ресурса общего назначения с общим ресурсом домашнего каталога создайте файл в /nfs/home
таким же образом:
Затем проверьте владение файлом:
Output-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test
Вы создали home.test
как root, используя команду sudo
, точно так же, как вы создали файл general.test
. Однако в этом случае он принадлежит root, потому что вы переопределили поведение по умолчанию, когда указали опцию no_root_squash
на этом монтировании. Это позволяет вашим пользователям root на машине клиента действовать как root и делает администрирование учетных записей пользователей намного более удобным. В то же время это означает, что вам не нужно предоставлять этим пользователям root доступ на хосте.
Шаг 7 — Монтирование удаленных NFS-каталогов при загрузке
Вы можете автоматически монтировать удаленные NFS-шары при загрузке, добавив их в файл /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 man
. Для этого выполните следующую команду:
Сервер клиент автоматически монтирует удаленные разделы при загрузке, хотя может потребоваться несколько моментов для установления соединения и доступности ресурсов.
Шаг 8 — Отключение удаленного NFS-раздела
Если вам больше не нужно монтировать удаленный каталог на вашей системе, вы можете его отключить, переместившись из структуры каталога ресурса и сняв монтирование.
Сначала перейдите в домашний каталог:
Затем снимите монтирование с /nfs/home
. Обратите внимание, что команда называется umount
, а не unmount
, как вы могли бы ожидать:
Затем снимите монтирование с /nfs/general
:
Это удалит удаленные ресурсы, оставив доступным только ваше локальное хранилище:
Output
Filesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.5M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
Если вы также хотите предотвратить их автоматическое монтирование при следующей загрузке, отредактируйте файл /etc/fstab
и либо удалите строку, либо закомментируйте ее, поставив символ #
в начале строки. Вы также можете предотвратить автоматическое монтирование, удалив опцию auto
, что позволит вам смонтировать его вручную.
Заключение
В этом руководстве вы создали хост NFS и проиллюстрировали некоторые ключевые поведения NFS, создав два различных монтирования NFS, которые вы совместно использовали с вашим NFS клиентом. Если вы планируете внедрить NFS в производственную среду, важно отметить, что сам протокол не зашифрован. В случае, когда вы обмениваетесь файлами внутри частной сети, это может не быть проблемой. В других случаях для защиты ваших данных потребуется использовать VPN или другой тип зашифрованного туннеля. Обратите внимание, что это часто приводит к значительному снижению производительности. Если производительность является проблемой, рассмотрите возможность использования SSHFS.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04