Gestion des utilisateurs et groupes

Comme nous l’avons vu dans l’article précédent, un annuaire LDAP est un arbre dans lequel on va pouvoir ajouter des unités d’organisation, des groupes ainsi que des utilisateurs. Tout au long de cet article nous verrons comment créer l’arborescence suivante :

ldap21.png

Le but étant de préparer l’annuaire dont je me servirai pour l’article sur l’authentification Basic via LDAP avec Apache2.

Pour ajouter des données dans un annuaire LDAP il faut respecter le format LDIF (LDAP Data Interchange Format) et pour cela il faudra, et ce quelques soit l’objet à ajouter, créer un fichier LDIF.

L’un des premiers points sur lequel je pense qu’il faut insister c’est la différence entre une OU (Organizational Unit) et un groupe. Parce que oui, les deux ne font pas la même chose. Globalement il faut comprendre qu’une OU va nous permettre d’appliquer des stratégies (sur un ensemble d’utilisateurs, ordinateurs, n’importe quoi) là où un groupe va nous permettre de gérer les contrôles d’accès (l’accès à certaines ressources, à certains serveurs etc…).

Dans la suite de l’article nous allons créer trois objets : une OU « utilisateurs », un groupe « apacheAdmin » et un unique utilisateur « Defte ». Une fois les objets créés nous ajouterons l’utilisateur « Defte » au groupe « apacheAdmin » et nous aurons fini.

I/ Création de l’OU utilisateurs

Pour créer l’OU « utilisateurs » j’utilise le fichier LDIF suivant :

dn: ou=utilisateurs, dc=whiteflag, dc=fr
objectclass: top
objectclass: organizationalUnit
ou: utilisateurs
description: Utilisateur du domaine

La première chose à noter c’est le DN :

dn: ou=utilisateurs, dc=whiteflag, dc=fr

Comme nous l’avons vu dans le précédent article, ce DN identifie de manière absolu l’objet dans notre annuaire. Ensuite on peut voir l’utilisation de l’attribut « objetclass »:

objectclass: top
objectclass: organizationalUnit

Ce sont des mots clés que vous reverrez à chaque fois que vous ajouterez un objet dans votre annuaire pour la simple et bonne raison qu’un objet, quel qu’il soit, a au moins un attribut objectclass.

Cet attribut objectclass va tout simplement identifier le rôle de notre objet au sein de notre annuaire. Ici notre objet a comme objectclass « organizationalUnit » puisque notre objet est une unité d’organisation.

Suivant les objectclass que vous attribuez à vos objets vous aurez l’obligation de renseigner certains attributs supplémentaires. Dans le cas de la création d’une OU avec l’attribut objectclass « organizationlUnit » je suis dans l’obligation de renseigner l’attribut « ou ». Vous pourrez aussi ajouter optionnellement certains attributs (comme l’attribut description par exemple).

Tous ces attributs sont définis dans ce que l’on appelle des schémas LDAP que vous pourrez consulter localement dans le répertoire /etc/ldap/schema (ou sur Internet ici).

NB : l’objetclass « top » est un objetclass abstrait que vous trouverez dans n’importe quel fichier LDIF de création d’objet. Son seul but est de forcer l’utilisation d’au moins un objetclass supplémentaire.

Maintenant que nous savons ce que fait notre fichier LDIF il est temps de l’importer dans notre annuaire. Pour cela on utilisera cette commande :

ldapadd -x -f utilisateursOU.ldif -W -D cn=admin,dc=whiteflag,dc=fr

Arguments :

-x : indique que l’on va s’authentifier à l’aide d’un identifiant/mot de passe à l’annuaire
– f : indique le nom du fichier ldif à ajouter
-W : indique à LDAP que nous allons nous authentifier à l’aide d’un mot de passe
-D : Distinguished Name de l’utilisateur à utiliser pour effectuer l’ajout (ici l’administrateur de l’annuaire)

Si tout s’est bien déroulé on devrait obtenir le résultat suivant :

ldap22.png

On pourra ensuite lister le contenu de notre annuaire à l’aide de cette commande :

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b dc=whiteflag,dc=fr

Arguments :

-LLL : limite l’output de la réponse au contenu de notre annuaire (supprime les commentaires)
-Y : indique que l’on va s’authentifier via la méthode EXTERNAL
-ldapi:/// : précise le protocole à utiliser pour effectuer la requête
-b : indique à partir de quel endroit effectuer la recherche (ici la racine de notre annuaire)

ldap23.png

Notre OU a bien été créé !

II/ Créer l’utilisateur Defte

Voici le fichier LDIF que je vais utiliser pour créer l’utilisateur « Defte » dans l’annuaire LDAP :

dn: cn=Defte, ou=utilisateurs, dc=whiteflag, dc=fr
objectClass: top
objectClass: posixAccount
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: Defte
cn: Defte
sn: Defte
givenName: Defte
uidNumber: 1001
gidNumber: 2001
homeDirectory: /home/defte
loginShell: /bin/bash
userPassword: superpassword1
mail: defte@whiteflag.fr
telephonenumber: 058565984x
title: Administrateur Apache
l: France
ou: users

Encore une fois on retrouve plusieurs objetclass dont voici une brève description.

  • posixAccount

Cet objetclass indique que l’utilisateur dispose d’un compte UNIX. Plusieurs attributs supplémentaires sont à spécifier :
– CN : le Common Name de l’objet
– UID : c’est le User ID. Il est sensé être unique
– UIDNumber : un identifiant numérique unique
-GIDNumber : un identifiant numérique de groupe unique
-homeDirectory : le path du répertoire home de l’utilisateur

  • person

Cet objetclass indique que l’utilisateur est une personne. Le seul attribut supplémentaire à ajouter est l’attribut sn (surname) qui ici a la même valeur que l’UID.

  • organizationalPerson

Un objet ayant l’objetclass « organizationalPerson » est tout simplement un objet qui fait partie d’une organisation (ici l’organisation whiteflag). Nous n’avons pas d’attributs supplémentaires à spécifier pour cet objetclass.

  • inetOrgPerson

Actually je ne savais pas réellement à quoi sert cet objetclass jusqu’à ce que je tombe sur cette page de manuel écrit par Oracle qui dit :

Specifies the inetOrgPerson object class. The inetOrgPerson object class is recommended for the creation of an organizational person entry because this object class includes the widest range of attributes. The uid attribute is required by this object class, and entries that contain this object class are named based on the value of the uid attribute.

Voilà globalement ce que l’on trouve dans un fichier LDIF utilisé pour la création d’un utilisateur. Pour l’ajouter encore une fois on utilisera cette commande :

ldapadd -x -f defteOU.ldif -W -D cn=admin,dc=whiteflag,dc=fr

ldap24.png

ldappasswd -H ldap://127.0.0.1 -x -D "cn=admin,dc=whiteflag,dc=fr" -W -S "uid=Defte,ou=utilisateurs,dc=whiteflag,dc=fr"

Vous pourrez ainsi renseigner le nouveau mot de passe de l’utilisateur puis confirmer le changement en entrant le mot de passe de l’administrateur de l’annuaire !

ldap25.png

III/ Créer le groupe apacheAdmin

Dernier élément à ajouter à notre annuaire pour qu’il soit complet : le groupe apacheAdmin. Voic le contenu du fichier LDIF :

dn: cn=apacheAdmin,ou=utilisateurs,dc=whiteflag,dc=fr
objectClass: top
objectClass: posixGroup
gidNumber: 1002

Que on l’ajoutera toujours à l’aide de la même commande :

ldapadd -x -f apacheAdminGroup.ldif -W -D cn=admin,dc=whiteflag,dc=fr

ldap26.png

Pour ajouter l’utilisateur « Defte » dans le groupe « apacheAdmin » on utilisera un fichier LDIF (eh oui encore) dont le contenu est le suivant :

dn: cn=apacheAdmin,ou=utilisateurs,dc=whiteflag,dc=fr
changetype: modify
add: memberuid
memberuid: Defte

Dans ce fichier on indique juste que l’on va ajouter un memberuid et que ce memberuid est l’UID de l’utilisateur « Defte ». Puis on va utiliser un troisième binaire ldapmodify qui va nous permettre de modifier notre annuaire :

ldapmodify -x -W -D "cn=admin,dc=whiteflag,dc=fr" -f addDefte.ldif

ldap27.png

Voilà ! On pourra ensuite s’assurer que notre utilisateur fait bien parti du groupe en utilisant cette commande :

ldapsearch -LLL -x -b "dc=whiteflag,dc=fr" gidNumber=1002

ldap28.png

Notre annuaire est prêt, on va donc pouvoir passer à l’authentification basic via LDAP !