"mount error(126): die Erforderlichen Schlüssel nicht verfügbar" mit CIFS & Kerberos
Meine Anwendung muss sicher befestigen eines Isilon-Freigabe mit CIFS und Kerberos. Meine mount
Versuch gibt: Required key not available
:
mount-t cifs //fileserver.example.com/client123/files
/mnt/client123/Dateien -o username=acoder,password=XXXXXX,sec=krb5
Antwort:
mount error(126): Required key not available
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Hier sind die entsprechenden Einträge aus /var/log/messages
Sep 16 16:33:49 clientbox kernel: CIFS VFS: Send error in SessSetup = -126
Sep 16 16:33:49 clientbox kernel: CIFS VFS: cifs_mount failed w/return code = -126
Hintergrund & Config
Ich habe eine keytab mit:
/usr/bin/ktutil
addent -password -p [email protected] -k 1 -e rc4-hmac
addent -password -p [email protected] -k 1 -e aes256-cts
wkt /etc/krb5.keytab
Geprüft mit klist -kte
:
[acoder@clientbox]# klist -kte
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp Principal
---- ----------------- --------------------------------------------------------
1 09/16/15 16:24:32 [email protected] (arcfour-hmac)
1 09/16/15 16:25:46 [email protected] (aes256-cts-hmac-sha1-96)
Hier request-key.conf
:
#OP TYPE DESCRIPTION CALLOUT INFO PROGRAM ARG1 ARG2 ARG3 ...
#====== ======= =============== =============== ===============================
create user debug:* negate /bin/keyctl negate %k 30 %S
create user debug:loop:* * |/bin/cat
create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S
negate * * * /bin/keyctl negate %k 30 %S
create cifs.spnego * * /usr/sbin/cifs.upcall %k
create dns_resolver * * /usr/sbin/cifs.upcall %k
Ticket cache:
# klist | grep "Ticket cache:"
Ticket cache: FILE:/tmp/krb5cc_0
Was könnte die Ursache der "Required key not available" - Fehler?
BEARBEITEN:
Ich aktivierte debugging in CIFS, und versuchte, sich so hängen Sie die Freigabe wieder. Hier ist die Ausgabe:
fs/cifs/cifsfs.c: Devname: //fileserver.example.com/client123/files flags: 0
fs/cifs/connect.c: prefix path /files
fs/cifs/connect.c: Username: acoder
fs/cifs/connect.c: file mode: 0x1ed dir mode: 0x1ed
fs/cifs/connect.c: CIFS VFS: in cifs_mount as Xid: 8 with uid: 0
fs/cifs/connect.c: UNC: \\fileserver.example.com/client123/files ip: 1.2.3.4
fs/cifs/connect.c: Socket created
fs/cifs/connect.c: sndbuf 19800 rcvbuf 87380 rcvtimeo 0x1b58
fs/cifs/connect.c: CIFS VFS: in cifs_get_smb_ses as Xid: 9 with uid: 0
fs/cifs/connect.c: Demultiplex PID: 22937
fs/cifs/connect.c: Existing smb sess not found
fs/cifs/cifssmb.c: secFlags 0x9
fs/cifs/cifssmb.c: Kerberos only mechanism, enable extended security
fs/cifs/transport.c: For smb_command 114
fs/cifs/transport.c: Sending smb: smb_len=78
fs/cifs/connect.c: RFC1002 header 0xbc
fs/cifs/transport.c: cifs_sync_mid_result: cmd=114 mid=1 state=4
fs/cifs/cifssmb.c: Dialect: 2
fs/cifs/asn1.c: OID len = 7 oid = 0x1 0x2 0x348 0x1bb92
fs/cifs/asn1.c: OID len = 6 oid = 0x1 0x3 0x5 0x1
fs/cifs/asn1.c: OID len = 7 oid = 0x1 0x2 0x348 0xbb92
fs/cifs/asn1.c: OID len = 10 oid = 0x1 0x3 0x6 0x1
fs/cifs/asn1.c: Need to call asn1_octets_decode() function for not_defined_in_RFC4178@please_ignore
fs/cifs/cifssmb.c: negprot rc 0
fs/cifs/connect.c: Security Mode: 0x3 Capabilities: 0x8000e2fc TimeAdjust: 0
fs/cifs/sess.c: sess setup type 4
fs/cifs/cifs_spnego.c: key description = ver=0x2;host=fileserver.example.com;ip4=1.2.3.4;sec=krb5;uid=0x0;creduid=0x0;user=acoder;pid=0xXXXXX
fs/cifs/sess.c: ssetup freeing small buf ffff8804359b02701
CIFS VFS: Send error in SessSetup = -126
fs/cifs/connect.c: CIFS VFS: leaving cifs_get_smb_ses (xid = 9) rc = -126
fs/cifs/connect.c: CIFS VFS: leaving cifs_mount (xid = 8) rc = -126
CIFS VFS: cifs_mount failed w/return code = -126
- In meinem Fall die autofs / cifs war auf der Suche für die falsche kerberos-ticket mit dem Namen und gab Fehler 126, also relevant sein können. Es war auf der Suche nach /tmp/krb5cc_12345678 Aber die eigentliche kerberos-ticket-Datei-Namen hatte 7 weitere chars am Ende und sieht wie folgt aus: /tmp/krb5cc_12345678_1A23B4 Finden Sie unter:unix.stackexchange.com/questions/519211/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Required key not available"
bedeutet, dasscifs.upcall
— laufen durch den kernel in der Antwort auf die Anfrage zum mounten stellt, war nicht in der Lage, Holen Sie sich ein Kerberos-ticket für den CIFS-server und generieren die Schlüssel für die Authentifizierung auf dem server (es würde gehen, in den kernel-keyring von der client-thread).cifs.upcall
Protokolledaemon.debug
; überprüfen Sie diese Nachrichten zuerst. In der Regel, dass die/var/log/daemon
, aber möglicherweise müssen Sie passen Sie Ihre syslog-Konfiguration zu debug-level-Nachrichten. Auf meinem system diese ungefähr so Aussehen:Normalerweise würden Sie verwenden einen mount-Befehl wie diesen:
Den
cruid
parameter teiltcifs.upcall
für das Konto dieses mount kommt. Es sieht für Kerberos credential caches ("ccaches") im Besitz dieses Konto (/tmp/krb5cc_*
) zuerst zu sehen, wenn das Konto angemeldet ist und über die aktuellen Anmeldeinformationen (z.B. wenn es eine person, und Sie haben das getankinit
); Sie können dies in Aktion zu sehen im log oben, wo es ist "unter Berücksichtigung der" verschiedenen ccaches. Wenn das fehlschlägt, versucht kinit mit einer keytab. Frühere Versionen verwenden Sie einfach den Standard-system-keytab, was bedeutet, dass der client-principal-Schlüssel muss es gehen (in der Regel/etc/krb5.keytab
). Spätere Versionen haben eine-K
Flagge, die Sie bereitstellen können pro-Benutzer keytabs für das offensichtlich besser, auf eine multi-user-system. Beachten Sie, dass Sie brauchen nicht das Passwort im Befehl mount; die keytab die die Informationen enthält.Eine separate Sache zu prüfen, ist, dass die Kerberos-Konfiguration auf dem client ermöglicht es Ihnen, eine CIFS-ticket für den server erfolgreich ist. E. g.:
Trotzdem gibt es viele Variablen; beginnen Sie mit der
cifs.upcall
debug-log und wir gehen von dort aus.(Beachten Sie, dass die erste Antwort ist verwirrt und falsch; Sie sollten es ignorieren. Es gibt keine Notwendigkeit zu verbinden der client-host dem Reich, und seine host-Prinzipal ist hier irrelevant.)
Unter der Annahme, dass du gepostet hast den vollen Inhalt Ihrer
krb5.keytab
scheint es zu sein, fehlt der host-key. Um eine erfolgreiche Authentifizierung im Namen des Benutzers, Ihre server benötigt, die beide ein Benutzer und ein service-ticket. Die einfachste Möglichkeit wäre, beizutreten, den server der Domäne durch sssd/samba (die füllen Ihre keytab mit , und fügen Sie dann den Benutzer auf die gleichen keytab.Sowieso, es gibt viele Möglichkeiten, das zu tun, aber Sie müssen sicherstellen, dass Ihre keytab (oder keytabs) haben beide Tasten, so dass es beide tickets.