Le but de howto est d'apprendre à configurer un annuaire simple pour différentes utilisations. Le protocole d'annuaire que j'utiliserais est LDAP pour Lightweight Directory Access Protocol. Je vous fait grâce de l'historique de LDAP, vous trouverez cela facilement sur Wikipédia.
Un tel annuaire peut servir pour :
Une des implémentations de LDAP est celle d'OpenLDAP qui se base sur des travaux de l'université du Michigan (on s'en fout d'ailleurs). On va donc installer OpenLDAP.
pacman -S openldap
Comme on va aussi vouloir gérer son annuaire, on va également rajouter les outils de gestions des annuaires LDAP :
pacman -S openldap-clients
Et hop, on a tout ce qu'il nous faut.
Il faut maintenant configurer notre annuaire.
Le protocole LDAP est un protocole d'annuaire hiérarchique. C'est à dire que les choses ne sont pas rangées n'importe comment ou n'importe où. Le classement trivial est un classement alphabétique, mais celui-ci atteint vite ses limites lorsques qu'on dispose de plusieurs sites, ou de plusieurs organisations. On va donc définir une hiérarchie pour l'annuaire :
dc=fr # on utilise le tld comme premier noeud
\
dc=archlinux # le nom de domaine (sans le tld bien sûr)
/ \
ou=people ou=groups # les types (personnes ou groupes)
/ \ \
uid=archbot uid=judd cn=wiki # entrées
| | \
différentes infos sur numéro gid etc
chaque utilisateur
Ici je vais un peu tricher puisque le schéma de nommage est celui de nis (compatible avec nss et autres). La branche ou=people sera l'analogue de /etc/passwd et ou=groups sera l'analogue de /etc/group. Vous verrez comment on peut faire sensiblement les mêmes choses. Ce choix est assez important, puis qu'il rentrera dans la définition de nos bases de données.
La première chose à faire est d'inclure les schémas dont nous aurons besoin. Ceux-ci se trouvent dans /etc/openldap/schemas, et se chargent avec la directive include pour donner
include /etc/openldap/schema/core.schema include /etc/openldap/schema/corba.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/java.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/ppolicy.schema include /etc/openldap/schema/quota.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/openldap.schema
L'ordre des schémas est important, puis que certains schémas dépendent de d'autres.
Les directives
pidfile /var/run/slapd.pid argsfile /var/run/slapd.args
sont là pour la gestion des scripts d'initialisations et compagnie.
Le chargement de modules spécifiques se fait grâce à la directive moduleload :
modulepath /usr/lib/openldap/openldap moduleload back_shell.so
On arrive ensuite à la définition de notre première base de données (database). La directive database définit une base de donnée et donc un annuaire. On peut en définir autant qu'on veut/que le système le permet. Cette directive permet aussi de spécifier le type de base de données. Ici, j'ai choisi une base de donnée de type Berkeley DataBase (c'est ce qui est recommandé). Cela se fait de la façon suivante :
database bdb
On va ensuite définir le suffixe de l'annuaire. Ici, cela sera archlinux.fr1)
suffix "dc=archlinux,dc=fr"
On va ensuite passer quelques paramètres de checkpoint
checkpoint 32 30 # <kbyte> <min>
On va aussi définir un super-user sur l'annuaire \o/ :
rootdn "cn=admin,dc=archlinux,dc=fr"
#rootpw secret
# You shall avoid cleartext passwords !
rootpw {SSHA}8gCBYKzcQFyPEN03HLzRRPvtHmesOjPN
Mais comment fait-on pour obtenir un mot de passe crypté ? Ben il suffit de demander à slappasswd :
endymion@hyperion:~$ sudo slappasswd
New password:
Re-enter new password:
{SSHA}8gCBYKzcQFyPEN03HLzRRPvtHmesOjPN
La directive directory permet d'indiquer dans quel répertoire seront stockés les fichiers :
# The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/openldap-data
Et enfin, on finit par
# Indices to maintain index objectClass eq
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=archlinux,dc=fr" write
by anonymous auth
by self write
access to dn.base="" by * read
access to *
by dn="cn=admin,dc=archlinux,dc=fr" write
by * read
permet d'avoir des acl assez fines sur l'annuaire. Le fichier de conf est suffisament bien documenté pour pouvoir rajouter ses propres règles d'accès !
Maintenant qu'on a un annuaire, il faut le peupler. Pour cela, on va créer la hiérarchie que nous avons défini plus haut :
dn: dc=archlinux,dc=fr objectClass: domain dc: archlinux dn: ou=people,dc=archlinux,dc=fr ou: people objectClass: top objectClass: organizationalUnit dn: ou=group,dc=archlinux,dc=fr ou: group objectClass: top objectClass: organizationalUnit
Pour rajouter une entrée :
dn: uid=endymion,ou=people,dc=archlinux,dc=fr
uid: endymion
cn: Vincent-Xavier JUMEL
givenName: Vincent-Xavier
sn: JUMEL
mail: endymion@archlinux.fr
mailRoutingAddress: endymion@archlinux.fr
mailHost: mail.archlinux.fr
objectClass: inetLocalMailRecipient
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}!
shadowLastChange: 13686
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/endymion
gecos: Vincent-Xavier JUMEL,,,
Il existe pleins de solutions pour discuter avec LDAP. La plus simple et la plus sûre, c'est d'utiliser ldapadd qui s'utilise de la façon suivante2) :
ldapadd -h ldap.archlinux.fr -D 'cn=admin,dc=archlinux,dc=fr' -x -W
Mais bon, ca va quand on a une entrée à ajouter, rapidos car il faut rentrer ligne par ligne les champs ldif. Une autre solution consiste à mettre son enregistrement dans un fichier ldif :
cat >> base.ldif << EOF dn: dc=archlinux,dc=fr objectClass: domain dc: archlinux dn: ou=people,dc=archlinux,dc=fr ou: people objectClass: top objectClass: organizationalUnit EOF
en séparant les enregistrements par une ligne blanche. Puis il suffit de faire
ldapadd -h ldap.archlinux.fr -D 'cn=admin,dc=archlinux,dc=fr' -x -W -f 'base.ldif'
Bon, sachez qu'il existe aussi ldapdel et ldapmodify dont les noms se passent de commentaires !
Si vous avez un accès root sur le serveur, il suffit de faire
slapcat | less
Sinon, sous réserve que tout soit bien configurer, il suffit de faire
ldapsearch -h ldap.archlinux.fr -D 'dc=archlinux,dc=fr'
*
— vincentxavier 24/06/2007 01:33