Kerberos : Mise en place d'un serveur Kerberos
Contents
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.
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 :
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 :
Le fichier kdc.conf contient la configuration du serveur kerberos :
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) :
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).
kadmin.local |
kadmin.local |
3.2 Création de comptes
Nous pouvons déjà regarder les comptes principaux créés par défaut :
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
kadmin.local |
kadmin.local: ank admin/admin |
Il faut ensuite stocker la clé dans un fichier particulier appelé keytab :
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 :
/etc/krb5kdc/kadm5.acl |
*/admin@EXAMPLE.COM * |
3.3 Lancement du serveur
Le démarrage se fait comme suit :
restart |
/etc/init.d/krb5-admin-server restart /etc/init.d/krb5-kdc restart |
4 Installation Client
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 :
kinit |
$ kinit admin/admin@EXAMPLE.COM Password for admin/admin@EXAMPLE.COM: |
Affichage des tickets en cours:
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 :
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 :
/etc/pam.d/common-auth |
auth sufficient pam_krb5.so use_first_pass |
Editez /etc/pam.d/common-account :
/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 :
/etc/pam.d/common-password |
password sufficient pam_krb5.so use_authtok |
Editez /etc/pam.d/common-session :
/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 :
kadmin |
kadmin kadmin: ank olivier |
On peut maintenant faire un :
kiit |
kinit olivier@EXAMPLE.COM |
Nous allons maintenant créer l'utilisateur olivier sur le client :
useradd |
useradd olivier |
Editez le fichier /etc/shadow :
/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 :
ssh |
ssh olivier@client |
En faisant un tail -f /var/log/auth.log sur le serveur vous devriez obtenir :