Как установить клиент и сервер NFS в Ubuntu 20.04
Это руководство существует для этих версий ОС
- Ubuntu 10.04 (Lucid Lynx)
На этой странице
- Предпосылки
- Шаг 1. Установите NFS на сервере и клиенте
- Хост
- Клиент
- Первый метод
- Второй метод
Сетевая файловая система или сокращенно NFS — это протокол распределенной файловой системы, который позволяет вам монтировать удаленные каталоги на вашем сервере. NFS позволяет вам получать доступ к файлам и папкам с другого сервера или клиента. Вы можете писать на этот сервер с нескольких клиентов или удаленных систем по сети. Эта технология обеспечивает гибкость совместного использования ресурса несколькими системами.
В этом руководстве мы узнаем, как настроить сервер NFS и как смонтировать общие ресурсы NFS на клиенте с помощью Ubuntu 20.04.
Предпосылки
- Две системы Ubuntu 20.04. На каждом сервере должен быть пользователь без полномочий root с привилегиями sudo и установленным брандмауэром UFW.
- Вы можете настроить сервер и клиент в частной сети. В нашем руководстве я буду использовать host_ip для обозначения адреса host_ip и client_ip для обозначения IP-адреса клиента.
Шаг 1. Установите NFS на сервере и клиенте.
Хозяин
Нам нужно установить пакет
nfs-kernel-server
на хост, чтобы поделиться вашими каталогами.$ sudo apt update $ sudo apt install nfs-kernel-server
Клиент
Для клиента мы установим пакет
nfs-common
, который позволяет клиенту монтировать каталог хоста, но не может размещать сам каталог.$ sudo apt update $ sudo apt install nfs-common
Шаг 2. Создайте общие каталоги на хосте.
Есть два способа предоставить клиенту доступ к каталогам на хосте. По умолчанию сервер NFS не разрешает операции, требующие привилегий sudo. Это означает, что суперпользователи на клиенте не могут записывать файлы как root, переназначать права собственности или выполнять любые задачи, требующие повышенных привилегий.
Но иногда клиенту необходимо выполнить определенные операции на хосте, для которых требуются повышенные привилегии, но для этого не требуется доступ суперпользователя.
Первый метод
Это стандартный способ совместного использования каталогов. Это затрудняет взаимодействие пользователя root на клиенте с хостом с повышенными привилегиями.
Сначала создайте общий каталог.
$ sudo mkdir /var/nfs/general -p
Если вы выполняете какие-либо корневые операции на клиенте, то NFS преобразует их в учетные данные
nobody:nogroup
на хост-компьютере. Следовательно, нам необходимо предоставить соответствующее право собственности на общий каталог.$ sudo chown nobody:nogroup /var/nfs/general
Второй метод
Здесь мы поделимся домашним каталогом хоста с клиентом. Это позволит root-пользователям на клиенте получить правильный доступ к хосту.
Поскольку домашний каталог уже существует на хост-сервере, нам не нужно его создавать. Также нет необходимости изменять разрешения для него, поскольку это создаст множество проблем для пользователей на хост-компьютере.
Шаг 3. Настройте NFS на хосте.
Пришло время настроить NFS для настройки общего доступа.
Откройте файл
/etc/exports
на хост-сервере.$ sudo nano /etc/exports
Добавьте следующие строки внизу, по одной для каждого общего каталога.
/var/nfs/general client_ip(rw,sync,no_subtree_check) /home client_ip(rw,sync,no_root_squash,no_subtree_check)
Давайте рассмотрим все эти варианты и их значение.
- rw: Это дает клиенту доступ для чтения и записи в каталогах хоста.
- синхронизация: этот параметр заставляет NFS записывать изменения перед ответом. Это означает, что NFS сначала завершит запись в каталог узла, а затем ответит клиенту. Это гарантирует отражение фактического состояния хост-сервера, но может снизить скорость файловых операций.
- no_subtree_check: этот параметр отключает проверку поддерева. Проверка поддерева — это операция, при которой при каждом запросе NFS сервер должен проверять наличие файла, к которому осуществляется доступ, и его присутствие в экспортируемом дереве. Эта операция вызывает проблемы, когда файлы, к которым обращается клиент, переименовываются. Поэтому в большинстве случаев лучше оставить его отключенным. Это имеет некоторые незначительные последствия для безопасности, но может повысить надежность.
- no_root_squash: по умолчанию NFS транслирует все операции, выполняемые клиентом от имени пользователя root, непривилегированному пользователю на сервере. Это сделано с целью повышения безопасности. Этот параметр отключает такое поведение для определенных общих ресурсов.
Когда вы закончите, закройте файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите сервер NFS, чтобы изменения вступили в силу.
$ sudo systemctl restart nfs-kernel-server
Шаг 4. Настройте хост-брандмауэр
Лучшей практикой с NFS является включение его специально для каждого IP-адреса клиента отдельно, вместо того, чтобы разрешать доступ к нему отовсюду.
NFS использует порт 2049. Включите доступ для NFS с помощью следующей команды.
$ sudo ufw allow from client_ip to any port nfs
Проверьте статус, чтобы убедиться.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 167.100.34.78 OpenSSH (v6) ALLOW Anywhere (v6)
Шаг 5 — Создайте точки монтирования на клиенте
Теперь, когда наш хост настроен, пришло время настроить клиент.
Создайте две директории для монтирования на клиенте.
$ sudo mkdir -p /nfs/general $ sudo mkdir -p /nfs/home
Теперь, когда мы установили все на стороне хоста, мы можем смонтировать общие ресурсы, используя IP-адрес хоста.
$ sudo mount host_ip:/var/nfs/general /nfs/general $ sudo mount host_ip:/home /nfs/home
Вы можете проверить, успешно ли они были смонтированы, с помощью следующей команды.
$ df -h Filesystem Size Used Avail Use% Mounted on udev 448M 0 448M 0% /dev tmpfs 99M 664K 98M 1% /run /dev/vda1 25G 3.2G 21G 14% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup tmpfs 99M 0 99M 0% /run/user/1000 123.175.112.87:/var/nfs/general 25G 18G 6.3G 74% /nfs/general 123.175.112.87:/home 25G 18G 6.3G 74% /nfs/home
Вы можете увидеть обе подключенные папки в нижней части списка. Поскольку оба они были смонтированы из одной и той же файловой системы, они показывают полное использование диска, а не фактическое использование смонтированных каталогов.
Чтобы увидеть, сколько фактического пространства используется под каждым креплением, используйте следующую команду.
$ du -sh /nfs/general 36K /nfs/general
Шаг 6. Проверка совместного использования NFS
Создайте тестовый файл в общей папке
/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
. Здесь пользователь-клиент не может выполнять административные задания на хост-компьютере.Создайте тестовый файл в папке /nfs/home\\.
$ 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
Здесь, поскольку мы создали тестовый файл с использованием root на клиентской машине, право собственности было сохранено на хост-компьютере. Это было связано с тем, что мы использовали флаг
no_root_squash
, который разрешал пользователю root на клиентском компьютере также быть пользователем root на хост-компьютере.Шаг 7. Смонтируйте общие ресурсы NFS во время загрузки
Эти монтирования не будут сохранены после загрузки клиентской машины. Чтобы сделать их постоянными, нам нужно отредактировать файл
/etc/fstab
.Откройте файл
/etc/fstab
для редактирования.$ 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
.$ man nfs
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезагрузите сервер, чтобы проверить монтирование.
$ sudo reboot
Войдите в клиент-сервер и убедитесь, что монтирования присутствуют.
$ df -h Filesystem Size Used Avail Use% Mounted on udev 448M 0 448M 0% /dev tmpfs 99M 664K 98M 1% /run /dev/vda1 25G 3.2G 21G 14% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup tmpfs 99M 0 99M 0% /run/user/1000 123.175.112.87:/var/nfs/general 25G 18G 6.3G 74% /nfs/general 123.175.112.87:/home 25G 18G 6.3G 74% /nfs/home
Шаг 8. Размонтируйте общие ресурсы NFS
Если вам больше не нужны монтирования NFS, вы можете размонтировать их с помощью следующей команды.
$ sudo umount /nfs/home $ sudo umount /nfs/general
Распространенной ошибкой является использование
unmount
вместоumount
, что является фактической командой.Убедитесь, что они правильно размонтированы.
$ df -h Filesystem Size Used Avail Use% Mounted on udev 448M 0 448M 0% /dev tmpfs 99M 664K 98M 1% /run /dev/vda1 25G 3.2G 21G 14% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup tmpfs 99M 0 99M 0% /run/user/1000
Вам также потребуется удалить их записи из файла
/etc/fstab
, чтобы они не переустанавливались при загрузке. Вы также можете просто раскомментировать их записи, поместив перед ними символ#
на тот случай, если вам понадобится снова использовать крепления.Заключение
На этом мы завершаем наше руководство, в котором мы узнали, как создавать монтирования NFS на хост-компьютере и как получать к ним доступ с разных клиентских компьютеров. Если у вас есть какие-либо вопросы, пишите их в комментариях ниже.