Gérer un annuaire sur un réseau

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 :

  • gérer des utilisateurs sur un réseau d'entreprise
  • créer un annuaire mail accessible de partout
  • créer un serveur DNS léger pour un réseau local
  • pleins d'autres choses !

Installer son annuaire

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.

Configuration de l'annuaire

Choix de la hiérarchie

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.

Configuration du démon (/etc/conf.d/slapd)

Configuration de slapd (/etc/openldap/slapd.conf)

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 Control List

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 !

Utiliser son annuaire

Peupler l'annuaire

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,,,


Comment qu'on fait ???

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 !

Vérifier le contenu / exporter l'annuaire

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

1) cela peut n'avoir aucun rapport avec un éventuel nom de domaine
2) attention, il faut que le cn choisi puisse écrire dans l'annuaire
 
howto/production/openldap.txt · Dernière modification: 2008/02/04 10:03 par ths
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki