Autour de LDAP

Un article de Diablotins.org.


Image:brush.png

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)
Récupérée de « http://diablotins.org/index.php/Autour_de_LDAP »
Projets :
Boîte à outils