Kerberos : Mise en place d'un serveur Kerberos

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Kerberos

Software version 5
Operating System Red Hat 6
Debian 6
Website
Last Update 06/10/2012
Others

1 Introduction

Kerberos est un protocole d'authentification réseau qui repose sur un mécanisme de clés secrètes (chiffrement symétrique) et l'utilisation de tickets, et non de mots de passe en clair, évitant ainsi le risque d'interception frauduleuse des mots de passe des utilisateurs. Créé au Massachusetts Institute of Technology (MIT), il porte le nom grec de Cerbère, gardien des Enfers (????????). Kerberos a d'abord été mis en œuvre sur des systèmes Unix.

Dans un réseau simple utilisant Kerberos, on distingue plusieurs entités :

  • le client (C), a sa propre clé secrète Kc
  • le serveur (S), dispose aussi d'une clé secrète Ks
  • le service d'émission de tickets (TGS pour Ticket-Granting Service), a une clé secrète KTGS et connaît la clé secrète KS du serveur
  • le centre de distribution de clés (KDC pour Key Distribution Center), connaît les clés secrètes KC et KTGS

Le client C veut accéder à un service proposé par le serveur S.

Kerberos-simple.png[1]

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.

2 Installation Serveur

Pour installer kerberos :

Command apt-get
aptitude install krb5-kdc krb5-admin-server

3 Configuration Serveur

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). Editez /etc/krb5.conf et adaptez à votre configuration :

Configuration File /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 :

Configuration File kdc.conf
	    [realms]
	    EXMAPLE.COM = {
	            ...
	    }

3.1 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) :

Command kdb5_util
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).

Command kadmin.local
kadmin.local

3.2 Création de comptes

Nous pouvons déjà regarder les comptes principaux créés par défaut :

Command kadmin.local
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

Command kadmin.local
kadmin.local:  ank admin/admin

Il faut ensuite stocker la clé dans un fichier particulier appelé keytab :

Command kadmin.local
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. Editez /etc/krb5kdc/kadm5.acl :

Configuration File /etc/krb5kdc/kadm5.acl
*/admin@EXAMPLE.COM *

3.3 Lancement du serveur

Le démarrage se fait comme suit :

Command restart
/etc/init.d/krb5-admin-server restart
/etc/init.d/krb5-kdc restart

4 Installation Client

Command apt-get
apt-get install libpam-krb5 krb5-user

5 Configuration du Client

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

5.1 Tests

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

Obtention d'un ticket pour le principal admin :

Command kinit
$ kinit admin/admin@EXAMPLE.COM
Password for admin/admin@EXAMPLE.COM:

Affichage des tickets en cours:

Command klist
$ 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 :

Command kdestroy
kdestroy

6 Mise en place de l'authentification système

6.1 Configuration de PAM

Sur le client, nous allons utiliser PAM. Pour ce faire, il faut ajouter les lignes suivantes aux différents fichiers. Editez le fichier /etc/pam.d/common-auth :

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

Editez /etc/pam.d/common-account :

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

Editez /etc/pam.d/common-password :

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

Editez /etc/pam.d/common-session :

Configuration File /etc/pam.d/common-session
session     optional      pam_krb5.so

6.2 Ajout de l'utilisateur

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

Command kadmin
kadmin
kadmin:  ank olivier

On peut maintenant faire un :

Command kiit
kinit olivier@EXAMPLE.COM

Nous allons maintenant créer l'utilisateur olivier sur le client :

Command useradd
useradd olivier

Editez le fichier /etc/shadow :

Configuration File /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.

6.3 Test

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

Command ssh
ssh olivier@client

En faisant un tail -f /var/log/auth.log sur le serveur vous devriez obtenir :

Command tail
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)

7 References

  1. ^ http://fr.wikipedia.org/wiki/Kerberos