Ca fait bien longtemps que j’avais pas trituré LDAP sous un de mes OS favori : OpenBSD. Une nouveauté m’a attiré l’oeuil dans la version 4.4 d’OpenBSD : le programme ypldap. Ce programme permet de créer des maps (semblables aux maps NIS) en utilisant un backend OpenLDAP (à la place du serveur ypserv).
Ainsi on crée la relation de dépendance suivante : slapd -> ypldap -> ypbind -> login.
Pré requis pour le tutorial suivant :
- login_ldap installé
- openldap-client installé
1) Compilation de ypldap
Il faut récupérer les dernière sources de OpenBSD :
# export CVSROOT="anoncvs@anoncvs.de.openbsd.org:/cvs"
# cd /usr && cvs checkout -P src
# cd /usr/src/usr.sbin/ypldap
# make depend && make && make install
A ce stade, il peut se produire des erreurs par rapport à un fichier ldap.h manquant : vérifiez que vous avez installé le package openldap-client.
Sans erreurs, le programme est installé sur votre machine.
2) Configuration de ypldap (/etc/ypldap.conf)
On va mettre les informations concernant le serveur LDAP dans lequel aller chercher les informations (directory server) :
domain localdomain
interval 60
provide map passwd.byname
provide map passwd.byuid
provide map group.byname
provide map group.bygid
directory myldap.localdomain {
basedn "dc=my,dc=example=com"
passwd filter "(objectClass=posixAccount)"
attribute name maps to "uid"
fixed attribute passwd "*"
attribute uid maps to "uidNumber"
attribute gid maps to "gidNumber"
attribute gecos maps to "cn"
attribute home maps to "homeDirectory"
fixed attribute shell "/bin/ksh"
fixed attribute change "0"
fixed attribute expire "0"
fixed attribute class "ldap"
group filter "(objectClass=posixGroup)"
attribute groupname maps to "cn"
fixed attribute grouppasswd "*"
attribute groupgid maps to "gidNumber"
list groupmembers maps to "memberUid"
}Pour tester :
# ypldap -dv
configuration starting
applying configuration
connecting to directories
trying directory: X.X.X.X
starting directory update
starting directory update
updates are over, cleaning up trees now
flattening trees
pushing line: anonymous:*:4:3:ldap:0:/home/anonymous:/bin/ksh
pushing line: user1:*:1000:1000:ldap:12011:0:USER 1:/home/user1:/bin/ksh
pushing line: user1:*:1000:
[...]
Et voila, les maps sont crées sur le poste. Encore faut-il pouvoir y accéder.
3) ypbind
Pour pouvoir accéder aux maps fraîchement “pushées” il va falloir configurer ypbind en conséquence.
Rien de plus facile :
# echo localdomain > /etc/defaultdomain
# ypbind
Une fois que cela fonctionne, ne pas oublier d’ajouter les lignes suivantes aux fichiers de mots de passe et group :
#vipw
+:::::::::/bin/ksh
#echo "+:::" >> /etc/group
Pour prévenir le système qu’il doit compléter sa liste d’utilisateur (commande gentent passwd | shadow) avec des éléments contenus dans les maps.
4) Configuration du login.conf
On doit ajouter la section suivante au fichier /etc/login.conf :
ldap:\
:auth=-ldap:\
:x-ldap-server=myldap.localdomain,,starttls:\
:x-ldap-server-alt=mybackupldap.localdomain,,starttls:\
:shell=/bin/ksh:\
:x-ldap-basedn=dc=mapmo,dc=univ-orleans,dc=fr:\
:x-ldap-filter=(&(objectclass=posixAccount)(uid=%u)):\
:x-ldap-groupdn=ou=groups,dc=my,dc=example,dc=com:\
:x-ldap-groupfilter=(&(objectClass=posixGroup)(memberUid=%u)):\
:tc=default:5) Automatisation (partie grouik !! – Interdit aux moins de 18 ans)
Le service ypldap n’est pas encore très integrée à la version 4.4 d’OpenBSD. A priori le programme sera natif à la version 4.5.
Il faut d’abord modifier le /etc/rc en commentant certaines lignes :
if [ X`domainname` != X ]; then
#if [ -d /var/yp/`domainname` ]; then
# # YP server capabilities needed...
# echo -n ' ypserv'; ypserv ${ypserv_flags}
# #echo -n ' ypxfrd'; ypxfrd
#fi
#if [ -d /var/yp/binding ]; then
# # YP client capabilities needed...
# echo -n ' ypbind'; ypbind
#fiUne fois que ça c’est fait, ajouter dans le /etc/rc.local :
# Add your local startup actions here.
if [ X"${ypldap_flags}" != X"NO" ]; then
echo -n ' ypldap'
/usr/sbin/ypldap ${ypldap_flags} 1> /dev/null &
sleep 10
fi
if [ -d /var/yp/binding ]; then
# YP client capabilities needed...
echo -n ' ypbind'; ypbind
fiNe pas oublier de mettre un “sleep” après le lancement du ypldap sinon ça laisse pas de traces mais ypbind se vautre en attente du ypldap.
Enfin dans le /etc/rc.conf.local :
portmap=YES ypldap_flags=""
Voila comment intégrer ypldap dans un OpenBSD 4.4 current. J’ai pas trouvé comment gérer plus proprement les dépendances entre les différents services. Sinon, J’ai essayé les mêmes manipulations en récupérant la branche patch (cd /usr; cvs checkout -P -rOPENBSD_4_4 src) et ca merde. Le ypldap marche pas (problème DNS, option basedn non reconnue etc.). Enfin je n’ai pas réussi (pour le moment) à avoir les groupes secondaires d’un utilisateur.