Ceci est une version archivée de
KerberosDebian à 2006-07-07 18:15:44.
Sur le serveur :
apt-get install krb5-admin-server krb5-kdc krb5-user
Sur les clients :
apt-get install krb5-user
Pour le "realm", il est recommandé de mettre son nom de domaine en majuscule, par exemple ENIX.FR, ou TOTO.COM (sans point final ni rien)
Ensuite, lancer sur le serveur :
kdb5_util create -r ENIX.FR -s pour créer les fichiers de base.
Puis, on peut lancer (toujours sur le serveur)
/etc/init.d/krb5-kdc start et
/etc/init.d/krb5-admin-server start.
À partir de là, pour manipuler la base Kerberos, il faut utiliser
kadmin. Au début, comme on n'a même pas le droit d'utiliser
kadmin, il faut lancer
kadmin.local qui fonctionne exactement pareil, sauf qu'il est destiné à être lancé en root, depuis le serveur Kerberos, et qu'il "bypass" la sécurité.
La plupart des programmes (kadmin, ktutil, ...) peuvent être lancés de manière intéractive, avec un joli "shell" qui fait de la complétion et tout ; ou bien en ligne de commande, en mettant la commande derrière l'option
-q ; par exemple pour créer un utilisateur on peut faire
kadmin -q "addprinc -pw lalala joe@TOTO.COM".
Chaque entité qui va utiliser Kerberos, qu'il s'agisse d'un client ou d'un serveur (ex: un serveur SSH qui va utiliser un Kerberos distant pour authentifier les clients) va se voir associer un
principal. En général, les
principals des utilisateurs sont de la forme
login@TOTO.COM ; pour les serveurs c'est de la forme
host/machine.domaine.com@TOTO.COM. Parfois on aura
servicename/machine.domaine.com@TOTO.COM. La construction des
principals est complètement arbitraire ; on peut très bien mettre
zob/lala/pouet@TOTO.COM même si ça ne servira à rien en pratique.
Pour ajouter un utilisateur :
kadmin.local -q "addprinc -pw pouetzob joe@TOTO.COM
Pour ajouter une machine sur laquelle on va faire tourner des services Kerbérisés :
kadmin.local -q "addprinc -randkey host/bighost.toto.lan@TOTO.COM"
Le
randkey équivaut à "génère moi un pass au hasard" ; c'est recommandé pour les hosts.
Si, comme ici, la machine est dans le domaine toto.lan au lieu de toto.com, il faut mettre dans
/etc/krb5.conf, dans la section
domain_realms, ajouter une ligne
.toto.lan=TOTO.COM qui veut dire : "les machines *.toto.lan sont rattachées au realm TOTO.COM", sinon par défaut il utilise le DNS.
À propos de DNS, il est impératif que le nom (bighost.toto.lan dans l'exemple) soit celui qu'on obtient en tapant
hostname -f sur la machine, sinon ça ne marchera pas :-)
Une fois qu'on a généré le principal, il faut générer le keytab, qui contient la clé de la machine :
kadmin.local -q "ktadd -k /tmp/bighost.keytab host/bighost.toto.lan@TOTO.COM" puis copier le fichier bighost.keytab sur la machine bighost, dans
/etc/krb5.keytab (lisible uniquement par le root, non backupé sur média non-safe, etc.)
Pour tester : sur un client, lancer
kinit (éventuellement
kinit joe@TOTO.COM si on veut se loger avec un
principal différent du login courant, et/ou sur un autre domaine que le domaine par défaut). Ensuite avec
klist on peut voir les "tickets" obtenus.
Ensuite pour pouvoir se loger avec SSH, il faut soit le package ssh-krb5, soit les nouveaux packages openssh-server et openssh-client. Côté serveur, il faut ajouter dans le
/etc/ssh/sshd_config une ligne
GSSAPIAuthentication yes et le relancer. Côté client, tester avec
ssh -o GSSAPIAuthentication=yes user@host, normalement ça doit marcher :) puis modifier si nécessaire le ssh_config ou le ~/.ssh/config pour activer GSSAPI au niveau global.
NFSV4 :
- installer libgssapi2 si nécessaire ; sur le serveur (et peut-être aussi le client?) vérifier que dans
/etc/gssapi_mech.conf la lib référencée existe bien (j'ai dû modifier /usr/lib/libgssapi_krb5.so en /usr/lib/libgssapi_krb5.so.2 par exemple)
- modifier
/etc/default/nfs-common et
/etc/default/nfs-kernel-server (sur le serveur) pour activer idmapd, gssd, et svcgssd. Relancer les services correspondants et vérifier qu'ils tournent tous
- sur chaque machine (client ou serveur), créer un principal nfs/nom.machine.com@REALM (et le mettre dans le keytab comme décrit plus haut pour SSH)
- vérifier que dans le
/etc/services on a bien une entrée
nfs 2049/tcp (l'ajouter si besoin)
- côté serveur, dans le
/etc/exports, mettre
/ gss/krb5(rw,no_root_squash,insecure,async,fsid=0) (on doit pouvoir mettre un mode moins flippant si nécessaire!)
- côté client,