Openstuff Wiki : HowtoKerberos

HomePage :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register

Authentification via kerberos


Nous allons voir dans un premier temps la mise en place d'un serveur Kerberos sous GNU/Linux. Puis dans la seconde partie, nous verrons la configuration des clients ainsi que l'authentification système via PAM.

1 Installation/configuration du serveur


1.1 Installation des packages


# apt-get install krb5-kdc krb5-admin-server


1.2 Configuration


Le fichier krb5.conf devra être configuré sur l'ensemble des clients. Il permet d'indiquer les différents royaumes ainsi que leur KDC respectif (Key Distribution Center = serveur kerberos).

# vi /etc/krb5.conf


	    [libdefaults]
	            default_realm = EXAMPLE.COM
	            ...
	    [realms]
	            EXAMPLE.COM = {
	                    kdc = localhost
	                    admin_server = localhost
	                    default_domain = example.com
	            }
	            ...
	    [domain_realm]
	            .example.com = EXAMPLE.COM
	            example.com = EXAMPLE.COM
	            ...


Le fichier kdc.conf contient la configuration du serveur kerberos.

# vi /etc/krb5kdc/kdc.conf


	    [realms]
	    EXMAPLE.COM = {
	            ...
	    }


1.3 Création de la base Kerberos


La création de la base Kerberos se fait via la commande suivante (l'option -s permet de réaliser le stockage dans un fichier) :
# kdb5_util create -s


Le password qui serra demandé ici, permettra le chiffrement de la base. A partir de maintenant, nous pouvons vérifier l'accès au KDC via la commande kadmin.local. Cette dernière est identique à la commande kadmin mais outrepasse les ACL root (utilisation locale uniquement).

# kadmin.local


1.4 Création de comptes


Nous pouvons déjà regarder les comptes principaux créés par défaut :
kadmin.local:  listprincs
K/M@EXAMPLE.COM
kadmin/admin@EXAMPLE.COM
kadmin/changepw@EXAMPLE.COM
kadmin/history@EXAMPLE.COM
krbtgt/EXAMPLE.COM@EXAMPLE.COM


La création d'utilisateur passe par la commande ank : Add New key
kadmin.local:  ank admin/admin


Il faut ensuite stocker la clé dans un fichier particulier appelé keytab :
kadmin.local:  ktadd -k /etc/krb5kdc/kadm5.keytab kadmin/admin kadmin/changepw


Le fichier /etc/krb5kdc/kadm5.keytab devrait donc maintenant contenir les clés correspondantes.

Dernière chose, la mise en place des ACL permettant de donner tous les privilèges aux comptes ayant une instance admin :
vi /etc/krb5kdc/kadm5.acl

	    */admin@EXAMPLE.COM *


1.5 Lancement du serveur


Le démarrage se fait comme suit:
# /etc/init.d/krb5-admin-server restart
# /etc/init.d/krb5-kdc restart



2 Installation/configuration des clients


2.1 Installation des packages

apt-get install libpam-krb5 krb5-user


2.2 Configuration


Reprende le fichier /etc/krb5.conf du serveur.

2.3 Tests


Pour tester que tous fonctionnent correctement, vous devriez pouvoir effectuer la séquence suivante:

Obtention d'un ticket pour le principal admin:
# kinit admin/admin@EXAMPLE.COM
Password for admin/admin@EXAMPLE.COM:


Affichage des tickets en cours:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@EXAMPLE.COM

Valid starting     Expires            Service principal
06/07/06 11:53:47  06/07/06 21:53:11  krbtgt/EXAMPLE.COM@EXAMPLE.COM


Destruction du ticket:
# kdestroy




3 Mise en place de l'authentification système


3.1 Configuration de PAM


Sur le client, nous allons utiliser PAM. Pour ce faire, il faut ajouter les lignes suivantes aux différents fichiers:

vi /etc/pam.d/common-auth
auth        sufficient    pam_krb5.so use_first_pass


vi /etc/pam.d/common-account
account     [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] pam_krb5.so


vi /etc/pam.d/common-password
password    sufficient    pam_krb5.so use_authtok


vi /etc/pam.d/common-session
session     optional      pam_krb5.so


3.2 Ajout de l'utilisateur


Sur le serveur, création d'un utilisateur olivier:
# kadmin
kadmin:  ank olivier


On peut maintenant faire un kinit olivier@EXAMPLE.COM

Nous allons maintenant créer l'utilisateur olivier sur le client:
# useradd olivier
# vi /etc/shadow
olivier:*K*:13306:0:99999:7:::


Le mot de passe crypté qui est ici *K* est utilisé pour indiquer que le mot de passe provient de kerberos.

3.3 Test


D'une machine tierce faire un SSH sur le client Kerberos:
ssh olivier@client


En faisant un tail -f /var/log/auth.log sur le serveur vous devriez obtenir:
Jun  8 10:24:03 192.168.5.7 sshd[18175]: (pam_unix) check pass; user unknown 
Jun  8 10:24:03 192.168.5.7 sshd[18175]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=***  
Jun  8 10:24:03 ldapserver krb5kdc[602]: AS_REQ (7 etypes {18 17 16 23 1 3 2}) 192.168.5.7: NEEDED_PREAUTH: olivier@EXAMPLE.COM for krbtgt/EXAMPLE.COM@EXAMPLE.COM, Additional pre-authentication required
Jun  8 10:24:03 ldapserver krb5kdc[602]: AS_REQ (7 etypes {18 17 16 23 1 3 2}) 192.168.5.7: ISSUE: authtime 1149755043, etypes {rep=16 tkt=16 ses=16}, olivier@EXAMPLE.COM for krbtgt/EXAMPLE.COM@EXAMPLE.COM
Jun  8 10:24:03 192.168.5.7 sshd[18175]: Accepted keyboard-interactive/pam for olivier from 192.168.5.55 port 39932 ssh2 
Jun  8 10:24:03 192.168.5.7 sshd[14434]: (pam_unix) session opened for user olivier by (uid=0) 
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki
Page was generated in 0.0683 seconds