“le mont d'erreur(126): La clé n'est pas disponible” avec CIFS & Kerberos
Mon application doit fixer un Isilon partager à l'aide de CIFS et Kerberos. Mon mount
tentative retourne: Required key not available
:
mount-t cifs //fileserver.example.com/client123/files
/mnt/client123/fichiers -o username=acoder,mot de passe=XXXXXX,sec=krb5
Réponse:
mount error(126): Required key not available
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Ici sont entrées correspondantes de /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
Fond & Config
J'ai ajouté un fichier keytab à l'aide de:
/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
Vérifié avec 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)
Voici 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
Billet cache:
# klist | grep "Ticket cache:"
Ticket cache: FILE:/tmp/krb5cc_0
Ce qui pourrait être à l'origine du "touche pas disponible" erreur?
EDIT:
J'ai activé le débogage dans CIFS, et a tenté de monter le partage de nouveau. Voici que sortie:
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
OriginalL'auteur a coder | 2015-09-17
Vous devez vous connecter pour publier un commentaire.
"Required key not available"
signifie quecifs.upcall
— géré par le noyau en réponse à la requête de montage — n'a pas été en mesure d'obtenir un ticket Kerberos pour un serveur CIFS et de qui génèrent la clé nécessaire pour l'authentification sur le serveur (il serait d'aller dans le noyau des porte-clés de la client thread).cifs.upcall
journaux àdaemon.debug
; vérifier les messages en premier. En général, la/var/log/daemon
, mais vous pouvez avoir besoin d'ajuster votre syslog configuration pour inclure les messages du niveau de débogage. Sur mon système, ces ressemble à:En règle générale, vous utilisez une commande de montage comme ceci:
La
cruid
paramètre indiquecifs.upcall
au nom de laquelle le compte de ce montage est en cours. Il va chercher les informations d'identification Kerberos caches (“ccaches”) appartenant à ce compte (/tmp/krb5cc_*
) d'abord, pour voir si ce compte est connecté et a informations d'identification actuelles (par exemple si c'est une personne et ils ont faitkinit
); vous pouvez le voir en action dans le journal ci-dessus où il est “vu” divers ccaches. Si cela échoue, il essaie de kinit avec un fichier keytab. Les versions antérieures suffit d'utiliser le système de keytab par défaut, ce qui signifie que le client principal de touches doit y aller (généralement/etc/krb5.keytab
). Les versions ultérieures ont un-K
drapeau que vous pouvez utiliser pour déployer par utilisateur keytabs pour cela, bien évidemment mieux sur un système multi-utilisateur. Notez que vous n'avez pas besoin du mot de passe dans la commande mount; le fichier keytab fournit cette information.Séparé chose à vérifier, c'est que la configuration Kerberos sur le client permet d'obtenir un CIFS billet pour le serveur de réussir à tous. E. g.:
De toute façon il y a beaucoup de variables; commencer avec la
cifs.upcall
journal de débogage, et allons à partir de là.(À noter que la première réponse est dans la confusion et le mal; vous devez l'ignorer. Il n'est pas nécessaire de joindre l'hôte client pour le royaume, et son hôte principal est hors de propos ici.)
OriginalL'auteur Richard E. Silverman
En supposant que vous avez posté l'intégralité du contenu de votre
krb5.keytab
, il semble manquer de l'hôte de la clé. Afin d'obtenir une authentification réussie pour le compte d'un utilisateur, votre serveur doit à la fois un utilisateur et un service de billetterie. Le plus simple serait de rejoindre le serveur pour le domaine par le biais de sssd/samba (qui permettrait de remplir votre fichier keytab , puis ajouter l'utilisateur à la même keytab.De toute façon, il y a beaucoup de façons de le faire, mais vous devez vous assurer que votre fichier keytab (ou keytabs) ont tous les deux touches, de sorte qu'il peut obtenir deux billets.
OriginalL'auteur Reinaldo Gomes