Монтирование 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
