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.sh | 558 octets |
- Version imprimable
- Vous devez vous identifier ou créer un compte pour écrire des commentaires