Поиск по сайту:

Как настроить монтирование NFS в Rocky Linux 8


Введение

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

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

Предпосылки

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

  • Два сервера Rocky Linux 8. У каждого из них должен быть пользователь без полномочий root с привилегиями sudo, брандмауэр, настроенный с помощью UFW, и частная сеть, если она вам доступна.
    • Чтобы получить помощь в настройке пользователя без полномочий root с привилегиями sudo и брандмауэра, следуйте нашему руководству Initial Server Setup with Rocky Linux 8.
    • Если вы используете дроплеты DigitalOcean для своего сервера и клиента, вы можете узнать больше о настройке частной сети в нашей документации о том, как создать VPC.

    В этом руководстве сервер, который совместно использует свои каталоги, будет называться хостом, а сервер, который монтирует эти каталоги, — клиентом. Вам нужно будет знать IP-адрес для обоих. Обязательно используйте частный сетевой адрес, если он доступен.

    В этом руководстве эти IP-адреса будут обозначаться заполнителями host_ip и client_ip. Пожалуйста, замените по мере необходимости.

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

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

    На хосте

    На хост-сервере используйте диспетчер пакетов dnf для установки пакета nfs-utils, который позволит вам совместно использовать ваши каталоги:

    1. sudo dnf install nfs-utils

    После установки этих пакетов переключитесь на клиент-сервер.

    На клиенте

    На клиентском сервере необходимо установить тот же пакет nfs-utils:

    1. sudo dnf install nfs-utils

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

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

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

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

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

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

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

    Сначала создайте общий каталог (используя параметр -p команды mkdir, который при необходимости создаст полный путь к файлу):

    1. sudo mkdir /var/nfs/general -p

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

    1. ls -dl /var/nfs/general
    Output
    drwxr-xr-x 2 root root 4096 Apr 17 23:51 /var/nfs/general

    NFS транслирует любые корневые операции на клиенте пользователю nobody в качестве меры безопасности. Поэтому вам нужно изменить владельца каталога на nobody:

    1. sudo chown nobody /var/nfs/general

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

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

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

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

    Шаг 3 — Настройка экспорта NFS на хост-сервере

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

    Текстовый редактор по умолчанию, поставляемый с Rocky Linux 9, называется vi. vi — чрезвычайно мощный текстовый редактор, но он может быть несколько бестолковым для пользователей, не имеющих опыта работы с ним. Возможно, вы захотите установить более удобный редактор, такой как nano, чтобы упростить редактирование файлов конфигурации на вашем сервере Rocky Linux 8:

    1. sudo dnf install nano

    На хост-компьютере откройте файл /etc/exports в nano или в вашем любимом текстовом редакторе с привилегиями root:

    1. sudo nano /etc/exports

    В Rocky Linux 8 этот файл по умолчанию будет пустым. Это синтаксис, который вам нужно создать:

    directory_to_share    client(share_option1,...,share_optionN)
    

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

    /var/nfs/general    client_ip(rw,sync,no_subtree_check)
    /home               client_ip(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 и включите его автоматический запуск с помощью systemctl:

    1. sudo systemctl enable nfs-server
    2. sudo systemctl start nfs-server

    Убедитесь, что служба запущена, используя systemctl status:

    1. sudo systemctl status nfs-server
    Output
    ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: > Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Mon 2022-08-08 17:41:18 UTC; 4s ago Process: 14348 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemct> Process: 14336 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 14335 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 14348 (code=exited, status=0/SUCCESS) Aug 08 17:41:18 rocky8-nfs-host systemd[1]: Starting NFS server and services... Aug 08 17:41:18 rocky8-nfs-host systemd[1]: Started NFS server and services.

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

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

    Если вы используете брандмауэр firewalld, как рекомендовано в нашем руководстве по начальной настройке сервера с Rocky Linux 8, проверьте, какие службы в настоящее время разрешены в строке services выходных данных брандмауэр-cmd:

    1. firewall-cmd --permanent --list-all | grep services
    Output
    services: cockpit dhcpv6-client ssh

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

    1. firewall-cmd --permanent --add-service=nfs
    2. firewall-cmd --permanent --add-service=mountd
    3. firewall-cmd --permanent --add-service=rpc-bind
    4. firewall-cmd --reload

    Вы можете убедиться, что они были добавлены:

    1. firewall-cmd --permanent --list-all | grep services
    Output
    services: cockpit dhcpv6-client mountd nfs rpc-bind ssh

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

    Шаг 5 — Создание точек монтирования и каталогов монтирования на клиенте

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

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

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

    Вы создадите два каталога для ваших ездовых животных:

    1. sudo mkdir -p /nfs/general
    2. sudo mkdir -p /nfs/home

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

    1. sudo mount host_ip:/var/nfs/general /nfs/general
    2. sudo mount host_ip:/home /nfs/home

    Эти команды смонтируют общие ресурсы с хост-компьютера на клиентский компьютер. Вы можете перепроверить их успешность несколькими способами. Вы можете проверить это с помощью команды mount или findmnt, но df -h обеспечивает более читаемый вывод:

    1. df -h
    Output
    Filesystem Size Used Avail Use% Mounted on Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 11M 394M 3% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 1.5G 24G 6% / tmpfs 81M 0 81M 0% /run/user/0 host_ip:/var/nfs/general 25G 1.6G 24G 7% /nfs/general host_ip:/home 25G 1.6G 24G 7% /nfs/home

    Обе папки, которые вы установили, отображаются внизу. Поскольку они были смонтированы из одной и той же файловой системы, они показывают одинаковое использование диска.

    Шаг 6 — Проверка доступа к NFS

    Затем проверьте доступ к общим ресурсам, написав что-нибудь в каждый из них.

    Пример 1: Общий ресурс общего назначения

    Сначала запишите тестовый файл в общий ресурс /var/nfs/general:

    1. sudo touch /nfs/general/general.test

    Затем проверьте его право собственности:

    1. ls -l /nfs/general/general.test
    Output
    -rw-r--r--. 1 nobody nobody 0 Aug 8 18:24 /nfs/general/general.test

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

    Пример 2: общий ресурс домашнего каталога

    Чтобы сравнить разрешения общего ресурса общего назначения с общим ресурсом домашнего каталога, создайте файл в /nfs/home таким же образом:

    1. sudo touch /nfs/home/home.test

    Затем посмотрите на право собственности на файл:

    1. ls -l /nfs/home/home.test
    Output
    -rw-r--r--. 1 root root 0 Aug 8 18:26 /nfs/home/home.test

    Вы создали home.test от имени пользователя root с помощью команды sudo точно так же, как вы создали файл general.test. Однако в этом случае он принадлежит пользователю root, потому что вы переопределили поведение по умолчанию, когда указали параметр no_root_squash для этого монтирования. Это позволяет вашим корневым пользователям на клиентском компьютере действовать как root и делает администрирование учетных записей пользователей намного более удобным. В то же время это означает, что вам не нужно предоставлять этим пользователям root-доступ на хосте.

    Шаг 7 — Монтирование удаленных каталогов NFS при загрузке

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

    Откройте /etc/fstab с привилегиями root в текстовом редакторе:

    1. sudo nano /etc/fstab

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

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

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

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

    Шаг 8 — Отключение удаленного общего ресурса NFS

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

    1. cd ~
    2. sudo umount /nfs/home
    3. sudo umount /nfs/general

    Обратите внимание, что команда называется umount, а не unmount, как вы могли ожидать.

    Это удалит удаленные общие ресурсы, оставив доступным только ваше локальное хранилище:

    1. df -h
    Output
    Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 11M 394M 3% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 1.5G 24G 6% / tmpfs 81M 0 81M 0% /run/user/0

    Если вы также хотите предотвратить их перемонтирование при следующей перезагрузке, отредактируйте /etc/fstab и либо удалите строку, либо закомментируйте ее, поместив символ # в конец начало строки. Вы также можете предотвратить автоматическое монтирование, удалив параметр auto, что позволит вам по-прежнему монтировать его вручную.

    Заключение

    В этом руководстве вы создали хост NFS и проиллюстрировали некоторые основные функции NFS, создав два разных монтирования NFS, которыми вы поделились с клиентом NFS.

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