Nfs share group

Материал из pNp Wiki
Версия от 13:04, 3 декабря 2018; Andy (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Конфигурирование NFS для сетевых групп

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

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

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

Создаем директорию account и присваиваем соответствующий контекст SELinux, права и владельца:

[root@vm-01 ~]# mkdir -p /srv/nfs/account
[root@vm-01 ~]# semanage fcontext -at public_content_rw_t '/srv/nfs/account(/.*)?' 
[root@vm-01 ~]# chmod 2770 /srv/nfs/account/ 
[root@vm-01 ~]# id lisa
uid=10000(lisa) gid=10000(virtuallab) groups=10000(virtuallab),10001(account)
[root@vm-01 ~]# id mary
uid=10001(mary) gid=10000(virtuallab) groups=10000(virtuallab),10001(account)
[root@vm-01 ~]# chown root:account /srv/nfs/account/
[root@vm-01 ~]# restorecon -vR /srv/nfs/account/
restorecon reset /srv/nfs/account context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:public_content_rw_t:s0
[root@vm-01 ~]# ls -lahiZ /srv/nfs/account/
drwxrws---. root account unconfined_u:object_r:public_content_rw_t:s0 .
drwxr-xr-x. root root    unconfined_u:object_r:var_t:s0   ..
[root@vm-01 ~]#

Группа account существует на сервере LDAP, так же как и пользователи lisa и mary, которые входят в группу account. Для того, что бы контекст SELinux необходимо исправить файл /etc/sysconfig/nfs и указать, что будет использоваться версия NFS - 4.2:

[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.2"
# 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.d/account.exports в котором будет указана сетевая директория, следующего содержания:

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

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

[root@vm-01 ~]# exportfs -avr
exporting 192.168.10.0/24:/srv/nfs/public
exporting 192.168.10.0/24:/srv/nfs/account
[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 ~]#

Запуск

Перезапустим сервис, так как мы поменяли версию NFS:

[root@vm-01 ~]# systemctl restart nfs-server.service 
[root@vm-01 ~]# systemctl is-active nfs-server.service
active
[root@vm-01 ~]# systemctl is-enabled nfs-server.service
enabled
[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
/srv/nfs/account 192.168.10.0/24
[root@vm-01 ~]#

Теперь проверим на клиентской машине. Создадим директорию /srv/nfs/account и смонтируем сетевую директорию account в нее:

[root@vm-02 ~]# showmount -e vm-01.virtual.lab
Export list for vm-01.virtual.lab:
/srv/nfs/public  192.168.10.0/24
/srv/nfs/account 192.168.10.0/24
[root@vm-02 ~]# mkdir -p /mnt/nfs/account
[root@vm-02 ~]# mount.nfs4 -v -o nfsvers=4.2 vm-01.virtual.lab:/srv/nfs/account /mnt/nfs/account/
mount.nfs4: timeout set for Fri Nov 30 17:31:40 2018
mount.nfs4: trying text-based options 'nfsvers=4.2,addr=192.168.10.8,clientaddr=192.168.10.9'
[root@vm-02 ~]# ls -lahiZ /mnt/nfs/
drwxr-xr-x. root root    unconfined_u:object_r:mnt_t:s0   .
drwxr-xr-x. root root    system_u:object_r:mnt_t:s0       ..
drwxrws---. root account unconfined_u:object_r:public_content_rw_t:s0 account
drwxr-xr-x. root root    unconfined_u:object_r:mnt_t:s0   public
[lisa@vm-02 ~]$ printf "This is Lisa, and this is my file.\n" > /mnt/nfs/account/account.txt
[lisa@vm-02 ~]$ chmod 660 /mnt/nfs/account/account.txt 
[lisa@vm-02 ~]$ ls -lahiZ /mnt/nfs/account/account.txt 
-rw-rw----. lisa account unconfined_u:object_r:public_content_rw_t:s0 /mnt/nfs/account/account.txt
[lisa@vm-02 ~]$ exit
logout
[root@vm-02 ~]# su - mary
Last login: Fri Nov 30 17:32:49 MSK 2018 on pts/0
[mary@vm-02 ~]$ printf "This is Mary, and this is my contibution to Lisa's work.\n" >> /mnt/nfs/account/account.txt
[mary@vm-02 ~]$ ls -lahiZ /mnt/nfs/account/account.txt 
-rw-rw----. lisa account unconfined_u:object_r:public_content_rw_t:s0 /mnt/nfs/account/account.txt
[mary@vm-02 ~]$ cat /mnt/nfs/account/account.txt 
This is Lisa, and this is my file.
This is Mary, and this is my contibution to Lisa's work.
[mary@vm-02 ~]$ exit
logout
[root@vm-02 ~]# ls -lahi /mnt/nfs/account/
ls: cannot open directory /mnt/nfs/account/: Permission denied
[root@vm-02 ~]#

Пользователя root не пускает потому, что сетевая директория имеет опцию root_squash

Ссылки

Configuring the NFS Server