Nfs share — различия между версиями

Материал из pNp Wiki
Перейти к: навигация, поиск
(Новая страница: «== Конфигурирование NFS == ==== Предварительные требования ==== * Виртуальная машина с двумя се…»)
 
 
(не показаны 2 промежуточные версии этого же участника)
Строка 6: Строка 6:
  
 
== Конфигурирование сетевой директории ==
 
== Конфигурирование сетевой директории ==
Для включения
+
Для развертывания <code>NFS</code> необходимые утилиты и демоны включены в пакет <code>nfs-utils</code>. Файл <code>/etc/sysconfig/nfs</code> необходим для настроек параметров демона <code>rpc.nfsd</code>.
 
+
В данном файле необходимо указать версию протокола <code>NFS</code> - 4.1. Приводим файл <code>/etc/sysconfig/nfs</code> к следующему виду:
<code>/content</code>. Скопируем пример из документации в качестве "рыбы" для нашего будущего виртуального хоста, затем создадим директорию и присвоем ей контекст <code>SELinux</code>:
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
+
[root@vm-01 ~]# cat /etc/sysconfig/nfs
 +
#
 +
# Optinal options passed to rquotad
 +
RPCRQUOTADOPTS=""
 +
#
 +
# Optional arguments passed to in-kernel lockd
 +
#LOCKDARG=
 +
# TCP port rpc.lockd should listen on.
 +
#LOCKD_TCPPORT=32803
 +
# UDP port rpc.lockd should listen on.
 +
#LOCKD_UDPPORT=32769
 +
#
 +
# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
 +
RPCNFSDARGS="-V 4.1"
 +
# Number of nfs server processes to be started.
 +
# The default is 8.
 +
RPCNFSDCOUNT=8
 +
# Set V4 grace period in seconds
 +
#NFSD_V4_GRACE=90
 +
#
 +
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
 +
RPCMOUNTDOPTS=""
 +
#
 +
# Optional arguments passed to rpc.statd. See rpc.statd(8)
 +
STATDARG=""
 +
#
 +
# Optional arguments passed to rpc.idmapd. See rpc.idmapd(8)
 +
RPCIDMAPDARGS=""
 +
#
 +
# Optional arguments passed to rpc.gssd. See rpc.gssd(8)
 +
RPCGSSDARGS=""
 +
# Enable usage of gssproxy. See gssproxy-mech(8).
 +
GSS_USE_PROXY="no"
 +
#
 +
# Optional arguments passed to rpc.svcgssd. See rpc.svcgssd(8)
 +
RPCSVCGSSDARGS=""
 +
#
 +
# Optional arguments passed to blkmapd. See blkmapd(8)
 +
BLKMAPDARGS=""
 +
[root@vm-01 ~]#
 +
</syntaxhighlight>
 +
Настройки сетевых директорий располагаются в файле <code>/etc/exports</code>, для удобства, можно класть файлы с расширением <code>.exports</code> в директорию <code>/etc/exports.d</code>.
 +
Структура файла /etc/exports следующая:
 +
# Путь к сетевой директории
 +
# Хост или сеть, для который будет предоставляться общий доступ к директории
 +
# Опции для хоста
 +
Создаем файл <code>/etc/exports.d/public.exports</code> в котором будет указана сетевая директория, следующего содержания:
 +
<syntaxhighlight lang="bash">
 +
[root@vm-01 ~]# cat /etc/exports.d/public.exports
 +
/srv/nfs/public 192.168.10.0/24(ro,root_squash)
 +
[root@vm-01 ~]#
 +
</syntaxhighlight>
 +
Директория <code>/srv/nfs/public</code> доступна машинам из сети 192.168.10.0/24, директория доступна только для чтения, пользователь <code>root</code> будет отображаться в
 +
пользователя <code>nobody</code> на сервере.
 +
Создаем директорию и записываем в нее проверочный файл:
 +
<syntaxhighlight lang="bash">
 +
[root@vm-01 ~]# mkdir -p /srv/nfs/public
 +
[root@vm-01 ~]# printf "This is test file for NFSv4.1 for RHEL7.0\n" > /srv/nfs/public/nfs_test.txt
 +
[root@vm-01 ~]# ls -lahi /srv/nfs/public/nfs_test.txt
 +
12948466 -rw-r--r--. 1 root root 42 Nov 30 14:30 /srv/nfs/public/nfs_test.txt
 +
[root@vm-01 ~]# cat /srv/nfs/public/nfs_test.txt
 +
This is test file for NFSv4.1 for RHEL7.0
 +
[root@vm-01 ~]#
 +
</syntaxhighlight>
 +
Проверяем разрешения <code>SELinux</code> на монтирование директорий <code>NFS</code>
 +
<syntaxhighlight lang="bash">
 +
[root@vm-01 ~]# semanage boolean -l | grep nfs_export
 +
nfs_export_all_rw              (on  ,  on)  Allow any files/directories to be exported read/write via NFS.
 +
nfs_export_all_ro              (on  ,  on)  Allow any files/directories to be exported read/only via NFS.
 +
[root@vm-01 ~]#
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
==== Запуск ====
 
==== Запуск ====
 
Запускаем сервис:
 
Запускаем сервис:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
[root@vm-01 logs]# systemctl start httpd
+
[root@vm-01 ~]# systemctl enable nfs-server
[root@vm-01 logs]# systemctl is-active httpd
+
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
 +
[root@vm-01 ~]# systemctl start nfs-server
 +
[root@vm-01 ~]# systemctl is-active nfs-server
 
active
 
active
[root@vm-01 logs]#
+
[root@vm-01 ~]#
 
</syntaxhighlight>
 
</syntaxhighlight>
Добавляем разрешение в файрволе:
+
Для корректной работы nfs, необхомо включить несколько сервисов в файрволе. Добавляем разрешения:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
[root@vm-01 ~]# firewall-cmd --add-service={http,https} --permanent  
+
[root@vm-01 ~]# firewall-cmd --add-service={mountd,nfs,rpc-bind} --permanent
 
success
 
success
[root@vm-01 ~]# firewall-cmd --reload  
+
[root@vm-01 ~]# firewall-cmd --reload
 
success
 
success
[root@vm-01 ~]# firewall-cmd --list-services  
+
[root@vm-01 ~]# firewall-cmd --list-services
dhcpv6-client https http ssh dns
+
dhcpv6-client http https mountd nfs rpc-bind ssh
 
[root@vm-01 ~]#
 
[root@vm-01 ~]#
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==== Проверка ====
 
==== Проверка ====
С виртуальной машины <code>vm-02</code> обратимся к странице при помощи утилиты <code>curl</code>:
+
С виртуальной машины <code>vm-01</code> проверим доступность сетевой директории на самом сервере:
 +
<syntaxhighlight lang="bash">
 +
[root@vm-01 ~]# showmount -e vm-01.virtual.lab
 +
Export list for vm-01.virtual.lab:
 +
/srv/nfs/public 192.168.10.0/24
 +
[root@vm-01 ~]#
 +
</syntaxhighlight>
 +
Теперь проверим на клиентской машине:
 +
<syntaxhighlight lang="bash">
 +
[root@vm-02 ~]# showmount -e vm-01.virtual.lab
 +
Export list for vm-01.virtual.lab:
 +
/srv/nfs/public 192.168.10.0/24
 +
[root@vm-02 ~]#
 +
</syntaxhighlight>
 +
Теперь монитируем:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
[root@vm-02 ~]# curl "http://192.168.1.1"
+
[root@vm-02 ~]# mount.nfs4 -v -o nfsvers=4.1 vm-01.virtual.lab:/srv/nfs/public /mnt/
Hello world.
+
mount.nfs4: timeout set for Fri Nov 30 14:52:53 2018
Tue Jan 23 13:57:22 MSK 2018
+
mount.nfs4: trying text-based options 'nfsvers=4.1,addr=192.168.10.8,clientaddr=192.168.10.9'
 +
[root@vm-02 ~]# cat /mnt/nfs_test.txt
 +
This is test file for NFSv4.1 for RHEL7.0
 
[root@vm-02 ~]#
 
[root@vm-02 ~]#
 
</syntaxhighlight>
 
</syntaxhighlight>

Текущая версия на 13:05, 3 декабря 2018

Конфигурирование NFS

Предварительные требования

  • Виртуальная машина с двумя сетевыми интерфейсами
  • Установленные пакеты: bash-completion, policycoreutils, policycoreutils-python, policycoreutils-devel, setroubleshoot-server, nfs-utils

Конфигурирование сетевой директории

Для развертывания NFS необходимые утилиты и демоны включены в пакет nfs-utils. Файл /etc/sysconfig/nfs необходим для настроек параметров демона rpc.nfsd. В данном файле необходимо указать версию протокола NFS - 4.1. Приводим файл /etc/sysconfig/nfs к следующему виду:

[root@vm-01 ~]# cat /etc/sysconfig/nfs
#
# Optinal options passed to rquotad
RPCRQUOTADOPTS=""
#
# Optional arguments passed to in-kernel lockd
#LOCKDARG=
# TCP port rpc.lockd should listen on.
#LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
#LOCKD_UDPPORT=32769
#
# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
RPCNFSDARGS="-V 4.1"
# Number of nfs server processes to be started.
# The default is 8. 
RPCNFSDCOUNT=8
# Set V4 grace period in seconds
#NFSD_V4_GRACE=90
#
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
RPCMOUNTDOPTS=""
#
# Optional arguments passed to rpc.statd. See rpc.statd(8)
STATDARG=""
#
# Optional arguments passed to rpc.idmapd. See rpc.idmapd(8)
RPCIDMAPDARGS=""
#
# Optional arguments passed to rpc.gssd. See rpc.gssd(8)
RPCGSSDARGS=""
# Enable usage of gssproxy. See gssproxy-mech(8).
GSS_USE_PROXY="no"
#
# Optional arguments passed to rpc.svcgssd. See rpc.svcgssd(8)
RPCSVCGSSDARGS=""
#
# Optional arguments passed to blkmapd. See blkmapd(8)
BLKMAPDARGS=""
[root@vm-01 ~]#

Настройки сетевых директорий располагаются в файле /etc/exports, для удобства, можно класть файлы с расширением .exports в директорию /etc/exports.d. Структура файла /etc/exports следующая:

  1. Путь к сетевой директории
  2. Хост или сеть, для который будет предоставляться общий доступ к директории
  3. Опции для хоста

Создаем файл /etc/exports.d/public.exports в котором будет указана сетевая директория, следующего содержания:

[root@vm-01 ~]# cat /etc/exports.d/public.exports 
/srv/nfs/public		192.168.10.0/24(ro,root_squash)
[root@vm-01 ~]#

Директория /srv/nfs/public доступна машинам из сети 192.168.10.0/24, директория доступна только для чтения, пользователь root будет отображаться в пользователя nobody на сервере. Создаем директорию и записываем в нее проверочный файл:

[root@vm-01 ~]# mkdir -p /srv/nfs/public
[root@vm-01 ~]# printf "This is test file for NFSv4.1 for RHEL7.0\n" > /srv/nfs/public/nfs_test.txt
[root@vm-01 ~]# ls -lahi /srv/nfs/public/nfs_test.txt 
12948466 -rw-r--r--. 1 root root 42 Nov 30 14:30 /srv/nfs/public/nfs_test.txt
[root@vm-01 ~]# cat /srv/nfs/public/nfs_test.txt 
This is test file for NFSv4.1 for RHEL7.0
[root@vm-01 ~]#

Проверяем разрешения SELinux на монтирование директорий NFS

[root@vm-01 ~]# semanage boolean -l | grep nfs_export
nfs_export_all_rw              (on   ,   on)  Allow any files/directories to be exported read/write via NFS.
nfs_export_all_ro              (on   ,   on)  Allow any files/directories to be exported read/only via NFS.
[root@vm-01 ~]#

Запуск

Запускаем сервис:

[root@vm-01 ~]# systemctl enable nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
[root@vm-01 ~]# systemctl start nfs-server
[root@vm-01 ~]# systemctl is-active nfs-server
active
[root@vm-01 ~]#

Для корректной работы nfs, необхомо включить несколько сервисов в файрволе. Добавляем разрешения:

[root@vm-01 ~]# firewall-cmd --add-service={mountd,nfs,rpc-bind} --permanent
success
[root@vm-01 ~]# firewall-cmd --reload
success
[root@vm-01 ~]# firewall-cmd --list-services
dhcpv6-client http https mountd nfs rpc-bind ssh
[root@vm-01 ~]#

Проверка

С виртуальной машины vm-01 проверим доступность сетевой директории на самом сервере:

[root@vm-01 ~]# showmount -e vm-01.virtual.lab
Export list for vm-01.virtual.lab:
/srv/nfs/public 192.168.10.0/24
[root@vm-01 ~]#

Теперь проверим на клиентской машине:

[root@vm-02 ~]# showmount -e vm-01.virtual.lab
Export list for vm-01.virtual.lab:
/srv/nfs/public 192.168.10.0/24
[root@vm-02 ~]#

Теперь монитируем:

[root@vm-02 ~]# mount.nfs4 -v -o nfsvers=4.1 vm-01.virtual.lab:/srv/nfs/public /mnt/
mount.nfs4: timeout set for Fri Nov 30 14:52:53 2018
mount.nfs4: trying text-based options 'nfsvers=4.1,addr=192.168.10.8,clientaddr=192.168.10.9'
[root@vm-02 ~]# cat /mnt/nfs_test.txt 
This is test file for NFSv4.1 for RHEL7.0
[root@vm-02 ~]#

Ссылки

Configuring the NFS Server