Autour de LDAP
De Diablotins.org.
| LDAP, service d'annuaire
|
| ||
LDAP est un service d'annuaire à accès rapide. il est composé :
ATTENTION : ce document ne fonctionne intégralement que pour FreeBSD 5.1 et synchronisé sur CURRENT. Il met en évidence les manques de l'implémentation de PAM dans la branche CURRENT de FreeBSD et montre combien il faut être prudent avec cette version PARFOIS instable de FreeBSD. |
Sommaire |
Installation
Pour le moment je vous conseil de choisir la version 2.0 de OpenLDAP, l'implémentation libre principale de LDAP, la version 2.1 est disponible, mais pause encore trop de problème de dépendance notamment pour “pam_ldap” et “nss_ldap”.
Nous allons prendre quelques petites précautions dans la compilation et pour les futurs évolutions de OpenLDAP, éditer /etc/make.conf pour éviter l'utilisation de “SASL” et “SLURP”.
# vi /etc/make.conf -- [...] # OpenLDAP tuning SLAPD_ONLY=YES WITHOUT_SASL=YES [...]
Installez net/openldap24-server, où «24» est la version en cours.
Configuration du serveur
Nous allons configurer notre serveur LDAP pour une base de racine de type domaine. On doit renommer le fichier de configuration d'exemple :
# mv /usr/local/etc/openldap/slapd.conf.default /usr/local/etc/openldap/slapd.conf
Éditez alors le fichier pour ajouter les entrées suivantes :
# vi usr/local/etc/openldap/slapd.conf -- include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/nis.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/samba.schema include /usr/local/etc/openldap/schema/outlook.schema pidfile /var/run/slapd.pid argsfile /var/run/slapd.args loglevel 10 database ldbm suffix "dc=votre-domaine,dc=tld" rootdn "cn=admin,dc=votre-domaine,dc=tld" rootpw vote_password_en_clair directory /var/db/openldap-ldbm index objectClass eq access to attribute=userPassword by dn="cn=admin,dc=votre-domaine,dc=tld" write by anonymous auth by self write by * none access to * by dn="cn=admin,dc=votre-domaine,dc=tld" write by self write by * read
Deux des schémas ne sont pas des schémas standards, vous les trouverez sur mon site dans l'espace «download» ou via : “ldapconfig.tgz”.
le fichier est au format TARBALL GZIP, pour décompresser, poser le fichier dans votre home et rappel :).
# tar xvzf ldapconfig.tgz
Copier les schémas en place :
# mv outlook.schema /usr/local/etc/openldap/schemas/ # mv samba.schema /usr/local/etc/openldap/schemas/
Lancement du serveur SLAPD
Vous devez ici aussi renommer le script RC fournis en exemple.
# mv /usr/local/etc/rc.d/slapd.sh.sample /usr/local/etc/rc.d/slapd.sh
Attention ici le port comporte un petit détail, la configuration par défaut ... n'est pas terrible.
Donc vous devez éditer : “/usr/local/etc/rc.d/slapd.sh” et remplacer la ligne :
slapd_args=
par
slapd_args='-h ldap://votre_ip_de_bind'
Sinon OpenLDAP ne se lie qu'à une adresse en IPV6 :(.
lancer :
# usr/local/etc/rc.d/slapd.sh start
Stopper :
# usr/local/etc/rc.d/slapd.sh stop
On peut vérifier le lancement et les liaisons de LDAP par :
# ps afx|grep slapd 794 ?? Ss 0:10.33 /usr/local/libexec/slapd -h ldap://192.168.1.8
et
# netstat -a |grep ldap tcp4 0 0 mescaline.ldap *.* LISTEN
Configuration du client
Pour vous faciliter la vie en local, et pour plus tard avec NSSWITCH et PAM, on configure le client sur le LDAP local.
# vi /usr/local/etc/openldap/ldap.conf -- host votre_ip base dc=votre-domaine,dc=tld binddn cn=admin,dc=votre-domaine,dc=tld bindpw votre_password_en_clair scope sub pam_password crypt pam_crypt local
Les deux dernières ligne sont pour PAM et NSSWITCH, qui nous oblige à créer deux liens symboliques car ils vont lire respectivement dans “/etc et /usr/local/etc”.
# ln -s /usr/local/etc/openldap/ldap.conf /etc/ldap.conf # ln -s /usr/local/etc/openldap/ldap.conf /usr/local/etc/ldap.conf
Initialisation d'une base LDIF USER SMB/POSIX
Depuis l'archive TARBALL de tout à l'heure, adaptez le fichier “base.ldiff” à votre propre base LDAP. ASTUCE : via vi on peut faire des substitutions de masses :
# vi base.ldiff
tapez :
:%s/votre-domaine//g :%s/tld//g
Déchiffrage : j'ai posé les jetons 'votre-domaine' et 'tld', dans les fichiers LDIF fournis en exemple.
via vi, on tape ':' pour passer en mode command, puis % veut dire 'de la ligne 0 à la dernière ligne', 's' veut dire 'substitute' et c'est bien ce qu'on veut faire, s'en suis une REGEXP compatible PERL et sa chaîne de remplacement, enfin 'g' qui veut dire toute la ligne.
Promis je le referai plus !
Nous allons insérer la structure de la base sur l'annuaire LDAP :
# ldapadd -D 'cn=admin,dc=votre-domaine,dc=tld' -w -f base.ldif
Normalement vous pouvez lire les confirmations pour un peu moins d'une dizaines de nœuds.
Test et commandes de base
Pour vérifier que la base est bien entrée, tapez :
# ldapsearch
Vous devez voir la copie de la structure de “base.ldif”.
Création de groupe et du premier utilisateur
Pour créer le premier groupe, 'ldapusers', editez via vi le fichier de mon archive, “ldapuser_group.ldif” et faite la même substitution,
dn: cn=ldapusers,ou=Groups,dc=votre-domaine,dc=tld objectClass: posixGroup cn: ldapusers gidNumber: 10000
Puis,
# ldapadd -D 'cn=admin,dc=votre-domaine,dc=tld' -w -f ldapuser_group.ldif
Pour le premier utilisateur, faite pareil en changeant votre login et les infos, ici il faut modifier plusieurs lignes.
dn: uid=roms,ou=Users,dc=votre-domaine,dc=tld
objectClass: inetOrgPerson
objectClass: posixAccount
cn: votre_login
sn: votre_login
uid: votre_login
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/votre_login
loginShell: /usr/local/bin/zsh
gecos: Robert DUSHMOL
description: Robert DUSCHMOL
userPassword: {crypt}votre_MD5_ETC_PASSWD
Pour créer votre mot de passe utiliser le port “makepasswd”
# portinstall makepasswd # echo 'monpassw' >./toto;makepasswd --crypt --clearfrom ./toto; rm toto
PAM_LDAP
PAM : Pluggable Authentification Module, est le centre nevralegique de l'authentification sur un système UNIX, quant on l'utilise et qu'il est implémenté correctement, et .. sur FreeBSD, pas encore, par exemple Passwd, ....
Ici, nous lui ajoutons le module PAM_LDAP, qui lui aussi connait ses limites, on espère qu'elle ne durerons pas trop longtemps.
PAM_LDAP authentifie depuis un annuaire LDAP, comme son nom l'indique.
Installez le port “security/pam_ldap”.
Configuration
Pour la configuration, nous avons déja fait le plus dur, maintenant c'est du PAM classique. On prend pour exemple SSHD, on ajoute donc pour toutes les facilités PAM, les lignes suivantes dans le fichier “/etc/pam.d/sshd” :
# vi /etc/pam.d/sshd -- [...] auth sufficient pam_ldap.so try_first_pass account sufficient pam_ldap.so use_authtok session optional pam_ldap.so use_authtok password sufficient pam_ldap.so use_authtok [...]
Pour tester, il suffit de se connecter, via sshd sur un user LDAP.
NSS_LDAP
NS_SWITCH est le système de resolution local des noms, c'est par lui qu'est censé, passer les résolutions, UID/GID -> user/groupe, DNS, hosts, NIS, etc .... Mais hélas, pour le moment tout ça n'est que sur le papier. Mais n'oublions pas que FreeBSD 5.X n'est pas une branche stable.
Par exemple, 'ls' ne passe pas par ns_switch... Vous pouvez tout de même changer 'ls' par 'gnuls', la commande Linux.
# portinstall gnuls
Ici vous optiendrez bien les noms et pas les UID/GID.
En fait, nss_switch est déja installé sur FreeBSD 5, mais c'est le port net/nss_ldap que l'on va installer.
Configuration
Pour la configuration, rien de plus simple:
# vi /etc/nsswitch.conf -- passwd: files ldap group: files ldap
Vérifiez:
# id mon_user uid=10001(mon_user) gid=10000(ldapusers) groups=10000(ldapusers)
Note
Cet article a été rédigé alors que la branche V de FreeBSD suivait l'étiquette «CURRENT».
A l'heure où j'écris ces lignes, c'est la branche VII qui suit cette étiquette.
Beaucoup de choses ont du changer, ne serait ce que dans les versions des ports conseillés ici.
--David Marec 11 oct 2008 à 14:47 (CEST)

