Монтирование NFS на сервере Ubuntu 18.04 LTS
03.03.2020
Теги: CLI • Linux • Ubuntu • Конфигурация • ЛокальнаяСеть • Настройка • Сервер • Установка • Файл
NFS позволяет системе предоставлять в общее пользование каталоги и файлы другим системам через сеть. С помощью NFS пользователи и программы могут получить доступ к файлам на удаленной системе так же, как если бы они были локальными файлами.
Нам потребуются две виртуальные машины:
nfs-client
, ip-адрес192.168.30.20
— которая будет клиентомnfs-server
, ip-адрес192.168.30.21
— которая будет сервером
Установка компонентов
На виртуальную машину nfs-server
устанавливаем пакет nfs-kernel-server
:
$ sudo apt install nfs-kernel-server
На виртуальную машину nfs-client
устанавливаем пакет nfs-common
:
$ sudo apt install nfs-common
Создание каталога на сервере
На виртуальной машине nfs-server
создаем каталог:
$ sudo mkdir -p /srv/nfs/common
Поскольку каталог создан с помощью команды sudo
, он принадлежит пользователю root
. Но NFS переведёт все операции root
клиента в nobody:nogroup
в целях безопасности. Во избежание конфликта нужно изменить права на каталог:
$ sudo chown nobody:nogroup /srv/nfs/common
Предоставим всем право записи в этот каталог:
$ sudo chmod a+w /srv/nfs/common
Экспорт каталога на сервере
Каталог готов, теперь можно его экспортировать
$ sudo nano /etc/exports
# /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /srv/nfs/common 192.168.30.20(rw,sync,no_subtree_check) /home 192.168.30.20(rw,sync,no_root_squash,no_subtree_check)
$ sudo systemctl restart nfs-kernel-server
Параметры обоих каталогов почти одинаковы, за исключением no_root_squash
, который присутствует только в настройках домашнего каталога. Домашний каталог добавлен с целью посмотреть, как доверенные пользователи nfs-client
могут получить права суперпользователя.
- Параметр
rw
устанавливает права клиента на чтение и изменение каталога. - Параметр
sync
синхронизирует каталоги по NFS, что обеспечивает согласовние содержимого, но замедляет скорость выполнения операций. - Параметр
no_subtree_check
предотвращает проверку поддерева, это рекомендуется сделать в большинстве случаев. - Параметр
no_root_squash
— по умолчанию NFS транслирует запросы от пользователяroot
клиента пользователюnoboby
сервера, благодаря чему пользовательroot
клиента не может использовать файловую систему хоста с теми же привилегиями. Данная директива блокирует эту функцию безопасности.
Правила для файервола на сервере
Теперь проверим состояние файервола:
$ sudo ufw status Status: active
Разрешим соединения с хоста 192.168.30.20
на порту 2049
:
$ sudo ufw allow in from 192.168.30.20 to any port nfs
$ sudo ufw status Status: active To Action From ---------------------------------------------------- 2049 ALLOW 192.168.30.20
Создание точек монтирования на клиенте
Итак, сервер настроен и подготовлен к совместному использованию каталогов с клиентом. Теперь нужно создать несколько точек монтирования и смонтировать удалённые каталоги.
Создаем каталоги, куда будем монтировать:
$ sudo mkdir /mnt/nfs $ sudo mkdir /mnt/nfs/common $ sudo mkdir /mnt/nfs/home
Монтирование удаленных каталогов на клиенте
Монтируем удаленные каталоги:
$ sudo mount 192.168.30.21:/srv/nfs/common /mnt/nfs/common $ sudo mount 192.168.30.21:/home /mnt/nfs/home
Доступ к каталогу common
Давайте на клиенте от имени root
создадим файл test.txt
в директории /mnt/nfs/common
:
$ sudo nano /mnt/nfs/common/test.txt
some content
И посмотрим права на этот файл:
$ ls -la /mnt/nfs/common total 12 drwxrwxrwx 2 nobody nogroup 4096 мар 4 13:55 . drwxr-xr-x 4 root root 4096 мар 4 12:37 .. -rw-r--r-- 1 nobody nogroup 13 мар 4 13:54 test.txt
Поскольку этот каталог был смонтирован со стандартным поведением NFS, а тестовый файл принадлежит пользователю root
, в расшаренном каталоге права на файл изменятся на nobody:nogroup
. Суперпользователь клиента не сможет выполнять задачи администратора (изменять привилегии, создавать каталоги для пользователей и групп и т.п.).
Доступ к каталогу home
Теперь на клиенте от имени root
создадим файл test.txt
в директории /mnt/nfs/home
:
$ sudo nano /mnt/nfs/home/test.txt
some content
И посмотрим права на этот файл:
$ ls -la /mnt/nfs/home total 16 drwxr-xr-x 3 root root 4096 мар 4 14:01 . drwxr-xr-x 4 root root 4096 мар 4 12:37 .. drwxr-xr-x 9 evgeniy evgeniy 4096 мар 2 10:59 evgeniy -rw-r--r-- 1 root root 13 мар 4 14:01 test.txt
При монтировании этого каталога поведение NFS по умолчанию было изменено с помощью параметра no_root_squash
. Благодаря этому суперпользователь клиента сохраняет свои привилегии.
Размонтирование удаленных каталогов на клиенте
Для этого достаточно выполнить команды:
$ cd ~ $ sudo umount /mnt/nfs/common $ sudo umount /mnt/nfs/home
Монтирование NFS при загрузке клиента
Если удаленные каталоги на клиенте нужны постоянно, удобно монтировать их сразу при загрузке системы:
$ sudo nano /etc/fstab
192.168.30.21:/srv/nfs/common /mnt/nfs/common nfs auto,nofail,noatime,intr,tcp,actimeo=3600 0 0 192.168.30.21:/home /mnt/nfs/home nfs auto,nofail,noatime,intr,tcp,actimeo=3600 0 0
Опции монтирования:
auto
— файловая система будет смонтирована автоматически при загрузкеnofail
— предотвращает появление ошибок, если NFS-сервер недоступенnoatime
— не обновлять информацию о времени доступа к файловой системеintr
— прерывать файловые операции, если NFS-сервер долго не отвечаетtcp
— для монтирования использовать протокол TCP, а не стандартный UDPactimeo
— время кэширования атрибутов файлов и каталогов в секундах
Доступ к NFS-серверу за NAT
Наш NFS-сервер расположен во внутренней сети 192.168.30.0/24
и имеет ip-адрес 192.168.30.21
. Выход в интернет для компьютеров сети 192.168.30.0/24
обеспечивает маршрутизатор с двумя сетевыми интерфейсами. Интерфейс enp0s3
смотрит во внешнюю сеть и имеет ip-адрес 192.168.110.8
. Интерфейс enp0s8
смотрит во внутреннюю сеть и имеет ip-адрес 192.168.30.3
. Выглядит это примерно так (все компьютеры, кроме одного, виртуальные)
Чтобы обеспечить доступ к NFS-серверу из сети 192.168.110.0/24
, выполняем на маршрутизаторе команды:
$ sudo iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 2049 -j DNAT --to-destination 192.168.30.21 $ sudo iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 2049 -j DNAT --to-destination 192.168.30.21 $ sudo iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 111 -j DNAT --to-destination 192.168.30.21 $ sudo iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 111 -j DNAT --to-destination 192.168.30.21
И сохраняем эти правила, чтобы они применились после перезагрузки (должен быть установлен пакет iptables-persistent
):
$ sudo iptables-save > /etc/iptables/rules.v4
На виртуальной машине nfs-server
редактируем файл /etc/exports
:
$ sudo nano /etc/exports
/srv/nfs/common 192.168.30.0/24(rw,sync,no_subtree_check) 192.168.110.12(rw,sync,no_subtree_check) /home 192.168.30.0/24(rw,sync,no_subtree_check) 192.168.110.12(rw,sync,no_subtree_check)
$ sudo systemctl restart nfs-kernel-server
А на виртуальной машине nfs-server
изменяем настройки файервола:
$ sudo ufw delete allow in from 192.168.30.20 to any port nfs
$ sudo ufw allow in from 192.168.30.0/24 to any port nfs $ sudo ufw allow in from 192.168.110.12 to any port nfs
$ sudo ufw status Status: active To Action From ------------------------------------------------------ 2049 ALLOW 192.168.30.0/24 2049 ALLOW 192.168.110.12
Теперь монтировать удаленные каталоги может хост 192.168.110.12
и все хосты из сети 192.168.30.0/24
.
- Установка DHCP-сервера на Ubuntu Server 18.04 LTS
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 8 из 12
Поиск: CLI • Linux • Ubuntu • Конфигурация • Локальная сеть • Настройка • Сервер • Установка • Файл • NFS • ufw • Файервол • NAT • iptables