5 - Kerberos & OpenLDAP

Submitted by silmaril (non vérifié) on mar, 09/15/2009 - 10:56

Comment s'identifier sur un annuaire OpenLDAP a partir d'une base Kerberos ?

Identification par ticket Kerberos

OpenLDAP gère le standard SASL qui va nous permettre de faire transiter nos tickets kerberos jusqu'a l'annuaire.

Pré-requis

Sur le serveur de l'annuaire et sur les clients les packages suivant seront nécessaires:

libsasl2-2
libsasl2-modules
libsasl2-modules-gssapi-mit

Configuration

## Configuration SASL (kerberos)

# Nom du REALM:
sasl-realm      ASYD.NET
# Nom du serveur local:
sasl-host       ldap.asyd.net
# Conversion des user Kerberos en UID ldap
#  deux possibilitées: 1/ une configuration user 'a plat' (tout dans une branch ou=users,dc=...,dc=...)
#    il suffit de mapper les nom via la regexp
sasl-regexp "^uid=([^,]+),cn=gssapi,cn=auth" "uid=$1,ou=Users,dc=asyd,dc=net"
#   2/ une config plus eclatée
#      dans ce cas il faut utiliser la regexp pour generer une recherche:
sasl-regexp     "^uid=([^,]+),cn=asyd.net,cn=gssapi,cn=auth" ldap:///dc=asyd,dc=net??sub?(uid=$1)

## This is a bit of a hack to restrict the SASL mechanisms that the
## server advertises to just GSSAPI.  Otherwise it also advertises
## DIGEST-MD5, which the clients prefer.  Then you have to add "-Y
## GSSAPI" to all of your ldapsearch/ldapmodify/etc. command lines, which
## is annoying.  The default for this is noanonymous,noplain so the
## addition of noactive is what makes DIGEST-MD5 and the others go away.
sasl-secprops noanonymous,noplain,noactive

Keytab

Il vous faudra aussi un keytab special pour l'annuaire avec un principal de la forme ldap/ldap.asyd.net@ASYD.NET. Personnellement je l'ai stocker a part dans /etc/ldap/krb/ldap.keytab et j'ai modifier /etc/default/slapd pour y ajouter export KRB5_KTNAME=/etc/ldap/krb/ldap.keytab

Identification par les mot de passes Kerberos (bind "simple")

Il est aussi possible de s'identifier en utilisant le mot de passe kerberos si la configuration cliente ne permet pas l'obtention d'un ticket.

Deux solutions pour cela, la premiere via un module pour openldap, la seconde via une extension de la configuration SASL.

Le module OpenLDAP

Pour cela vous aurez besoin des sources d'openldap, en effet dans le dossier "contrib/slapd-modules/passwd" il existe trois modules optionnel pour gérer des mécanismes de password supplémentares : Kerberos, Radius et "Netscape MTA-MD5".

Celui qui nous intéresse étant le premier, il faut le compiler par (attention, ne pas utiliser la syntaxe fournie dans le README, le module ne se chargera pas):

gcc -shared -I../../../include -Wall -lkrb5 -g -DHAVE_KRB5 -fPIC -o pw-kerberos.so kerberos.c

puis le copier dans /usr/lib/ldap/

(debian): cp pw-kerberos.so /usr/lib/ldap/

Dernière étape, il faut veiller a ce que les UserPassword soient stockés en clair dans l'annuaire, au format {kerberos}asyd@ASYD.NET.

Via SASL

Il semblerait qu'une autre solution existe pour ça via le demon saslauthd:

OpenLDAP With saslauthd

Attention dans ce cas il est probable que la configuration sasl faite dans la premiere partie soit incompatible:

## This is a bit of a hack to restrict the SASL mechanisms that the
## server advertises to just GSSAPI.  Otherwise it also advertises
## DIGEST-MD5, which the clients prefer.  Then you have to add "-Y
## GSSAPI" to all of your ldapsearch/ldapmodify/etc. command lines, which
## is annoying.  The default for this is noanonymous,noplain so the
## addition of noactive is what makes DIGEST-MD5 and the others go away.
sasl-secprops noanonymous,noplain,noactive