.
Введение
Сетевая файловая система (NFS) — это протокол распределенной файловой системы, который позволяет совместно использовать удаленные каталоги по сети. С помощью NFS вы можете монтировать удаленные каталоги в своей системе и работать с файлами на удаленном компьютере, как если бы они были локальными файлами.
Протокол NFS по умолчанию не зашифрован и, в отличие от Samba, не обеспечивает аутентификацию пользователя. Доступ к серверу ограничен IP-адресами клиентов или именами хостов.
В этом руководстве мы увидим, как настроить сервер NFSv4 на Ubuntu 18.04 Bionic Beaver. Мы также покажем вам, как смонтировать файловую систему NFS на клиенте.
Предпосылки
В этом примере предполагается, что у вас есть один сервер с Ubuntu 18.04, а другой — с любым другим дистрибутивом Linux. Сервер и клиенты должны иметь возможность общаться друг с другом через частную сеть. Если ваш хостинг-провайдер не предлагает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр сервера, чтобы разрешить трафик через порт 2049
только из надежных источников.
Машины в этом примере имеют следующие IP-адреса:
NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range
Установите NFS-сервер
Обновите индекс пакета и установите пакет сервера NFS:
sudo apt update
sudo apt install nfs-kernel-server
После завершения установки службы NFS запустятся автоматически.
По умолчанию в Ubuntu 18.04 NFS версии 2 отключен. Версии 3 и 4 включены. Вы можете проверить это, выполнив следующую команду cat
:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 уже устарел, и нет причин его включать.
Параметры конфигурации сервера NFS задаются в файлах /etc/default/nfs-kernel-server
и /etc/default/nfs-common
. В нашем случае достаточно настроек по умолчанию.
Создайте файловые системы
При настройке сервера NFSv4 рекомендуется использовать глобальный корневой каталог NFS и сопоставлять фактические каталоги с общей точкой монтирования. В этом примере мы будем использовать директорию /srv/nfs4
в качестве корня NFS.
Мы поделимся двумя каталогами ( /var/www
и /opt/backups
) с разными настройками конфигурации, чтобы лучше объяснить, как можно настроить монтирование NFS.
/var/www/
принадлежит пользователю и группе www-data
, а /opt/backups
принадлежит пользователю root
.
Создайте файловую систему экспорта с помощью команды mkdir
:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
Смонтируйте актуальные каталоги:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
Чтобы сделать монтирования привязок постоянными, откройте /etc/fstab
:
sudo nano /etc/fstab
Добавьте следующие строки:
/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
Сохраните и закройте файл.
Экспорт файловых систем
Следующим шагом является определение файловых систем, которые будут экспортированы с сервера NFS, параметров общего доступа и клиентов, которым разрешен доступ к этим файловым системам. Для этого откройте /etc/exports
:
sudo nano /etc/exports
Файл /etc/exports
также содержит комментарии, описывающие, как экспортировать каталог.
В нашем случае нам нужно экспортировать каталоги www
и backups
и разрешить доступ только с сетевого клиента 192.168.33.0/24
:
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 192.168.33.110(rw,sync,no_subtree_check)
Первая строка содержит fsid=0
, которая определяет корневую директорию NFS /srv/nfs
. Доступ к этому тому NFS разрешен только клиентам из подсети 192.168.33.0/24
. Параметр crossmnt
необходим для совместного использования каталогов, которые являются подкаталогами экспортируемого каталога.
Во второй строке показано, как указать несколько правил экспорта для файловой системы. Экспортирует /srv/nfs4/backups
, который разрешает доступ только для чтения ко всему диапазону 192.168.33.0/24
и доступ для чтения и записи к 192.168.33.3
. Параметр sync
указывает NFS записать изменения на диск перед ответом.
Последняя строка должна быть понятной. Для получения дополнительной информации обо всех доступных параметрах введите man exports
в своем терминале.
Сохраните файл и экспортируйте общие ресурсы:
sudo exportfs -ra
Вы должны запускать приведенную выше команду каждый раз, когда вы изменяете /etc/exports
. В случае ошибок или предупреждений они будут отображаться на терминале.
Чтобы просмотреть текущие активные экспорты и их статус, используйте:
sudo exportfs -v
Вывод будет включать все акции с их параметрами. Как видите, в /etc/exports
также есть параметры, которые мы не определили. Это параметры по умолчанию, и если вы хотите их изменить, вам необходимо явно установить эти параметры.
/srv/nfs4/backups
192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 192.168.33.110(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
В Ubuntu root_squash
включен по умолчанию. Это один из самых важных параметров безопасности NFS. Запрещает пользователям root, вошедшим в систему с клиентов, иметь привилегии root на подключенных общих ресурсах. Он сопоставит корневой UID
и GID
с nobody
/nogroup
UID
/GID
.
Чтобы пользователи клиентских компьютеров имели доступ, NFS ожидает, что идентификаторы пользователя и группы клиента будут соответствовать идентификаторам на сервере. Другой вариант — использовать функцию сопоставления идентификаторов NFSv4, которая переводит идентификаторы пользователей и групп в имена и наоборот.
Это все. На этом этапе вы настроили сервер NFS на своем сервере Ubuntu. Теперь вы можете перейти к следующему шагу и настроить клиентов и подключиться к серверу NFS.
Настроить брандмауэр
Если вы используете брандмауэр в своей сети, вам нужно будет добавить правило, разрешающее трафик через порт NFS.
Предполагая, что вы используете UFW
для управления брандмауэром, чтобы разрешить доступ из подсети 192.168.33.0/24
, вам необходимо выполнить следующую команду:
sudo ufw allow from 192.168.33.0/24 to any port nfs
Чтобы убедиться, что изменение было внесено:
sudo ufw status
Вывод должен показать, что трафик через порт 2049
разрешен:
To Action From
-- ------ ----
2049 ALLOW 192.168.33.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Настройка клиентов NFS
Теперь, когда сервер NFS настроен и общие ресурсы экспортированы, следующим шагом будет настройка клиентов и монтирование удаленных файловых систем.
Вы также можете смонтировать общий ресурс NFS на компьютерах с macOS и Windows, но мы сосредоточимся на системах Linux.
Установка NFS-клиента
На клиентских компьютерах необходимо установить только инструменты, необходимые для монтирования удаленной файловой системы NFS.
Установите клиент NFS на Debian и Ubuntu
Имя пакета, в который входят программы для монтирования файловых систем NFS в дистрибутивах на основе Debian, — nfs-common
. Чтобы установить его, выполните:
sudo apt update
sudo apt install nfs-common
Установите клиент NFS на CentOS и Fedora.
В Red Hat и ее производных установите пакет nfs-utils
:
sudo yum install nfs-utils
Монтирование файловых систем
Мы будем работать на клиентском компьютере с IP 192.168.33.110
, который имеет доступ на чтение и запись к файловой системе /srv/nfs4/www
и доступ только на чтение к файловой системе /srv/nfs4/backups
.
Создайте два новых каталога для точек монтирования. Вы можете создать эти каталоги в любом желаемом месте.
sudo mkdir -p /backups
sudo mkdir -p /srv/www
Смонтируйте экспортированные файловые системы с помощью команды mount
:
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
Где 192.168.33.10
— это IP-адрес NFS-сервера. Вы также можете использовать имя хоста вместо IP-адреса, но оно должно разрешаться клиентским компьютером. Обычно это делается путем сопоставления имени хоста с IP-адресом в /etc/hosts
.
При монтировании файловой системы NFSv4 вам нужно опустить корневой каталог NFS, поэтому вместо /srv/nfs4/backups
используйте /backups
backups.
Убедитесь, что удаленные файловые системы правильно смонтированы с помощью команды df
или mount:
df -h
Команда напечатает все смонтированные файловые системы. Последние две строки — это смонтированные общие ресурсы:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 38G 1.7G 36G 5% /devtmpfs 236M 0 236M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.5M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
/dev/sda2 1014M 87M 928M 9% /boot
tmpfs 49M 0 49M 0% /run/user/1000
192.168.33.10:/backups 9.7G 1.2G 8.5G 13% /backups
192.168.33.10:/www 9.7G 1.2G 8.5G 13% /srv/www
Чтобы сделать монтирования постоянными при перезагрузке, откройте /etc/fstab
:
sudo nano /etc/fstab
Добавьте следующие строки:
192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
Сохраните и закройте файл.
Для получения дополнительной информации о параметрах, доступных при монтировании файловой системы NFS, введите в терминале man nfs
.
Другой вариант монтирования удаленных файловых систем — использовать инструмент autofs
или создать диск systemd.
Тест доступа NFS
Проверим доступ к общим ресурсам , создав для каждого из них новый файл.
Для начала попробуйте создать тестовый файл в каталоге /backups
с помощью команды touch
:
sudo touch /backups/test.txt
Файловая система /backup
экспортируется как доступная только для чтения, и, как и ожидалось, будет отображаться сообщение об ошибке « Permission denied
в доступе»:
touch: cannot touch '/backups/test': Permission denied
Затем попробуйте создать тестовый файл в каталоге /srv/www
от имени пользователя root с помощью команды sudo
:
sudo touch /srv/www/test.txt
Вы снова увидите сообщение об Permission denied
в доступе.
touch: cannot touch '/srv/www': Permission denied
Если вы помните, каталог /var/www
принадлежит пользователям www-data
, а общий ресурс имеет установленную опцию root_squash
, которая сопоставляет пользователя root с пользователем nobody
и с группой nogroup
, у которой нет прав на запись в удаленный общий ресурс.
Предполагая, что у вас есть пользователь www-data
на клиентском компьютере с тем же UID
и GID
на удаленном сервере (что должно быть в том случае, если, например, у вас установлен nginx на обоих компьютерах), вы можете протестировать создание файла как www-data
с помощью следующей команды:
sudo -u www-data touch /srv/www/test.txt
Команда не покажет никаких результатов, что означает, что файл был успешно создан.
Чтобы это проверить, перечислите файлы в каталоге /srv/www
:
ls -la /srv/www
Вывод должен показать только что созданный файл:
drwxr-xr-x 3 www-data www-data 4096 Jun 23 22:18.
drwxr-xr-x 3 root root 4096 Jun 23 22:29..
-rw-r--r-- 1 www-data www-data 0 Jun 23 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Jun 23 22:18 test.txt
Размонтирование файловой системы NFS
Если вам больше не нужен удаленный общий ресурс NFS, вы можете размонтировать его, как и любую другую смонтированную файловую систему, с помощью команды umount. Например, чтобы размонтировать общий ресурс /backup
, вы сделаете:
sudo umount /backups
Если точка монтирования определена в /etc/fstab
, обязательно удалите строку или закомментируйте ее, добавив #
в начало строки.
Вывод
В этом руководстве мы показали вам, как настроить сервер NFS и как монтировать удаленные файловые системы на клиентских компьютерах. Если вы внедряете NFS в производство и обмениваетесь конфиденциальными данными, рекомендуется включить аутентификацию Kerberos.
В качестве альтернативы NFS можно использовать SSHFS для монтирования удаленных каталогов через соединение SSH. SSHFS зашифрован по умолчанию, и его намного проще настроить и использовать.