2 - Installation d'un serveur de ticket esclave

Submitted by asyd (non vérifié) on dim, 08/12/2007 - 11:33

Cet article présente les étapes permettant la création d'un KDC secondaire.

Installation d'un KDC secondaire

Pré-requis

  • DNS:
    • Pointage OK
    • Reverse OK
  • Configuration cliente kerberos ok:
    • Fichier /etc/krb5.conf valide
    • /etc/krb5.keytab avec les entrées host/fqdn@REALM

Installation

A la debian's way:
aptitude install krb5-kdc

Il peut être intéressant de modifier la configuration de kerberos
pour définir la destination des messages de log du kdc. Pour cela éditez
le fichier /etc/krb5.conf, et rajoutez/modifiez la section logging:

...  ..
[logging]
        kdc = FILE:/var/log/kdc.log
        kdc = SYSLOG:INFO:DAEMON
....

Il faut ensuite ajouter une identité pour ce nouveau serveur dans notre base kerberos:
kadmin: addprinc -randkey host/kdc2.sysadmin.net
Principal "host/kdc2.sysadmin.net@SYSADMIN.NET" created.

Ce n'est pas le tout, il va falloir faire en sorte que notre serveur secondaire soit synchronisé avec le kdc primaire, sinon je vous dit pas la prise de tête...

Cela ce fait au travers d'un protocol dédié, implémenté par les outils kprop et kpropd. (Au moins pour MIT-Kerberos).

Aucune configuration automatique n'existe pour cela actuellement sous debian, il faut tout d'abord rajouter une ligne à la configuration (x)inetd pour prendre en charge le service krb5_prop.

Exemple:

krb5_prop       stream  tcp     nowait  root    /usr/sbin/kpropd krpopd

Ensuite il faut autoriser le kdc primaire à faire des mises à jours de la base. Pour cela inserez son principal dans le fichier /etc/krb5kdc/kpropd.acl sur l'esclave.
Exemple:

host/kdc1.sysadmin.net@SYSADMIN.NET

Initialisation du fichier /etc/krb5kdc/stash

Ce fichier critique contient une version cryptée du mot de passe de la base d'admin kerberos. Il permet l'échange et le decodage des bases d'identitées.

Deux méthodes sont utilisables, la première est la plus "propre", mise en place à l'époque de telnet & co, elle recrée la base en local et évite l'interception de donnée sensible, toutefois elle à l'inconvenient de vous demander la fameuse "master key" très complexe et très cachée.
L'initialisation se fait dans ce cas via kdb5_util stash -f /etc/krb5kdc/stash.

L'autre option, pour les feignasses que nous sommes est tout simplement de copier via SSH ou autre protocole sécurisé le fichier disponible sur votre kdc primaire ou un autre esclave.

Import initial

Il nous faut maintenant remplir notre base esclave avec toutes nos données disponibles sur notre KDC primaire, pour cela on executera depuis le serveur primaire les commandes suivantes:

kdb5_util dump /var/lib/krb5kdc/slave_datatrans
kprop -f /var/lib/krb5kdc/slave_datatrans kdc1.sysadmin.net

PS : Il peut arriver que cette opération ne fonctionne pas, notamment sur debian il m'est arrivé plusieurs fois de devoir copier avec SSH la base du serveur primaire pour pouvoir lancer la synchronisation (FIXME a vérifier...)

Mise en place d'une synchronisation régulière

La mise à jour des bases des kdc secondaires passe par une execution régulière des deux commandes précédentes (dump de la base puis propagation).
Une fois encore il n'existe aucun outil tout prêt pour cette opération, j'ai par exemple utilisé un script shell assez simple qui se charge de comparer l'état actuel de la base avec l'état précédent et si nécessaire de propager la nouvelle base à la liste des kdc secondaires définis.

Des améliorations sont envisageables (ex: utilisation entrées DNS SRV pour obtenir la liste des secondaires) mais ça marche:

#!/bin/sh
PATH=/usr/bin:/usr/sbin

kdclist="kdc2.sysadmin.net. kdc3.sysadmin.net."

[ -f /var/lib/krb5kdc/slave_datatrans ] && /bin/cp /var/lib/krb5kdc/slave_datatrans /var/lib/krb5kdc/slave_datatrans.old

kdb5_util dump /var/lib/krb5kdc/slave_datatrans

TMP=`/bin/mktemp`
diff --brief /var/lib/krb5kdc/slave_datatrans /var/lib/krb5kdc/slave_datatrans.old >$TMP

if [ -s $TMP ]; then
# replication uniquement si modifications
for kdc in $kdclist
do
        kprop -f /var/lib/krb5kdc/slave_datatrans $kdc
done

fi

/bin/rm $TMP

Il suffit ensuite de rajouter ce script dans une crontab root (important, pour pouvoir dumper la base
kerberos). Exemple:

5 */6 * * * root /usr/local/sbin/kdc_synch.sh &>/dev/null

Fichier attachéTaille
kdc_synch.sh558 octets