Tickets et fichiers Keytab

Dans cette partie du TP, nous allons nous intéresser à la partie client d’un royaume Kerberos. Ici, nous allons voir comment obtenir et manipuler des tickets.

L’ensemble des opérations de cette page se feront sur la machine clinux. Si ce n’est pas déjà fait, vous devez la démarrer avec vagrant et vous y connecter par SSH.

vagrant up clinux
vagrant ssh clinux

Avant tout, nous devons installer les outils Kerberos et définir leur configuration.

root@clinux:~# apt-get install krb5-user krb5-doc libpam-krb5 libsasl2-modules-gssapi-mit

Suite à l’installation des paquets, il convient, comme pour le serveur KDC, de configurer la bibliothèque Kerberos à l’aide du fichier /etc/krb5.conf.

Voir le fichier /etc/krb5.conf

Pour la suite du TP, il est conseillé d’ouvrir une fenêtre de terminal (ssh) sur la machine virtuelle KDC et de lancer la commande ci-dessous afin de voir les opérations coté serveur KDC (fichier journal).

root@kdc$ tail -f /var/log/krb5kdc.log

Obtention d’un Ticket Granting Ticket

Le Ticket Granting Ticket (TGT) est le premier ticket que reçoit le client du Serveur d’Authentification (AS). Il est obtenu avec la commande kinit suivie du nom du principal pour lequel un TGT souhaite être obtenu.

root@clinux$ kinit jack/admin@VBOX.TP

Au prompt, le mot de passe à saisir est celui donné, sur le KDC, au moment de la création du principal.

Le Credential Cache

Les tickets reçus du serveur sont stockés dans un magasin local (ie. sur la machine cliente) : c’est le Credential Cache (CC). Il s’agit d’un simple fichier, généralement placé dans le dossier temporaire (/tmp). Son nom est de la forme krb55cc_x, où x est généralement remplacé par le numéro d’utilisateur.

Le contenu du Credential Cache est visualisable avec la commande klist.

root@clinux$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: jack/admin@VBOX.TP

Valid starting    Expires           Service principal
12/09/2014 12:05  12/09/2014 22:05  krbtgt/VBOX.TP@VBOX.TP
        renew until 13/09/2014 12:04

La variable d’environnement KRB5CCNAME ou l’option -c permettent de spécifier le fichier Credential Cache dont on veut lister le contenu.

Obtention d’un Ticket Granting Service (TGS)

Nous allons obtenir un Ticket Granting Service (TGS) de façon à pouvoir être authentifié par l’outil kadmin sans saisir le mot de passe associé un principal d’administration.

root@clinux$ kinit -S kadmin/kdc.vbox.tp@VBOX.TP jack/admin@VBOX.TP
Password for jack/admin@VBOX.TP: 

Visualiser le contenu du Credential Cache après l’obtention de ce TGS.

root@clinux$ klist

Grâce à l’option -c de l’outil kadmin, nous pouvons ouvrir une session d’administration des principals, sans avoir à saisir de mot de passe

root@clinux:~# kadmin -c /tmp/krb5cc_0 
Authenticating as principal jack/admin@VBOX.TP with existing credentials.
kadmin:

Création d’un fichier keytab

Les ordinateurs du royaume, comme les utilisateurs, ont également besoin de pouvoir obtenir des tickets. Comme il est difficile de leur faire saisir un mot de passe, le secret Kerberos est consigné dans fichier spécifique nommé keytab.

Pour la machine clinux, nous allons utiliser kadmin pour créer un principal associé avec la machine et exporter le secret Kerberos (ie. une clé aléatoire) dans le fichier keytab. En effet, dans kadmin, l’option -randkey de la commande addprinc permet d’affecter un secret aléatoire au principal.

root@clinux:~# kadmin -c /tmp/krb5cc_0 
Authenticating as principal jack/admin@VBOX.TP with existing credentials.
kadmin:  addprinc -randkey host/clinux.vbox.tp@VBOX.TP
WARNING: no policy specified for host/clinux.vbox.tp@VBOX.TP; defaulting to no policy
Principal "host/clinux.vbox.tp@VBOX.TP" created.  

Par convention, les princiapls associés aux ordinateurs (les comptes machine en quelque sorte) sont préfixés avec host/.

Exporter ensuite ce secret dans un fichier keytab, qui sera local à la machine clinux.

kadmin : ktadd -k /etc/krb5.keytab host/clinux.vbox.tp@VBOX.TP
Entry for principal host/clinux.vbox.tp@VBOX.TP with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/clinux.vbox.tp@VBOX.TP with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/clinux.vbox.tp@VBOX.TP with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/clinux.vbox.tp@VBOX.TP with kvno 2, encryption type des-cbc-crc added to keytab WRFILE:/etc/krb5.keytab.

Un fichier Keytab est maintenant disponible dans /etc/krb5.keytab. Comme il contient un secret Kerberos, il est primordial de protéger l’accès à ce fichier.

root@clinux$ chown root.root /etc/krb5.keytab
root@clinux$ chmod 600 /etc/krb5.keytab

Destruction de tous les tickets en cours

La commande kdestroy détruit tous les tickets en stock dans le Credential Cache.

  1. Lister les tickets du Credential Cache sur la VM clinux

  2. Détruire tous ces tickets en appelant la commande kdestroy

  3. Vérifier que le Credential Cache est bien vide

Obtention d’un TGT à partir d’un fichier Keytab

Pour finir, regardons comment faire pour obtenir un Ticket Granting Ticket à partir d’un fichier Keytab.

Dans la pratique, nous n’avons pas à faire cela. Ce sont les logiciels serveurs qui s’en chargent automatiquement. Cet exercice est juste là pour illustration pédagogique

C’est la commande kinit qu’il faut l’utiliser.

  • L’option -k indique que le secret Kerberos sera pris dans un fichier Keytab
  • L’option -t spécifie le fichier Keytab à utiliser
  • Le principal spécifié en dernier argument est celui de l’ordinateur soit host/clinux.vbox.tp@VBOX.TP
  1. Vérifier qu’aucun ticket n’est présent dans le Credential Cache

  2. Obtenir un TGT à partir du fichier Keytab

  3. Vérifier que le TGT est bien présent dans le Credential Cache