![NFS + Kerberos: Zugriff beim Mounten vom Server verweigert](https://rvso.com/image/111992/NFS%20%2B%20Kerberos%3A%20Zugriff%20beim%20Mounten%20vom%20Server%20verweigert.png)
Ich habe NFS&Kerberos wie hier beschrieben konfiguriert:Wie konfiguriere ich einen Kerberos NFS-Server auf Red Hat Enterprise Linux 7
Alle Diagnosevorgänge verlaufen einwandfrei, aber wenn ich versuche, meine Freigaben auf der Clientseite zu mounten, erhalte ich folgende Meldung:
mount.nfs4: access denied by server while mounting kdc.example.com:/var/backup
Die IPs von Server und Client befinden sich in beiden /etc/hosts (Server- und Client-Rechner) an erster Stelle nach der IP. Meine Konfiguration ist:
/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
}
Die Dienste krb5kdc und kadmin sind auf dem Server aktiv und laufen.
/etc/fstab auf dem Client:
#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
Wenn ich das tue:
mount -vv -t nfs4 -o sec=krb5 kdc.example.com:/var/backup backup
Ich erhalte die Nachricht:
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
Erste Anmerkung: Warum ist die Clientadresse 192.168.0.2, aber nicht client.example.com, das in beiden /etc/hosts festgelegt ist? Jedenfalls erscheint dieselbe Meldung, wenn ich clientaddr=client.example.com zur Option -o von mount hinzufüge.
Die zweite Nachricht befindet sich im /var/log/krb5kdc.log des Servers:
CLIENT_NOT_FOUND: [email protected] for krbtgt/[email protected], Client not found in Kerberos database
klist -k auf dem Server:
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 auf dem Client:
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/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]
Also, was ist das Problem? Warum kann ich meine NFS-Freigabe nicht mounten?
Antwort1
Ich habe das gleiche Problem. Laut diesem kleinen Tutorialhttps://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/ Sie sollten den NFS-Secure-Server-Dienst serverseitig und den NFS-Secure-Dienst clientseitig aktivieren. Dies sollte das Problem lösen.
Antwort2
Ich bin gestern auf dasselbe Problem gestoßen und es scheint auf fehlende Principals im KDC und das Anhalten von rpc-gssd.service auf dem Client zurückzuführen zu sein.
Auf dem KDC-Server sollte ein tail -f /var/log/krb5kdc.log gestartet werden und fehlende Principals (sofern vorhanden) sollten im Protokoll erscheinen, wenn vom Client aus versucht wird, die NFS-Freigabe zu mounten.
[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 ~]$
In der Protokollausgabe wurde der fehlende Auftraggeber identifiziert:
[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
Der fehlende Principal muss zum KDC hinzugefügt werden und der Schlüssel des Clients sollte zum Client {/etc/krb5.keytab} exportiert werden.
sudo kadmin.local -q "ktadd nfs/kerberos.example.com"
sudo kadmin.local -q "ktadd -k /tmp/krb5.keytab nfs/desktop1.example.com"
Der Keytab auf der Clientseite:
[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 ~]$
Die verweigerte Berechtigung sollte nicht mehr vorliegen, aber bei falschen Argumenten sollte eine weitere Warnung erscheinen.
[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 ~]$
Nach dem Starten des Dienstes rpc-gssd.service verschwindet der Fehler und die NFS-Freigabe wurde korrekt eingebunden:
[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 ~]$
Die Tickets waren wie folgt:
[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 ~]$
Antwort3
Ich weiß, es ist schon etwas älter, aber wenn Sie immer noch danach suchen, ich hatte ein ähnliches Problem und habe selbst eine Lösung gefunden. Sie finden diese unter meiner Antwort auf mein Problem.„Fedora 26 NFS + Kerberos „Vorauthentifizierung fehlgeschlagen“ (Mount führte zu keiner Berechtigung)“, ich bin ziemlich sicher, dass RHEL diese Einstellungen befolgen kann
Antwort4
Ich hatte ein ähnliches Problem auf einem RHEL 7-Server in einer Umgebung, in der Kerberos von FreeIPA verwaltet wird. Ein bisschen Setup:
Diese Umgebung ist eine AD / FreeIPA-Umgebung, in der FreeIPA (Server idm.nix.example.com
) eine bidirektionale Vertrauensstellung zum Windows DC hat. dc.example.com
Sowohl Linux- als auch Windows-Server befinden sich im selben Subnetz 172.16.0.0/24
. Da MSAD zuerst erstellt wurde, werden bei der Konfiguration von FreeIPA keine Reverse-Zonen dynamisch für Hosts erstellt nix.example.com
. Dies ist ein bekanntes Problem und wird verfolgt überdieses BugZilla.
Beim Ausführen des Mount-Befehls erhielt ich den folgenden Fehler. Auf dem NFS-Server gab es keinen entsprechenden Fehler:
[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
Durch eine Änderung habe ich zufällig systemctl status rpc-gssd.service
folgende Fehlermeldung erhalten:
[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**
Da in dieser NIX
Umgebung keine PTRs dynamisch erstellt werden, müssen Sie den NFS-Server entweder hinzufügen /etc/hosts
oder den entsprechenden PTR-Eintrag manuell erstellen. Sie können überprüfen, ob das Problem dadurch behoben wird, indem Sie den NFS-Server hinzufügen zu /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
Kurz zusammengefasst:Stellen Sie in einer MSAD <-> IPA-Vertrauensumgebung sicher, dass Ihre PTR-Einträge für Dienste wie NFS bereitgestellt werden, da diese nicht dynamisch erstellt werden.