Configuration du KDC

Toutes les opérations décrites sur cette page s’effectuent sur la machine virtuelle kdc. Utilisez vagrant ou un client ssh pour vous y connecter.

Paquets

Pendant la formation, nous utiliserons l’implémentation du MIT. Commencez par installer les paquets des composants serveurs Kerberos.

  • krb5-kdc : C’est le Key Distribution Center
  • krb5-admin-server : Service kadmin pour la gestion des principals depuis une autre machine
root@kdc:~# apt-get install  krb5-kdc krb5-admin-server

Pendant l’installation des paquets, le système pose plusieurs questions, voici comment y répondre :

  • Default Kerberos version 5 Realm = c’est le nom du royaume Kerberos, ici nous prendrons VBOX.TP (nom du domaine DNS en majuscules)
  • Kerberos servers for your realm = pour le moement il n’y a pas d’autre KDC dans le royaume Kerberos que nous construisons, indiquez uniquement kdc.vbox.tp
  • Administrative server for your Realm = dans notre royaume c’est aussi kdc.vbox.tp exécute ce service

Configuration du royaume Kerberos

Les questions posées au moment de l’installation des paquets, ont permis au système de générer un fichier /etc/krb5.conf. Il configure la biliothèque Kerberos (utilisée à la fois par la partie cliente et serveur).

Syntaxiquement, il s’agit de directives clé = valeur groupées par blocs ou sections. Chaque bloc possède un titre (encradré par des crochets [ ]).

Voir le fichier /etc/krb5.conf

Revenons sur plusieurs paramètres importants :

  • default_realm : le nom du royaume Kerberos
  • section [realms] : par royaume, liste des serveurs KDC et KAdmin
  • section [domain_realm] : correspondance entre zone DNS et royaume Kerberos

Un second fichier de configuration, /etc/krb5kdc/kdc.conf, indique au service KDC où trouver la base de données des principals, ainsi que les paramètrages par défaut relatifs aux encodages et durées de vie des tickets.

Voir le fichier /etc/krb5kdc/kdc.conf

Initialisation de la base des secrets et démarrage des services

Ici nous utiliserons une base de données locale au système pour enregistrer les secrets associés aux principals. Les secrets (ie. les mots de passe) ne seront pas stockés en clair, il seront chiffrés au moyen d’une clé de chiffrement spécifique : le database Master Password.

Initialisez la base de données et définissez votre database Master Password

root@kdc:~# kdb5_util create -s
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'VBOX.TP',
master key name 'K/M@VBOX.TP'
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: 

Vous pouvez maintenant démarrer les deux services Kerberos :

  • krb5-kdc pour la distribution de tickets
  • krb5-admin-server pour la gestion des principals
root@kdc:~# service krb5-kdc start
[ ok ] Starting Kerberos KDC: krb5kdc.
root@kdc:~# service krb5-admin-server start
[ ok ] Starting Kerberos administrative servers: kadmind.

Création d’un principal pour l’administrateur

Sur votre serveur KDC, ouvrez l’utilitaire kadmin.local. Cet outil en ligne de commande manipule les principals stockés dans le KDC. Avec listprincs, vous listez tous les principals disponibles.

root@kdc:~# kadmin.local
Authenticating as principal root/admin@VBOX.TP with password.
kadmin.local:  listprincs
K/M@VBOX.TP
kadmin/admin@VBOX.TP
kadmin/changepw@VBOX.TP
kadmin/kdc.prive@VBOX.TP
krbtgt/VBOX.TP@VBOX.TP

Vous constatez que plusieurs principals sont déjà présents. Ils ont été créés par la commande krb5util.

La liste des commandes disponibles dans kadmin.local sont définies dans la page de manuel et visibles à partir de l’aide en ligne en tapant ?.

kadmin.local:  ?
Available kadmin.local requests:

add_principal, addprinc, ank
                         Add principal
delete_principal, delprinc
                         Delete principal
modify_principal, modprinc
                         Modify principal
rename_principal, renprinc
                         Rename principal
change_password, cpw     Change password
get_principal, getprinc  Get principal
list_principals, listprincs, get_principals, getprincs
                         List principals
add_policy, addpol       Add policy
modify_policy, modpol    Modify policy
delete_policy, delpol    Delete policy
get_policy, getpol       Get policy
list_policies, listpols, get_policies, getpols
                         List policies
get_privs, getprivs      Get privileges
ktadd, xst               Add entry(s) to a keytab
ktremove, ktrem          Remove entry(s) from a keytab
lock                     Lock database exclusively (use with extreme caution!)
unlock                   Release exclusive database lock
purgekeys                Purge previously retained old keys from a principal
get_strings, getstrs     Show string attributes on a principal
set_string, setstr       Set a string attribute on a principal
del_string, delstr       Delete a string attribute on a principal
list_requests, lr, ?     List available requests.
quit, exit, q            Exit program.

Ici nous utiliserons principalement :

  • listprincs -> lister les principals
  • addprinc -> créer un principal
  • delprinc -> supprimer un principal
  • cpw -> changer le mot de passe associé à un principal
  • ktadd -> création d’une Keytab
  • quit -> pour sortir de l’utilitaire

Habituellement, les principals d’administrateurs Kerberos sont suffixés avec /admin. Ainsi, pour notre royaume VBOX.TP, si votre identifiant habituel est jack, votre principal d’administration sera jack/admin@VBOX.TP. A l’aide de kadmin.local, créez votre principal d’administrateur et définissez son mot de passe.

root@kdc:~# kadmin.local
Authenticating as principal root/admin@VBOX.TP with password.
kadmin.local:  addprinc jack/admin@VBOX.TP
WARNING: no policy specified for jack/admin@VBOX.TP; defaulting to no policy
Enter password for principal "jack/admin@VBOX.TP": 
Re-enter password for principal "jack/admin@VBOX.TP": 
Principal "jack/admin@VBOX.TP" created.

Vérifiez ensuite, avec listprincs, que votre principal a bien été créé.

kadmin.local:  listprincs
K/M@VBOX.TP
jack/admin@VBOX.TP
kadmin/admin@VBOX.TP
kadmin/changepw@VBOX.TP
kadmin/kdc.prive@VBOX.TP
krbtgt/VBOX.TP@VBOX.TP

Positionnement des ACL

Même si le principal jack/admin@VBOX.TP a été créé, aucun droit particulier ne lui a été attribué. Nous allons donc créer une ACL (Access Control List) où seront spécifiés les droits associés à chaque principal.

Dans le fichier /etc/krb5kdc/kdc.conf, le paramètre acl_file précise l’emplacement du fichier contenant les ACLs. Ici ce sera /etc/krb5kdc/kadm5.acl. Pour l’instant ce fichier n’existe pas. A nous de le créer.

C’est un fichier texte, ou chaque ligne représente une règle. Une ligne est composée de trois colonnes (séparées par des espaces).

  • Nom du principal d’administrateur
  • Permissions (cf. tableau ci-dessous)
  • Ensemble des principals que le principal d’administrateur cité en 1ère colonne peut atteindre avec cette règle
Permission Signification
a Ajout d’un principal au royaume Kerberos
d Suppression d’un principal du royaume Kerberos
m Modification des attributs d’un principal du royaume
c Changement de mot de passe d’un principal existant
i Obtention d’informations détaillées sur un prinipal
l Lister les principals du royaume
* (ou x) Combinaison de toutes les autorisations

Pour le moment, nous allons simplement autoriser l’administrateur créé précédemment à tout faire. Le contenu du fichier ACL sera donc simple.

jack/admin@VBOX.TP	*	*

Après chaque modification du fichier d’ACL, il est nécessaire de relancer le service kadmind.

root@kdc:~# service krb5-admin-server restart
[ ok ] Restarting Kerberos administrative servers: kadmind.

Vous pouvez maintenant vous connecter au moyen du principal d’administration que vous avez créé, en passant l’option -p, suivie du nom de votre principal, à l’utilitaire kadmin.

root@kdc:~# kadmin -p jack/admin@VBOX.TP
Authenticating as principal jack/admin@VBOX.TP with password.
Password for jack/admin@VBOX.TP: 
kadmin:

A vous de jouer, et de réaliser les opérations suivantes :

  1. Avec votre principal d’administration (jack/admin@VBOX.TP), créez un second principal d’administration (bob/admin@VBOX.TP).

  2. Au second principal, attribuez seulement les droits de changer les mots de passe.

  3. Avec ce second principal, vérifiez que vous ne pouvez créer de nouveau principal.

  4. Enfin, avec le second principal, définissez un nouveau mot de passe pour jack/admin@VBOX.TP.

Le royaume Kerberos VBOX.TP est prêt à fonctionner.

Correction du TP

Ce script configure le KDC automatiquement.

Copiez le sur la machine KDC, rendez-le exécutable (chmod), puis exécutez-le.