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

Материал из pNp Wiki
Перейти к: навигация, поиск
(Проверка)
Строка 106: Строка 106:
 
[root@vm-01 ~]# showmount -e vm-01.virtual.lab
 
[root@vm-01 ~]# showmount -e vm-01.virtual.lab
 
Export list for vm-01.virtual.lab:
 
Export list for vm-01.virtual.lab:
/srv/nfs/public 192.168.10.0/24
+
/srv/nfs/public   192.168.10.0/24
/srv/nfs/account 192.168.10.0/24
+
/srv/nfs/krb-share 192.168.10.0/24
 +
/srv/nfs/account   192.168.10.0/24
 
[root@vm-01 ~]#
 
[root@vm-01 ~]#
 
</syntaxhighlight>
 
</syntaxhighlight>
Теперь проверим на клиентской машине. Создадим директорию <code>/srv/nfs/account</code> и смонтируем сетевую директорию <code>account</code> в нее:
+
Теперь проверим на клиентской машине. Создадим директорию <code>/srv/nfs/krb-share</code> и смонтируем сетевую директорию <code>krb-share</code> в нее:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
[root@vm-02 ~]# showmount -e vm-01.virtual.lab
 
[root@vm-02 ~]# showmount -e vm-01.virtual.lab
 
Export list for vm-01.virtual.lab:
 
Export list for vm-01.virtual.lab:
/srv/nfs/public 192.168.10.0/24
+
/srv/nfs/public   192.168.10.0/24
/srv/nfs/account 192.168.10.0/24
+
/srv/nfs/krb-share 192.168.10.0/24
[root@vm-02 ~]# mkdir -p /mnt/nfs/account
+
/srv/nfs/account   192.168.10.0/24
[root@vm-02 ~]# mount.nfs4 -v -o nfsvers=4.2 vm-01.virtual.lab:/srv/nfs/account /mnt/nfs/account/
+
[root@vm-02 ~]# mkdir /mnt/nfs/krb-share
mount.nfs4: timeout set for Fri Nov 30 17:31:40 2018
+
</syntaxhighlight>
mount.nfs4: trying text-based options 'nfsvers=4.2,addr=192.168.10.8,clientaddr=192.168.10.9'
+
Теперь скопируем <code>keytab</code> файл с сервера <code>vm-03.virtual.lab</code>, на сервер <code>vm-02.virtual.lab</code> и сразу восстановим контекст <code>SELinux</code>:
[root@vm-02 ~]# ls -lahiZ /mnt/nfs/
+
<syntaxhighlight lang="bash">
drwxr-xr-x. root root    unconfined_u:object_r:mnt_t:s0  .
+
[root@vm-02 ~]# scp -p root@vm-03.virtual.lab:/etc/krb5.keytab /etc/
drwxr-xr-x. root root    system_u:object_r:mnt_t:s0      ..
+
The authenticity of host 'vm-03.virtual.lab (192.168.10.10)' can't be established.
drwxrws---. root account unconfined_u:object_r:public_content_rw_t:s0 account
+
ECDSA key fingerprint is ae:71:ab:e1:8a:33:77:68:c7:de:a3:16:14:14:4c:0b.
drwxr-xr-x. root root   unconfined_u:object_r:mnt_t:s0  public
+
Are you sure you want to continue connecting (yes/no)? yes
[lisa@vm-02 ~]$ printf "This is Lisa, and this is my file.\n" > /mnt/nfs/account/account.txt
+
Warning: Permanently added 'vm-03.virtual.lab,192.168.10.10' (ECDSA) to the list of known hosts.
[lisa@vm-02 ~]$ chmod 660 /mnt/nfs/account/account.txt
+
root@vm-03.virtual.lab's password:  
[lisa@vm-02 ~]$ ls -lahiZ /mnt/nfs/account/account.txt
+
krb5.keytab                                                                                                                                                100% 1818    1.8KB/s  00:00    
-rw-rw----. lisa account unconfined_u:object_r:public_content_rw_t:s0 /mnt/nfs/account/account.txt
+
[root@vm-02 ~]# restorecon -vR /etc/krb5.keytab
[lisa@vm-02 ~]$ exit
+
[root@vm-02 ~]# ls -lahiZ /etc/krb5.keytab
logout
+
-rw-------. root root unconfined_u:object_r:krb5_keytab_t:s0 /etc/krb5.keytab
[root@vm-02 ~]# su - mary
+
[root@vm-02 ~]#
Last login: Fri Nov 30 17:32:49 MSK 2018 on pts/0
+
</syntaxhighlight>
[mary@vm-02 ~]$ printf "This is Mary, and this is my contibution to Lisa's work.\n" >> /mnt/nfs/account/account.txt
+
Для работы керберезированных сетевых директорий, нам понадобиться включить сервис <code>nfs-secure.service</code> на клиентской машине <code>vm-02.virtual.lab</code>:
[mary@vm-02 ~]$ ls -lahiZ /mnt/nfs/account/account.txt
+
<syntaxhighlight lang="bash">
-rw-rw----. lisa account unconfined_u:object_r:public_content_rw_t:s0 /mnt/nfs/account/account.txt
+
[root@vm-02 ~]# systemctl enable nfs-secure.service
[mary@vm-02 ~]$ cat /mnt/nfs/account/account.txt
+
ln -s '/usr/lib/systemd/system/nfs-secure.service' '/etc/systemd/system/nfs.target.wants/nfs-secure.service'
This is Lisa, and this is my file.
+
[root@vm-02 ~]# systemctl start nfs-secure.service
This is Mary, and this is my contibution to Lisa's work.
+
[root@vm-02 ~]# systemctl status -l nfs-secure.service
[mary@vm-02 ~]$ exit
+
nfs-secure.service - Secure NFS
logout
+
  Loaded: loaded (/usr/lib/systemd/system/nfs-secure.service; enabled)
[root@vm-02 ~]# ls -lahi /mnt/nfs/account/
+
  Active: active (running) since Mon 2018-12-03 14:30:06 MSK; 4s ago
ls: cannot open directory /mnt/nfs/account/: Permission denied
+
  Process: 25392 ExecStart=/usr/sbin/rpc.gssd $RPCGSSDARGS (code=exited, status=0/SUCCESS)
 +
Main PID: 25393 (rpc.gssd)
 +
  CGroup: /system.slice/nfs-secure.service
 +
          └─25393 /usr/sbin/rpc.gssd
 +
 
 +
Dec 03 14:30:06 vm-02.virtual.lab systemd[1]: Started Secure NFS.
 
[root@vm-02 ~]#
 
[root@vm-02 ~]#
 
</syntaxhighlight>
 
</syntaxhighlight>
Пользователя <code>root</code> не пускает потому, что сетевая директория имеет опцию <code>root_squash</code>
+
Далее, необходимо примонтировать сетевую директорию:
 +
<syntaxhighlight lang="bash">
 +
[root@vm-02 ~]# mount.nfs4 -v -o nfsvers=4.2,sec=krb5p vm-01.virtual.lab:/srv/nfs/krb-share /mnt/nfs/krb-share
 +
mount.nfs4: timeout set for Mon Dec  3 14:34:10 2018
 +
mount.nfs4: trying text-based options 'nfsvers=4.2,sec=krb5p,addr=192.168.10.8,clientaddr=192.168.10.9'
 +
[root@vm-02 ~]# findmnt -ADt nfs4
 +
SOURCE                              FSTYPE  SIZE  USED AVAIL USE% TARGET
 +
vm-01.virtual.lab:/srv/nfs/account  nfs4    4.5G  4.2G  345M  92% /mnt/nfs/account
 +
vm-01.virtual.lab:/srv/nfs/krb-share nfs4    4.5G  4.2G  345M  92% /mnt/nfs/krb-share
 +
[root@vm-02 ~]# ls -lahiZ /mnt/nfs/krb-share
 +
ls: cannot open directory /mnt/nfs/krb-share: Permission denied
 +
</syntaxhighlight>
 +
Пользователя <code>root</code> не пускает потому, что сетевая директория имеет опцию <code>root_squash</code>, пробуем от пользователя <code>randy</code>:
 +
<syntaxhighlight lang="bash">
 +
[root@vm-02 ~]# su - randy
 +
Creating home directory for randy.
 +
</syntaxhighlight>
 +
Получаем билет <code>kerberos</code>:
 +
<syntaxhighlight lang="bash">
 +
[randy@vm-02 ~]$ kinit
 +
Password for randy@VIRTUAL.LAB:
 +
[randy@vm-02 ~]$ klist
 +
Ticket cache: KEYRING:persistent:10002:10002
 +
Default principal: randy@VIRTUAL.LAB
 +
 
 +
Valid starting      Expires              Service principal
 +
12/03/2018 14:33:13  12/04/2018 14:33:13  krbtgt/VIRTUAL.LAB@VIRTUAL.LAB
 +
renew until 12/03/2018 14:33:13
 +
 
 +
Пробуем записать файл в директорию:
 +
<syntaxhighlight lang="bash">
 +
[randy@vm-02 ~]$ printf "This is very important file.\n" > /mnt/nfs/krb-share/randy.txt
 +
[randy@vm-02 ~]$ ls -lahiZ /mnt/nfs/krb-share/randy.txt
 +
-rw-r--r--. randy virtuallab unconfined_u:object_r:public_content_rw_t:s0 /mnt/nfs/krb-share/randy.txt
 +
[randy@vm-02 ~]$ cat /mnt/nfs/krb-share/randy.txt
 +
This is very important file.
 +
[randy@vm-02 ~]$
 +
</syntaxhighlight>
  
 
== Ссылки ==
 
== Ссылки ==
 
[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/nfs-serverconfig Configuring the NFS Server]<br />
 
[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/nfs-serverconfig Configuring the NFS Server]<br />

Версия 13:37, 3 декабря 2018

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

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

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

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

Создаем директорию krb-share и присваиваем соответствующий контекст SELinux:

[root@vm-01 ~]# mkdir -p /srv/nfs/krb-share
[root@vm-01 ~]# semanage fcontext -at public_content_rw_t '/srv/nfs/krb-share(/.*)?' 
[root@vm-01 ~]# restorecon -vR /srv/nfs/krb-share/
restorecon reset /srv/nfs/krb-share context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:public_content_rw_t:s0
[root@vm-01 ~]# ls -lahiZ /srv/nfs/
drwxr-xr-x. root root    unconfined_u:object_r:var_t:s0   .
drwxr-xr-x. root root    system_u:object_r:var_t:s0       ..
drwxrws---. root account unconfined_u:object_r:public_content_rw_t:s0 account
drwxr-xr-x. root root    unconfined_u:object_r:public_content_rw_t:s0 krb-share
drwxr-xr-x. root root    unconfined_u:object_r:var_t:s0   public
[root@vm-01 ~]#

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

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

Директория /srv/nfs/krb-share доступна машинам из сети 192.168.10.0/24, директория доступна для записи, пользователь root будет отображаться в пользователя nobody на сервере. Присвоим права на директорию пользователю randy и группе unix:

[root@vm-01 ~]# id randy
uid=10002(randy) gid=10000(virtuallab) groups=10000(virtuallab),10002(unix)
[root@vm-01 ~]# chown randy:unix /srv/nfs/krb-share/
[root@vm-01 ~]# chmod 750 /srv/nfs/krb-share/
[root@vm-01 ~]# ls -lahiZ /srv/nfs/krb-share/
drwxr-x---. randy unix unconfined_u:object_r:public_content_rw_t:s0 .
drwxr-xr-x. root  root unconfined_u:object_r:var_t:s0   ..
[root@vm-01 ~]#

Перечитаем список сетевых директорий:

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

Запуск

Копируем keytab файл с сервера vm-03.virtual.lab, на сервер vm-01.virtual.lab:

[root@vm-01 ~]# scp -p root@vm-03.virtual.lab:/etc/krb5.keytab /etc/
root@vm-03.virtual.lab's password: 
krb5.keytab                                                                                                                                                 100% 1818     1.8KB/s   00:00    
[root@vm-01 ~]#

Восстановим контекст SELinux у keytab файла:

[root@vm-01 ~]# restorecon -vR /etc/krb5.keytab 
[root@vm-01 ~]# ls -lahiZ /etc/krb5.keytab
-rw-------. root root unconfined_u:object_r:krb5_keytab_t:s0 /etc/krb5.keytab
[root@vm-01 ~]#

Для поддержки керберос аутентикации сетевых директорий NFS, в RHEL 7.0 надо, кроме сервиса nfs-server запустить сервис nfs-secure-server:

[root@vm-01 ~]# systemctl enable nfs-secure-server
ln -s '/usr/lib/systemd/system/nfs-secure-server.service' '/etc/systemd/system/nfs.target.wants/nfs-secure-server.service'
[root@vm-01 ~]# systemctl start nfs-secure-server
[root@vm-01 ~]# systemctl status -l nfs-secure-server
nfs-secure-server.service - Secure NFS Server
   Loaded: loaded (/usr/lib/systemd/system/nfs-secure-server.service; disabled)
   Active: active (running) since Mon 2018-12-03 14:20:42 MSK; 7s ago
  Process: 32315 ExecStart=/usr/sbin/rpc.svcgssd $RPCSVCGSSDARGS (code=exited, status=0/SUCCESS)
 Main PID: 32316 (rpc.svcgssd)
   CGroup: /system.slice/nfs-secure-server.service
           └─32316 /usr/sbin/rpc.svcgssd

Dec 03 14:20:42 vm-01.virtual.lab systemd[1]: Starting Secure NFS Server...
Dec 03 14:20:42 vm-01.virtual.lab systemd[1]: Started Secure NFS Server.
[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/krb-share 192.168.10.0/24
/srv/nfs/account   192.168.10.0/24
[root@vm-01 ~]#

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

[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/krb-share 192.168.10.0/24
/srv/nfs/account   192.168.10.0/24
[root@vm-02 ~]# mkdir /mnt/nfs/krb-share

Теперь скопируем keytab файл с сервера vm-03.virtual.lab, на сервер vm-02.virtual.lab и сразу восстановим контекст SELinux:

[root@vm-02 ~]# scp -p root@vm-03.virtual.lab:/etc/krb5.keytab /etc/
The authenticity of host 'vm-03.virtual.lab (192.168.10.10)' can't be established.
ECDSA key fingerprint is ae:71:ab:e1:8a:33:77:68:c7:de:a3:16:14:14:4c:0b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'vm-03.virtual.lab,192.168.10.10' (ECDSA) to the list of known hosts.
root@vm-03.virtual.lab's password: 
krb5.keytab                                                                                                                                                 100% 1818     1.8KB/s   00:00    
[root@vm-02 ~]# restorecon -vR /etc/krb5.keytab 
[root@vm-02 ~]# ls -lahiZ /etc/krb5.keytab
-rw-------. root root unconfined_u:object_r:krb5_keytab_t:s0 /etc/krb5.keytab
[root@vm-02 ~]#

Для работы керберезированных сетевых директорий, нам понадобиться включить сервис nfs-secure.service на клиентской машине vm-02.virtual.lab:

[root@vm-02 ~]# systemctl enable nfs-secure.service
ln -s '/usr/lib/systemd/system/nfs-secure.service' '/etc/systemd/system/nfs.target.wants/nfs-secure.service'
[root@vm-02 ~]# systemctl start nfs-secure.service
[root@vm-02 ~]# systemctl status -l nfs-secure.service
nfs-secure.service - Secure NFS
   Loaded: loaded (/usr/lib/systemd/system/nfs-secure.service; enabled)
   Active: active (running) since Mon 2018-12-03 14:30:06 MSK; 4s ago
  Process: 25392 ExecStart=/usr/sbin/rpc.gssd $RPCGSSDARGS (code=exited, status=0/SUCCESS)
 Main PID: 25393 (rpc.gssd)
   CGroup: /system.slice/nfs-secure.service
           └─25393 /usr/sbin/rpc.gssd

Dec 03 14:30:06 vm-02.virtual.lab systemd[1]: Started Secure NFS.
[root@vm-02 ~]#

Далее, необходимо примонтировать сетевую директорию:

[root@vm-02 ~]# mount.nfs4 -v -o nfsvers=4.2,sec=krb5p vm-01.virtual.lab:/srv/nfs/krb-share /mnt/nfs/krb-share
mount.nfs4: timeout set for Mon Dec  3 14:34:10 2018
mount.nfs4: trying text-based options 'nfsvers=4.2,sec=krb5p,addr=192.168.10.8,clientaddr=192.168.10.9'
[root@vm-02 ~]# findmnt -ADt nfs4
SOURCE                               FSTYPE  SIZE  USED AVAIL USE% TARGET
vm-01.virtual.lab:/srv/nfs/account   nfs4    4.5G  4.2G  345M  92% /mnt/nfs/account
vm-01.virtual.lab:/srv/nfs/krb-share nfs4    4.5G  4.2G  345M  92% /mnt/nfs/krb-share
[root@vm-02 ~]# ls -lahiZ /mnt/nfs/krb-share
ls: cannot open directory /mnt/nfs/krb-share: Permission denied

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

[root@vm-02 ~]# su - randy
Creating home directory for randy.

Получаем билет kerberos:

[randy@vm-02 ~]$ kinit 
Password for randy@VIRTUAL.LAB: 
[randy@vm-02 ~]$ klist 
Ticket cache: KEYRING:persistent:10002:10002
Default principal: randy@VIRTUAL.LAB

Valid starting       Expires              Service principal
12/03/2018 14:33:13  12/04/2018 14:33:13  krbtgt/VIRTUAL.LAB@VIRTUAL.LAB
	renew until 12/03/2018 14:33:13

Пробуем записать файл в директорию:
<syntaxhighlight lang="bash">
[randy@vm-02 ~]$ printf "This is very important file.\n" > /mnt/nfs/krb-share/randy.txt
[randy@vm-02 ~]$ ls -lahiZ /mnt/nfs/krb-share/randy.txt 
-rw-r--r--. randy virtuallab unconfined_u:object_r:public_content_rw_t:s0 /mnt/nfs/krb-share/randy.txt
[randy@vm-02 ~]$ cat /mnt/nfs/krb-share/randy.txt 
This is very important file.
[randy@vm-02 ~]$

Ссылки

Configuring the NFS Server