L’objectif de ce TP est de montrer comment sauvegarder le contenu d’un KDC afin de le réinjecter dans un autre KDC. Comme second, nous utiliserons la machine virtuelle kdc2. Vous pouvez la construire dès à présent.

vagrant up kdc2

Stockage des secrets dans un annuaire LDAP

Pour ce KDC, nous allons utiliser un stockage des secrets dans un annuaire. Commencer par installer les paquets nécessaires. Laisser vide les réponses aux questions posées par DebConf. Par conséquent, les daemons Kerberos risquent de ne pas démarrer.

root@kdc2$ apt-get install slapd krb5-kdc-ldap ldap-utils

Par défaut, le paquet slapd installe la configuration de l’annuaire dans l’annuaire lui-même (branche cn=Config). Afin de simplifier les choses, nous utiliserons un fichier de configuration slapd.conf. Commencer par arrêter le service

root@kdc2$ service slapd stop

Dans le fichier /etc/default/slapd, positionner dans la variable ci-dessous le chemin d’accès au fichier de configuration slapd.conf.

SLAPD_CONF=/etc/ldap/slapd.conf

Afin de protéger les secrets Kerberos stockés dans l’annuaire LDAP, celui-ci sera accessible uniquement sur l’interface de loopback. Toujours dans le fichier /etc/default/slapd, définir la variable SLAPD_SERVICES comme ci-dessous.

SLAPD_SERVICES="ldap://127.0.0.1:389/"

Le stockage de secrets Kerberos implique d’étendre le shéma de l’annuaire. Ajouter le schéma ci-dessous (venu avec le paquet krb5-kdc-ldap) avec les autres schéma de l’annuaire.

root@kdc2$ cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz /etc/ldap/schema
root@kdc2$ gunzip /etc/ldap/schema/kerberos.schema.gz

L’installation du paquet a créé une base LDAP. La supprimer, afin de pouvoir la remplacer par celle qui contiendra les secrets Kerberos.

root@kdc2$ rm -rf /var/lib/ldap/*

Ajouter le fichier de configuration ci-dessous dans le répertoire /etc/ldap.

Voir le fichier /etc/ldap/slapd.conf

Démarrer maintenant le service slapd. Contrôler que tout s’est bien passé en regardant le fichier journal /var/log/syslog.

root@kdc2$ service slapd restart

A l’aide du fichier ci-dessous, initialiser le contenu de l’annuaire. L’ajout de ces entrées s’effectue avec la commande ldapadd et l’administrateur de l’annuaire, dont le mot de passe est Ld@p.

Voir le fichier init.ldif

root@kdc2$ ldapadd -x -H ldap://127.0.0.1 -D cn=admin,dc=vbox,dc=tp -W -f init.ldif

A l’aide du fichier ci-dessous, ajouter deux comptes applicatifs qui seront utilisés par les daemons du KDC pour manipuler les secrets. La version chiffrée des mots de passe de ce fichier a été obtenue avec la commande slappasswd.

  • Le mot de passe pour cn=kdc-service est WV68B7Kb
  • Le mot de passe pour cn=adm-service est DfQKSUmc

Voir le fichier kdc-accounts.ldif

root@kdc$ ldapadd -x -H ldap://127.0.0.1 -D cn=admin,dc=vbox,dc=tp -W -f kdc-accounts.ldif

Configuration du KDC

Installer les paquets nécessaires.

root@kdc2$ apt-get install krb5-kdc krb5-admin-server

Configurer le royaume à l’aide du fichier /etc/krb5.conf ci-dessous.

Voir le fichier krb5.conf

Dans le fichier /etc/krb5kdc/kdc.conf, il y plusieurs paramètres à spécifier afin que le KDC utilise l’annuaire LDAP.

Dans la section realms, pour le royaume VBOX.TP ajouter une ligne database_module = myldap. Elle indique d’utiliser le module myldap (décrit plus bas). Ajouter ensuite la section [dbmodules] ci-dessous.

[dbmodules]
        myldap = {
                db_library = kldap
                ldap_kdc_dn = "cn=kdc-service,dc=vbox,dc=tp"

                # this object needs to have read rights on
                # the realm container, principal container and realm sub-trees
                ldap_kadmind_dn = "cn=adm-service,dc=vbox,dc=tp"

                # this object needs to have read and write rights on
                # the realm container, principal container and realm sub-trees
                ldap_service_password_file = /etc/krb5kdc/service.keyfile
                ldap_servers = ldap://127.0.0.1
                ldap_conns_per_server = 5

		# Place to store Kerberos secrets
		ldap_kerberos_container_dn = "ou=krbcontainer,dc=vbox,dc=tp"
        }

La directive ldap_service_password_file indique le fichier où seront stockés les mots de passe des comptes applicatifs pour ajouter/modifier les principal dans l’annuaire. Ajouter les mots de passe (cf. plus haut) dans ce fichier avec les commandes suivantes.

root@kdc2$ kdb5_ldap_util -D cn=admin,dc=vbox,dc=tp stashsrvpw -f /etc/krb5kdc/service.keyfile cn=kdc-service,dc=vbox,dc=tp
root@kdc2$ kdb5_ldap_util -D cn=admin,dc=vbox,dc=tp stashsrvpw -f /etc/krb5kdc/service.keyfile cn=adm-service,dc=vbox,dc=tp

Ensuite, il reste à créer le royaume Kerbeors au sein de l’annuaire LDAP. La commande vous demandera de saisir le Master Key Password. En parallèle, garder un oeil sur le fichier journal /var/log/syslog afin de voir les requêtes LDAP.

root@kdc2$ kdb5_ldap_util -D cn=admin,dc=vbox,dc=tp create -subtrees dc=vbox,dc=tp -r VBOX.TP -s -H ldap://127.0.0.1

Les services Kerberos peuvent maintenant être démarrés.

root@kdc2$ service krb5-kdc start
root@kdc2$ service krb5-admin-server start

Test de fonctionnement

Revenir sur la machine clinux. Dans le fichier /etc/krb5.conf, modifier la configuration du royaume de façon à ce qu’il interroge le replica Kerberos nouvellement installé.

[realms]
        VBOX.TP = {
                kdc = kdc2.vbox.tp
                admin_server = kdc2.vbox.tp
        }
  1. Ajouter un principal d’administration sur le nouveau KDC, par exemple jack/admin@VBOX.TP.

  2. Définir une ACL où ce principal possède les droits d’administration. Ne pas oublier de relancer les service Kerberos.

  3. Demander un Ticket Granting Ticket (TGT) pour ce principal (depuis clinux), avec la commande kinit.

  4. Vérifier que le ticket est bien présent dans le Credential cache.

Transfert des secrets entre les KDC

Maintenant que nous avons un second KDC, il reste à le peupler avec les principals existant dans le premier KDC (machine virtuelle kdc).

Ici nous allons transférer les secrets kerberos de la machine kdc vers la machine kdc2 par le biais d’un fichier. Depuis le premier KDC (machine kdc), lancer la commande ci-dessous pour copier les secrets dans un fichier texte.

root@kdc$ kdb5_util dump -verbose /root/dump-krb5.dat

A l’aide de la commande scp, copier ce fichier vers le nouveau KDC (machine kdc2)

root@kdc$ scp /root/dump-krb5.dat vagrant@kdc2:

Sur le nouveau KDC (machine kdc2), injecter les secrets à partir du fichier.

root@kdc2$ kdb5_util load -verbose -update /home/vagrant/dump-krb5.dat

Vérifier que tous les secrets sont bien présents, dans le nouveau KDC, avec la commande listprincs de l’outil kadmin.local.