Configuration du KDC

Le Key Distribution Center est la pièce maitresse de l'usine. Il assure deux fonctions:

  • l'authentification des utilisateur (AS comme Authentication Server) ;
  • la distribution de tickets d'autorisation pour les services que souhaite obtenir l'utilisateur (TGS comme Ticket Granting Server).

Nous allons détailler son installation pour, dans un premier temps, réaliser l'authentification des utilisateurs.

le krk5.conf

L'installation du paquet krb5-config a créé un fichier /etc/krb5.conf qu'il a adapté en fonction de quelques questions posées par le script d'installation. Le contenu de ce fichier est beaucoup trop compliqué pour nos petits besoins. En voici une version propre à nous satisfaire :

[libdefaults]
        default_realm = MAISON.MRS
        dns_lookup_realm = false
        dns_lookup_kdc = false

[realms]
MAISON.MRS = {
         kdc = 192.168.0.133
        admin_server = 192.168.0.133
        default_domain = MAISON.MRS
}

[domain_realm]
        .maison.mrs = MAISON.MRS
        maison.mrs = MAISON.MRS

[logging]
        default = FILE:/var/log/krb5.log
        kdc = FILE:/var/log/krb5kdc.log
        admin-server = FILE:/var/log/krb5adm.log

L'analogie entre les noms du domaine DNS et du royaume kerberos n'est pas un hasard. Lorsque l'on construit un royaume kerberos, c'est généralement au sein d'un domaine DNS, autant leur donner le même nom. Simplement, un nom de royaume s'écrit toujours en lettres capitales. Ce qui est surtout une commodité avec le kerberos du MIT devient une obligation avec le kerberos d'Active Directory.

Si vous voulez en savoir plus sur les divers paramètres de ce fichier de configuration, installez le paquet krb5-doc qui contient entre autres le manuel de krb5.conf.

le kdc.conf

L'installation de krb5-kdc a créé un répertoire /etc/krb5kdc qui contient actuellement un unique fichier kdc.conf :

[kdcdefaults]
    kdc_ports = 750,88

[realms]
    MAISON.MRS = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        kdc_ports = 750,88
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }

Il n'y a rien à redire à cette configuration, mais il y a à remarquer qu'il est fait référence à trois fichiers qui n'existent pas encore : /var/lib/krb5kdc/principal, /etc/krb5kdc/kadm5.keytab et /etc/krb5kdc/kadm5.acl. Autant dire que l'usine ne va pas démarrer toute seule, il y a encore du travail à faire.

Création de la base du royaume

Il faut commencer par créer la base de données pour notre royaume MAISON.MRS. Le moyen le plus standard de le faire est d'employer la commande kdb5_util :

kerberos:~# kdb5_util -r MAISON.MRS create -s
Loading random data
... (un (long) moment plus tard)...
Initializing database '/var/lib/krb5kdc/principal' for realm 'MAISON.MRS',
master key name 'K/M@MAISON.MRS'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: 
Re-enter KDC database master key to verify: 

Le mot depasse demandé ici a toutes les chances de ne jamais servir, sauf en cas de maintenance forcée de la base. En cas d'oubli, point de salut…

En attendant, /var/lib/krb5kdc/ a été peuplé :

kerberos:/var/lib/krb5kdc# ls -l
total 16
-rw------- 1 root root 8192 févr. 13 15:57 principal
-rw------- 1 root root 8192 févr. 13 15:57 principal.kadm5
-rw------- 1 root root    0 févr. 13 15:57 principal.kadm5.lock
-rw------- 1 root root    0 févr. 13 15:57 principal.ok

Pour démarrer l'usine, il nous faut encore un fichier /etc/krb5kdc/kadm5.acl, même vide pour l'instant :

kerberos:/etc/krb5kdc# touch /etc/krb5kdc/kadm5.acl

Normalement, nous pouvons maintenant faire démarrer la bête :

kerberos:/etc/krb5kdc# /etc/init.d/krb5-kdc start
kerberos:/etc/krb5kdc# /etc/init.d/krb5-admin-server start
kerberos:/etc/krb5kdc# ps aux | grep krb
root      2363  0.0  0.1   3468   556 ?        Ss   16:06   0:00 /usr/sbin/krb5kdc
kerberos:/etc/krb5kdc# ps aux | grep kadmin
root      2367  0.0  0.1   3424   736 ?        Ss   16:07   0:00 /usr/sbin/kadmind

Un administrateur du royaume

Nous allons maintenant créer un « principal » pour un administrateur de ce royaume. A ce stade, nous ne pouvons le faire que localement, car il faut disposer d'un principal d'administrateur du royaume pour pouvoir le faire à distance. C'est le coup de l'œuf et de la poule…

Utilisons pour ceci la commande interactive kadmin.local :

kerberos:/etc/krb5kdc# kadmin.local 
Authenticating as principal root/admin@MAISON.MRS with password.

kadmin.local:  add_principal -clearpolicy chris/admin

Enter password for principal "chris/admin@MAISON.MRS": 
Re-enter password for principal "chris/admin@MAISON.MRS": 
Principal "chris/admin@MAISON.MRS" created.
kadmin.local:  quit

Ici, quelques explications ne sont sans doute pas superflues.

  • le principal root/admin@MAISON.MRS est fictif, du moins pour l'instant, et n'est utilisable que par la commande kadmin.local. C'est l'œuf originel (ou la poule), en quelque sorte ;
  • une fois l'outil d'administration interactif local démarré, nous créons un « vrai » principal avec la commande:
    add_principal -clearpolicy chris/admin
    cette commande va créer le principal chris/admin avec un mot de passe associé. Nous ne nous préoccupons pas pour l'instant des « policy » ;
  • ce principal est ici constitué de deux parties :
    • la partie à gauche du /, obligatoire, et qui devrait correspondre à un utilisateur UNIX, ici chris ;
    • la partie à droite du /, optionnelle, qui sert à distinguer les différents rôles que peut jouer un même utilisateur, ici admin. Nous n'allons pas tarder à en comprendre le sens.

Nous allons maintenant justement définir les privilèges qu'accordent le rôle admin pour la gestion du royaume :

kerberos:~# echo '*/admin *' >> /etc/krb5kdc/kadm5.acl

Nous ajoutons dans « l' Access Control List » une ligne qui veut dire en français : tous les principaux affublés du rôle « admin » (*/admin) auront tous les droits d'administration ( *).

Nous avons désormais un œuf (ou une pondeuse) et nous pouvons tester si la reproduction va pouvoir se faire dans de bonnes conditions. Mais avant, il faut redémarrer le service d'administration de l'usine (à cause de la modification de l'ACL):

kerberos:/etc/krb5kdc# /etc/init.d/krb5-admin-server restart

Voyons d'abord s'il est possible de s'authentifier avec ce principal :

kerberos:/etc/krb5kdc# kinit -V chris/admin
Password for chris/admin@MAISON.MRS: 
Authenticated to Kerberos v5

Ça marche. Utilisons maintenand la commande kadmin assez proche de kadmin.local à part qu'elle est utilisable depuis tout hôte correctement configuré (krb5.conf) où elle est installée et qui nécessite absolument de s'identifier comme /admin :

kerberos:/etc/krb5kdc# kadmin -p chris/admin
Authenticating as principal chris/admin with password.
Password for chris/admin@MAISON.MRS: 
kadmin:  add_principal -clearpolicy chris
Enter password for principal "chris@MAISON.MRS": 
Re-enter password for principal "chris@MAISON.MRS": 
Principal "chris@MAISON.MRS" created.

Nous avons créé un principal pour chris, mais cette fois-ci sans aucun rôle particulier. Le mot de passe devrait être différent de celui du principal chris/admin, pour des raisons de sécurité bien entendu.

profitons pour lire la liste des principaux existants :

kadmin:  list_principals
K/M@MAISON.MRS
chris/admin@MAISON.MRS
chris@MAISON.MRS
kadmin/admin@MAISON.MRS
kadmin/changepw@MAISON.MRS
kadmin/history@MAISON.MRS
kadmin/kerberos.maison.mrs@MAISON.MRS
krbtgt/MAISON.MRS@MAISON.MRS

Nous retrouvons bien les deux principaux que nous avons créés, avec en plus quelques autres, créés avec la base de données du royaume.

Si vous avez bien suivi, vous devez pouvoir répondre correctement à la question suivante : Est-ce que la commande kadmin -p chris va permettre de créer de nouveaux principaux ? Essayez pour voir si vous avez « juste ».

Bon. Le royaume existe, dispose d'un administrateur (chris/admin) et d'un sujet (chris). Pour l'instant, c'est une petite usine. Nous allons maintenant ajouter dans le royaume une simple station de travail, avec les outils nécessaires pour obtenir une authentification kerberos depuis notre « KDC ».