Autour de LDAP
Un article de Diablotins.org.
|
Sommaire
|
Autour de LDAP
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.
Présentation
LDAP est un service d'annuaire à accès rapide. il est composé :
- d'un démon SLAPD, qui donne accès, via ACL à un arbre LDIFF, le format de base arborescente de LDAP.
- d'un réplicateur SLURP, que noue n'étudirons pas ici, qui sert à monter des services haute disponibilité type maitre/esclave.
- d'un client, composé de commande simple pour lire, écrire et chercher dans l'arbre.
Installation du port
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 probème de dépendance notement pour pam_ldap et nss_ldap.
Nous allons prendre quelques petites précautions dans la compilation et pour les futurs upgrades de OpenLDAP on edite de /et/make.conf, pour empêcher d'utiliser SASL et SLURP.
# vi /etc/make.conf -- [...] # OpenLDAP tuning SLAPD_ONLY=YES WITHOUT_SASL=YES [...]
Comme d'habitude on installe OpenLDAP via les ports :
$ su -
ou sudo bash
# portinstall openldap20
Configuration du serveur
Nous allons configurer notre serveur LDAP pour une base de racine 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
On édite alors le fichier et on y met les lignes 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 schemas 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 d'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 le RC se configure ... pas terrible. donc vous devez editer : /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 bind qu'en IPV6 :(. Encore une fois ici, pour lancer :
# usr/local/etc/rc.d/slapd.sh start
Et pour stopper :
# usr/local/etc/rc.d/slapd.sh stop
On peut vérifier le lancement et le binding 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 respectivment 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, adapter le fichier base.ldiff Ă votre propre BASE LDAP.
ASTUCE : via vi on peut faire des substitutions de masses :
# vi base.ldiff
taper :
:%s/votre-domaine//g :%s/tld//g
Déchiffrage : j'ai posé les token 'votre-domaine' et 'tld', dans les fochiers LDIF d'exemple. et via vi, on tape ':' pour passer en mode command-line, 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 chaine de remplacement, enfin 'g' qui veut dire toute le 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 noeuds.
Test et commandes de base
Pour vérifier que la base est bien entrée, taper :
# 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', editer via vi, le fichier de mon archive, ldapuser_group.ldif et faite la meme 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 plusieur 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 password utiliser le port makepasswd
# portinstall makepasswd # echo 'monpassw' >./toto;makepasswd --crypt --clearfrom ./toto; rm toto
PAM_LDAP
Présentation
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.
Installation
Ici, on installe le ports :
# portinstall pam_ldap
Rien de particulier dans cette installation.
Configuration
Pour la configuration, nous avons déja fait le plus dure, 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
Présentation
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.
Installation
En faite, nss_switch est déja installé sur FreeBSD 5, mais c'est nss_ldap que l'on va installer.
# portinstall nss_ldap
Configuration
Pour la configuration, rien de plus dure :
# vi /etc/nsswitch.conf -- passwd: files ldap group: files ldap
Pour tester, on fait :
# id mon_user uid=10001(mon_user) gid=10000(ldapusers) groups=10000(ldapusers)
