Kerberos et LDAP
La plupart des gens n'utiliseront pas Kerberos directement, une fois qu'un utilisateur est authentifié (Kerberos), nous avons besoin de comprendre ce que cet utilisateur peut faire (autorisation). Et ce serait la tâche de programmes comme LDAP.
Répliquer une bases de données de « principals » Kerberos entre deux serveurs peut être compliqué, et cela ajoute une base de données supplémentaire d'utilisateurs à votre réseau. Heureusement, MIT Kerberos peut être configuré pour utiliser un annuaire LDAP comme base de données de « principals ». Ce section couvre la configuration de serveurs Kerberos primaire et secondaire pour utiliser OpenLDAP pour cette base de données.
Les exemples présentés ici utilisent MIT Kerberos et OpenLDAP.
Configuration OpenLDAP
Tout d'abord, le schéma nécessaire doit être chargé sur un serveur OpenLDAP qui dispose d'une connectivité réseau avec les centres de distribution de clés primaires et secondaires (KDC). La suite de cette section considère que vous disposez aussi d'une réplication LDAP configurée entre au moins deux serveurs. Pour plus de détails concernant la configuration de OpenLDAP, voir Serveur OpenLDAP.
Il est également nécessaire de configurer OpenLDAP pour les connexions TLS et SSL, de sorte que le trafic entre les serveurs KDC et LDAP soit chiffré. Voir TLS pour plus de détails.
cn=admin,cn=config est un utilisateur que nous avons créé avec les droits pour éditer la base de données ldap. De nombreuses fois, il est le RootDN. Modifiez sa valeur en fonction de vos réglages.
-
Pour charger le schéma dans LDAP, installez le paquet krb5-kdc-ldap sur le serveur LDAP. Saisissez dans un terminal :
sudo apt-get install krb5-kdc-ldap
-
Ensuite, décompressez le fichier kerberos.schema.gz :
sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/
-
Le schéma Kerberos doit être ajouté à l'arborescence cn=config. La procédure pour ajouter un nouveau schéma à slapd est également expliquée dans Modification de la base de données de configuration slapd.
-
Créez d'abord un fichier de configuration schema_convert.conf, ou tout autre nom vous convenant, avec les données suivantes :
include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/kerberos.schema
-
Créez un dossier temporaire pour recevoir les fichiers LDIF :
mkdir /tmp/ldif_output
-
Maintenant, servez-vous de slapcat pour convertir les fichiers de schéma :
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s \ "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif
Modifiez si nécessaire le nom et l'emplacement du fichier.
-
Modifiez le fichier /tmp/cn\=kerberos.ldif généré, en changeant les attributs suivants :
dn: cn=kerberos,cn=schema,cn=config ... cn: kerberos
Et supprimez les lignes suivantes à la fin du fichier :
structuralObjectClass: olcSchemaConfig entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc creatorsName: cn=config createTimestamp: 20090111203515Z entryCSN: 20090111203515.326445Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20090111203515Z
Les valeurs des attributs peuvent varier, assurez-vous simplement qu'ils soient supprimés.
-
Chargez le nouveau schéma avec ldapadd :
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif
-
Ajoutez un index pour l'attribut krb5principalname :
ldapmodify -x -D cn=admin,cn=config -W Saisissez le mot de passe LDAP : dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: krbPrincipalName eq,pres,sub modifying entry "olcDatabase={1}hdb,cn=config"
-
Enfin, mettez à jour la liste de contrôle d'accès (ACL) :
ldapmodify -x -D cn=admin,cn=config -W Saisissez le mot de passe LDAP : dn: olcDatabase={1}hdb,cn=config replace: olcAccess olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn="cn=admin,dc=exemple,dc=com" write by anonymous auth by self write by * none - add: olcAccess olcAccess: to dn.base="" by * read - add: olcAccess olcAccess: to * by dn="cn=admin,dc=exemple,dc=com" write by * read modifying entry "olcDatabase={1}hdb,cn=config"
-
Voila, votre annuaire LDAP est maintenant prêt à servir de base de données de « principals » Kerberos.
Configuration du KDC primaire
Avec OpenLDAP opérationnel, il est temps de configurer le KDC.
-
Tout d'abord, installez les paquets nécessaires. Saisissez dans un terminal :
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
-
Maintenant, modifiez /etc/krb5.conf en ajoutant les options suivantes dans les sections appropriées :
[libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # 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 = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }
Remplacez example.com, dc=example,dc=com, cn=admin,dc=example,dc=com, et ldap01.example.com par votre domaine, objet LDAP et serveur LDAP de votre réseau, respectivement.
-
Ensuite, utilisez kdb5_ldap_util pour créer le domaine :
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees \ dc=example,dc=com -r EXAMPLE.COM -s -H ldap://ldap01.example.com
-
Créez un fichier de dissimulation (stash) du mot de passe utilisé pour la liaison au serveur LDAP. Ce mot de passe est utilisé par les options ldap_kdc_dn et ldap_kadmin_dn du fichier /etc/krb5.conf :
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f \ /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com
-
Copiez le certificat de l'AC depuis le serveur LDAP :
scp ldap01:/etc/ssl/certs/cacert.pem . sudo cp cacert.pem /etc/ssl/certs
Et modifiez /etc/ldap/ldap.conf pour utiliser le certificat:
TLS_CACERT /etc/ssl/certs/cacert.pem
Le certificat devra également être copié vers le KDC secondaire, afin de permettre la connexion aux serveurs LDAP en utilisant LDAPS.
Vous pouvez maintenant ajouter des utilisateurs Kerberos à la base de données LDAP et ils seront copiés aux autres serveurs LDAP configurés pour la réplication. Pour ajouter un utilisateur se servant de l'utilitaire kadmin.local, entrez :
sudo kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin.local: addprinc -x dn="uid=steve,ou=people,dc=example,dc=com" steve WARNING: no policy specified for steve@EXAMPLE.COM; defaulting to no policy Enter password for principal "steve@EXAMPLE.COM": Re-enter password for principal "steve@EXAMPLE.COM": Principal "steve@EXAMPLE.COM" created.
Les attributs krbPrincipalName, krbPrincipalKey, krbLastPwdChange, et krbExtraData devraient maintenant être ajoutés à l'objet utilisateur uid=steve,ou=people,dc=example,dc=com. Utilisez kinit et klist pour tester si l'utilisateur reçoit effectivement un ticket.
Si l'objet utilisateur est déjà créé, l'option-x dn = "..." est nécessaire pour ajouter les attributs de Kerberos. Autrement, un nouvel objet utilisateur sera créé dans les sous-domaines.
Configuration secondaire de KDC
Configurer un KDC secondaire en utilisant le moteur LDAP est semblable à une configuration utilisant la base de données Kerberos normale.
-
Tout d'abord, installez les paquets nécessaires. Saisissez dans un terminal :
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
-
Ensuite, modifiez /etc/krb5.conf pour utiliser le moteur LDAP :
[libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # 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 = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }
-
Créez un fichier de dissimulation (stash) pour y stocker le mot de passe de liaison à LDAP :
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f \ /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com
-
Maintenant, sur le KDC principal, copiez le fichier de dissimulation de la clé maitresse/etc/krb5kdc/.k5.EXAMPLE.COM sur le KDC secondaire. Assurez-vous de copier le fichier via une connexion chiffrée telle que scp, ou via des supports physiques.
sudo scp /etc/krb5kdc/.k5.EXAMPLE.COM steve@kdc02.example.com:~ sudo mv .k5.EXAMPLE.COM /etc/krb5kdc/
De nouveau, remplacez EXAMPLE.COM par votre domaine réel.
-
De retour sur le KDC secondaire, (re)démarrez seulement le serveur ldap,
sudo service slapd restart
-
Enfin, démarrez le démon krb5-kdc:
sudo service krb5-kdc start
-
Vérifiez que les deux serveurs ldap (et Kerberos par extension) sont synchronisés.
Vous avez maintenant des KDCs redondants sur votre réseau, et avec des serveurs LDAP redondants, vous devriez être en mesure de continuer à authentifier les utilisateurs si un serveur LDAP, un serveur Kerberos, ou un serveur LDAP et un serveur Kerberos deviennent indisponibles.
Ressources
-
Le Guide d'administration de Kerberos contient des détails supplémentaires.
-
For more information on kdb5_ldap_util see Section 5.6 and the kdb5_ldap_util man page.
-
Another useful link is the krb5.conf man page.
-
Vous pouvez également consulter la page de wiki Ubuntu sur Kerberos et LDAP.