NFS + Kerberos: доступ запрещен сервером при монтировании

NFS + Kerberos: доступ запрещен сервером при монтировании

У меня настроены NFS и Kerberos, как описано здесь:Как настроить сервер Kerberos NFS в Red Hat Enterprise Linux 7

Все диагностические операции проходят нормально, но когда я пытаюсь смонтировать свои общие ресурсы на стороне клиента, я получаю следующее сообщение:

mount.nfs4: access denied by server while mounting kdc.example.com:/var/backup

IP-адреса обоих серверов и клиентов находятся в обоих /etc/hosts (серверная и клиентская машины), на первом месте после IP. Моя конфигурация:

/etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 EXAMPLE.COM = {
  kdc = kdc.example.com
  admin_server = kdc.example.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

/etc/exports:

/var/backup client.example.com(rw,sync,no_wdelay,nohide,no_subtree_check,no_root_squash,sec=krb5)
/mnt/storage client.example.com(rw,sync,no_wdelay,nohide,no_subtree_check,no_root_squash,sec=krb5)

/var/kerberos/krb5kdc:

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 EXAMPLE.COM = {
    kdc_ports = 88
    admin_keytab = /etc/kadm5.keytab
    database_name = /var/kerberos/krb5kdc/principal
    acl_file = /var/kerberos/krb5kdc/kadm5.acl
    key_stash_file = /var/kerberos/krb5kdc/stash
    max_life = 10h 0m 0s
    max_renewable_life = 7d 0h 0m 0s
    master_key_type = des3-hmac-sha1
    supported_enctypes = arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
    default_principal_flags = +preauth
}

Службы krb5kdc и kadmin запущены и работают на сервере.

/etc/fstab на клиенте:

#NFS area
kdc.example.com:/var/backup                              /mnt/backup                   nfs4     rsize=65536,wsize=65536,nolock,hard,sec=krb5
kdc.example.com:/mnt/storage                             /mnt/storage                  nfs4     rsize=65536,wsize=65536,nolock,hard,sec=krb5

Когда я делаю:

mount -vv -t nfs4 -o sec=krb5 kdc.example.com:/var/backup backup

Я получаю сообщение:

mount.nfs4: timeout set for Mon May 22 23:32:59 2017
mount.nfs4: trying text-based options 'sec=krb5,addr=95.85.33.75,clientaddr=192.168.0.2'
mount.nfs4: mount(2): Permission denied
mount.nfs4: access denied by server while mounting kdc.example.com:/var/backup

Первое замечание - почему clientaddr - 192.168.0.2, а не client.example.com, который задан в обоих /etc/hosts? В любом случае, то же самое сообщение появляется, когда я добавляю clientaddr=client.example.com в опцию -o mount.

Второе сообщение находится в /var/log/krb5kdc.log сервера:

CLIENT_NOT_FOUND: [email protected] for krbtgt/[email protected], Client not found in Kerberos database

klist -k на сервере:

Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 host/[email protected]
   3 host/[email protected]
   3 host/[email protected]
   3 nfs/[email protected]
   3 nfs/[email protected]
   3 nfs/[email protected]

klist -k на клиенте:

Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 host/[email protected]
   2 host/[email protected]
   2 host/[email protected]
   2 nfs/[email protected]
   2 nfs/[email protected]
   2 nfs/[email protected]

kadmin -p root/администратор:

kadmin:  listprincs
K/[email protected]
[email protected]
host/[email protected]
host/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
nfs/[email protected]
nfs/[email protected]
root/[email protected]

Так в чем проблема? Почему я не могу смонтировать свой ресурс NFS?

решение1

У меня та же проблема. Согласно этому небольшому руководствуhttps://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/ вам следует включить службу nfs-secure-server на стороне сервера и службу nfs-secure на стороне клиента. Это должно решить проблему.

решение2

Вчера я столкнулся с той же проблемой, и, по-видимому, это произошло из-за отсутствия принципалов на KDC и остановки службы rpc-gssd.service на клиенте.

На сервере KDC должен быть запущен tail -f /var/log/krb5kdc.log, и отсутствующие участники, если таковые имеются, должны появиться в журнале при попытках монтирования общего ресурса NFS с клиента.

[vagrant@desktop1 ~]$ sudo mount -o sec=krb5 server1:/knfs /knfs -v
mount.nfs: timeout set for Sun Feb 24 09:44:35 2019
mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=192.168.121.163,clientaddr=192.168.121.26'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.163,clientaddr=192.168.121.26'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.163'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
^C
[vagrant@desktop1 ~]$ 

В выходных данных журнала был выявлен отсутствующий принципал:

[vagrant@server1 ~]$ sudo tail -f /var/log/krb5kdc.log 
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (8 etypes {18 17 20 19 16 23 25 26}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0,  nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (4 etypes {18 17 16 23}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0,  nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (8 etypes {18 17 20 19 16 23 25 26}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0,  nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (8 etypes {18 17 20 19 16 23 25 26}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0,  nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database

Отсутствующий принципал необходимо добавить в KDC, а ключ клиента следует экспортировать в клиент {/etc/krb5.keytab}.

sudo kadmin.local -q "ktadd nfs/kerberos.example.com"
sudo kadmin.local -q "ktadd -k /tmp/krb5.keytab nfs/desktop1.example.com"

Клавиатура на стороне клиента:

[vagrant@desktop1 ~]$ sudo klist -ek
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 nfs/[email protected] (aes256-cts-hmac-sha1-96) 
   3 nfs/[email protected] (aes128-cts-hmac-sha1-96) 
   3 nfs/[email protected] (des3-cbc-sha1) 
   3 nfs/[email protected] (arcfour-hmac) 
   3 nfs/[email protected] (camellia256-cts-cmac) 
   3 nfs/[email protected] (camellia128-cts-cmac) 
   3 nfs/[email protected] (des-hmac-sha1) 
   3 nfs/[email protected] (des-cbc-md5) 
[vagrant@desktop1 ~]$ 

Сообщение об отказе в доступе больше не должно отображаться, но должно появиться другое предупреждение для неверных аргументов.

[vagrant@desktop1 ~]$ sudo mount -o sec=krb5 server1:/knfs /knfs -v
mount.nfs: timeout set for Sun Feb 24 09:07:32 2019
mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.54'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.54'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.54'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
^C
[vagrant@desktop1 ~]$ 

После запуска службы rpc-gssd.service ошибка исчезла и общий ресурс NFS был смонтирован правильно:

[vagrant@desktop1 ~]$ sudo systemctl start rpc-gssd.service 
[vagrant@desktop1 ~]$ sudo mount -o sec=krb5 server1:/knfs /knfs -v mount.nfs: 
timeout set for Sun Feb 24 09:07:47 2019 mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=192.168.121.54,clientaddr=192.168.121.195' 
[vagrant@desktop1 ~]$

Билеты были следующими:

[vagrant@desktop1 ~]$ sudo klist -e
Ticket cache: KEYRING:persistent:0:krb_ccache_kfAgj83
Default principal: nfs/[email protected]

Valid starting     Expires            Service principal
01/01/70 00:00:00  01/01/70 00:00:00  Encrypted/Credentials/v1@X-GSSPROXY:
[vagrant@desktop1 ~]$ 

решение3

Я знаю, что это немного устарело, но если вы все еще ищете это, я сам столкнулся с похожей проблемой и нашел решение, вы можете получить это в моем ответе на мою проблему«Fedora 26 NFS + Kerberos «Ошибка предварительной аутентификации» (монтирование привело к отсутствию разрешения)», я почти уверен, что RHEL может следовать этим настройкам

решение4

У меня была похожая проблема на сервере RHEL 7 в среде, где kerberos управляется FreeIPA. Немного настройки:

Эта среда представляет собой среду AD/FreeIPA, где FreeIPA (сервер idm.nix.example.com) имеет двустороннее доверие к контроллеру домена Windows. dc.example.comОба сервера Linux и Windows находятся в одной подсети 172.16.0.0/24. Таким образом, поскольку MSAD был создан первым, при настройке FreeIPA обратные зоны не создаются динамически для nix.example.comхостов. Это известная проблема, которая отслеживается с помощьюэтот BugZilla.

При запуске команды mount я получал следующую ошибку. На сервере NFS соответствующей ошибки не было:

[root@idm1 ~]# mount -v -o sec=krb5:krb5i:krb5p -t nfs 172.16.0.9:/share /mnt
mount.nfs: timeout set for Tue Sep  8 21:58:01 2020
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,vers=4.1,addr=172.16.0.9,clientaddr=172.16.0.6'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,vers=4.0,addr=172.16.0.9,clientaddr=172.16.0.6'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,addr=172.16.0.9'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 172.16.0.9 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 172.16.0.9 prog 100005 vers 3 prot UDP port 20048
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 172.16.0.9:/share

Я случайно сделал изменение systemctl status rpc-gssd.serviceи получил следующую ошибку:

[root@idm1 ~]# systemctl status rpc-gssd.service
● rpc-gssd.service - RPC security service for NFS client and server
   Loaded: loaded (/usr/lib/systemd/system/rpc-gssd.service; static; vendor preset: disabled)
   Active: active (running) since Tue 2020-09-08 15:32:28 EDT; 6h ago
  Process: 28217 ExecStart=/usr/sbin/rpc.gssd $GSSDARGS (code=exited, status=0/SUCCESS)
 Main PID: 28218 (rpc.gssd)
   CGroup: /system.slice/rpc-gssd.service
           └─28218 /usr/sbin/rpc.gssd

Sep 08 21:50:39 idm1.nix.example.com rpc.gssd[28218]: **ERROR: unable to resolve 172.16.0.9 to hostname: Name or service not known**
Sep 08 21:50:39 idm1.nix.example.com rpc.gssd[28218]: **ERROR: failed to parse nfs/clntf3/info**

Поскольку в этой NIXсреде PTR не создаются динамически, вам придется либо добавить сервер NFS, /etc/hostsлибо создать соответствующую запись PTR вручную. Вы можете убедиться, что это устраняет проблему, добавив сервер NFS в /etc/hosts:

[root@idm1 ~]# echo "172.16.0.9 nfs.nix.example.com" >> /etc/hosts
[root@idm1 ~]# ls /mnt
hgfs
[root@idm1 ~]# mount -v -o sec=krb5:krb5i:krb5p -t nfs 172.16.0.9:/share /mnt
mount.nfs: timeout set for Tue Sep  8 22:01:00 2020
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,vers=4.1,addr=172.16.0.9,clientaddr=172.16.0.6'
[root@idm1 ~]# ls /mnt
idm1  idm1-2

TL;DR:В среде доверия MSAD <-> IPA убедитесь, что что-то предоставляет ваши записи PTR для таких служб, как NFS, поскольку они не создаются динамически.

Связанный контент