NFS + Kerberos: acceso denegado por el servidor durante el montaje

NFS + Kerberos: acceso denegado por el servidor durante el montaje

Tengo NFS y Kerberos configurados como se describe aquí:¿Cómo configuro un servidor Kerberos NFS en Red Hat Enterprise Linux 7?

Todas las operaciones de diagnóstico funcionan bien, pero cuando intento montar mis recursos compartidos en el lado del cliente, aparece el siguiente mensaje:

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

Las IP de ambos servidor y cliente están en /etc/hosts (máquinas servidor y cliente), en primer lugar después de la IP. Mi configuración es:

/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/exportaciones:

/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
}

Los servicios krb5kdc y kadmin están funcionando en el servidor.

/etc/fstab en el cliente:

#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

Cuando lo hago:

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

Recibo un mensaje:

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

Primera observación: ¿por qué clientaddr es 192.168.0.2 pero no client.example.com, que está configurado en ambos /etc/hosts? De todos modos, aparece el mismo mensaje cuando agrego clientaddr=client.example.com en la opción -o de montaje.

El segundo mensaje está en /var/log/krb5kdc.log del servidor:

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

klist -k en el servidor:

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 en el cliente:

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 raíz/admin:

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]

Entonces, ¿cuál es el problema? ¿Por qué no puedo montar mi recurso compartido NFS?

Respuesta1

Tengo el mismo problema. Según este pequeño tutorial.https://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/ debe habilitar el servicio nfs-secure-server en el lado del servidor y el servicio nfs-secure en el lado del cliente. Esto deberia resolver el problema.

Respuesta2

Me encontré con el mismo problema ayer y esto parece ocurrir debido a que faltan principios básicos en el KDC y a que rpc-gssd.service se detuvo en el cliente.

En el servidor KDC, se debe iniciar tail -f /var/log/krb5kdc.log y los principales faltantes, si es que deben aparecer en el registro, cuando se intenta montar el recurso compartido NFS desde el cliente.

[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 ~]$ 

En la salida del registro se identificó el principal faltante:

[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

El principal que falta debe agregarse al KDC y la clave del cliente debe exportarse al cliente {/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"

La tabla de claves en el lado del cliente:

[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 ~]$ 

El permiso denegado ya no debería estar presente, pero debería aparecer otra advertencia por argumentos incorrectos.

[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 ~]$ 

Después de iniciar el servicio rpc-gssd.service, el error desaparece y el recurso compartido NFS se montó correctamente:

[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 ~]$

Los boletos fueron los siguientes:

[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 ~]$ 

Respuesta3

Sé que es algo antiguo, pero si todavía estás buscando esto, me enfrenté a un problema similar y obtuve una solución, puedes obtener esto en mi respuesta a mi problema."Fedora 26 NFS + Kerberos “Error de autenticación previa” (el montaje no genera permiso)", estoy bastante seguro de que RHEL puede seguir esas configuraciones

Respuesta4

Tuve un problema similar en un servidor RHEL 7 en un entorno donde FreeIPA administra kerberos. Un poco de configuración:

Este entorno es un entorno AD/FreeIPA donde FreeIPA (servidor idm.nix.example.com) tiene una confianza bidireccional con Windows DC, dc.example.com. Tanto los servidores Linux como los Windows viven en la misma subred 172.16.0.0/24. Como tal, dado que MSAD se creó primero, cuando se configura FreeIPA no se crean zonas inversas dinámicamente paranix.example.com los hosts. Este es un problema conocido y se rastrea a través deeste BugZilla.

Al ejecutar el comando de montaje, recibí el siguiente error. No hubo ningún error correspondiente en el servidor 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

Por cambio se me ocurrió hacer systemctl status rpc-gssd.servicey me salió el siguiente error:

[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**

Dado que este NIXentorno no tiene PTR creados dinámicamente, debe agregar el servidor NFS /etc/hostso crear el registro PTR relevante manualmente. Puede verificar que esto solucione el problema agregando el servidor NFS a /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:En un entorno de confianza MSAD <-> IPA, asegúrese de que algo proporcione sus registros PTR para servicios como NFS, ya que no se crean dinámicamente.

información relacionada