Centralized authentication using OpenLDAP/fr

This guide introduces the basics of LDAP and shows you how to setup OpenLDAP for authentication purposes between a group of computers.

Qu'est-ce que LDAP ?
LDAP signifie Lightweight Directory Access Protocol (Protocole Allégé pour accès à des annuaires). Basé sur X.500 il couvre la plupart de ses fonctions primaires, mais ne possède pas ses fonctions les plus ésotériques. Maintenant, qu'est-ce que ce X.500 et pourquoi LDAP existe-t-il ?

X.500 is a model for Directory Services in the OSI concept. It contains namespace definitions and the protocols for querying and updating the directory. However, X.500 has been found to be overkill in many situations. Enter LDAP. Like X.500 it provides a data/namespace model for the directory and a protocol. However, LDAP is designed to run directly over the TCP/IP stack. See LDAP as a slim-down version of X.500.

Je n'ai pas saisi. Qu'est-ce qu'un annuaire ?
Un annuaire est une base de données spécialisée conçue pour des interrogations fréquentes mais avec des mises à jour moins fréquentes. Au contraire des bases de données générales, il ne comprend pas de prise en charge des transactions ou de fonctionnalités de retour en arrière. Les annuaires sont facilement répliqués pour en augmenter la disponibilité et la fiabilité. Lorsque les annuaires sont répliqués, des incohérences temporaires sont autorisées jusqu'à ce qu'elles soient synchronisées à la fin.

Comment l'information est-elle structurée ?
Toutes les informations dans un annuaire sont organisées de manière hiérarchisée. Même plus, si vous voulez entrer des données dans un annuaire, cet annuaire doit savoir comment ranger ces informations dans un arbre. Jetons un coup d'œil à une société imaginaire et un arbre similaire à Internet :

Structure de l'organisation de GenFic, une société Gentoo imaginaire

Since you don't feed data to the database in this ascii-art like manner, every node of such a tree must be defined. To name such nodes, LDAP uses a naming scheme. Most LDAP distributions (including OpenLDAP) already contain quite a number of predefined (and general approved) schemas, such as the inetOrgPerson, or a frequently used schema to define users which Unix/Linux boxes can use, called posixAccount. Note there are GUI web based tools to make managing LDAP painless: see Working with OpenLDAP for an non-exhaustive list.

Les utilisateurs intéressés sont encouragés à lire le guide d'administration de OpenLDAP.

So... What can it be used for?
LDAP peut être utilisé pour différentes choses. Ce document est centré sur la gestion centralisée d'utilisateurs, en conservant tous les comptes utilisateur dans un emplacement LDAP unique (ce qui ne veut pas dire qu'il est hébergé sur un serveur unique, LDAP prenant en charge une haute disponibilité et la redondance), bien que d'autres objectifs peuvent être atteints en utilisant LDAP également.


 * Infrastructure de clés publiques


 * Calendrier partagé


 * Carnet d'adresses partagé


 * Espace de stockage pour DHCP, DNS, ...


 * Directives de configuration des classes système (conserver la trace de la configuration de plusieurs serveurs)


 * Centralised Authentication (PosixAccount)



OpenLDAP Server Configuration
The domain genfic.com is an example in this guide. You will of course want to change this. However, make sure that the top node is an official top level domain (net, com, cc, be, ...).

Let's first emerge OpenLDAP. Ensure the USE flags berkdb, crypt, gnutls, ipv6, sasl, ssl, syslog and tcpd are used.

OpenLDAP has a main user "rootdn" (Root Distinguished Name) password which is generated with the below command and needs to be placed in the as noted later on.

Now edit the LDAP Server configuration in. The provided is from the original openLDAP source. Below is a sample configuration file one can use to replace it with to get things started.

/etc/openldap/slapd.conf

For a more detailed analysis of the configuration file, we suggest that you work through the OpenLDAP Administrator's Guide.

Verifying the configuration
After customizing the file you can check it with the following command.

Vary the debug level (the "-d 1" above) for more info. If all goes well you will see config file testing succeeded. If there's an error,  will list the line number to which it applies (of the  file).

Note that OpenLDAP can store its configuration in two places. One in the original and also in. The second is the new place and designed not be edited with a text editor but generated from the using   in the following manor in. It is not required to convert the configuration and use for now, but support for the currently documented approach will be removed in future versions of this document.

Running this command will transfer and translate the configuration. Once this has been run successfully the command needs to be run every time the is updated. The directory and its contents need to be owned by the ldap service account.

For more instructions read the in-line comments of the generated files.

The below line will enable the configuration method.

/etc/conf.d/slapd

Finally, create the structure:

Start slapd:

If it does not start then increase the loglevel variable in to 4 or more, and look in  for more information.

Configuring the OpenLDAP Client tools
Edit the LDAP Client configuration file. This file is read by ldapsearch and other ldap command line tools.

You can test the running server with the following command:

If you receive an error, try adding  to increase the verbosity and solve the issue you have.

Client Configuration for Centralised Authentication
There are numerous methods/tools that can be used for remote authentication. Some distributions also have their own easy to use configuration tool. Below there are some in no particular order. It is possible to combine local users and centrally authorized accounts at the same time. This is important because, for instance, if the LDAP server cannot be accessed one can still login as root.


 * SSSD (Single Sign-on Services Daemon). Its primary function is to provide access to identity and authentication remote resource through a common framework that can provide caching and offline support to the system. It provides PAM and NSS modules, and in the future will support D-Bus interfaces for extended user information. It also provides a better database to store local users as well as extended user data.


 * Use  to login to the LDAP server and authenticate. Passwords are not sent over the network in clear text.


 * NSLCD (Name Service Look up Daemon). Similar to SSSD, but older.


 * NSS (Name Service Switch) using the traditional  module to fetch password hashes over the network. To permit users to update their password this has to be combined with the   method.

The first two are demonstrated below with the minimum necessary configuration options to get working.

Client PAM configuration SSSD Method
Here is the more direct method. The three files that are required to be edited are mentioned below.

Add sss to the end as shown below to enable the lookup to be handed to the sssd system service. Once you have finished editing start the sssd daemon.

The last file is the most critical. Open an extra root terminal as a fallback before editing this. The lines in bold have been added to enable remote authentication. Note the use of to support creating the user home directories.

Now try logging in from another box.

Client PAM configuration the pam_ldap Module Method
First, we will configure PAM to allow LDAP authorization. Install so that PAM supports LDAP authorization, and  so that your system can cope with LDAP servers for additional information (used by ).

The last file is the most critical open a few extra root windows as a backup before editing this. The lines in bold have been added to enable remote authentication.

/etc/pam.d/system-auth

Maintenant changez pour lire :

/etc/ldap.conf

Ensuite copiez le fichier  (de OpenLDAP)du serveur vers le client afin que le clients soient conscients de l'environnement LDAP :

Pour terminer, configurez les clients afin qu'ils interrogent LDAP sur les comptes du système :

/etc/nsswitch.conf

Si vous avez observé qu'une des lignes que vous avez collées dans votre fichier  était commentée (la ligne  ): vous n'en avez pas besoin sauf si vous voulez changer le mot de passe d'un utilisateur en mot de passe super-utilisateur. Dans un tel cas, vous devez envoyer en écho le mot de passe root à   en texte simple. Ceci est DANGEREUXet les droits devraient être mis à 600. Ce que vous pouvez désirer faire et c'est conserver ce fichier vierge et lorsque vous avez besoin de changer le mot de passe de quelqu'un qui est à la fois dans LDAP et dans  , y mettre le mot de passe pendant 10 secondes, le temps de changer le mot de passe de l'utilisateur, puis le retirer une fois la chose faite.

Migrate existing data to ldap
Configurer OpenLDAP pour une administration centralisée et la gestion d'items Linux/Unix communs n'est pas chose facile, mais grâce à quelques outils et scripts disponibles sur Internet, migrer un système conçu pour être administré en tant que système unique vers un système à gestion centralisée basé sur LDAP n'est pas difficile.

Go to http://www.padl.com/OSS/MigrationTools.html and fetch the scripts there. You'll need the migration tools and the script.

Next, extract the tools and copy the script inside the extracted location:

The next step now is to migrate the information of your system to OpenLDAP. The script will do this for you, after you have provided it with the information regarding your LDAP structure and environment.

Au moment de l'écriture, les outils ont besoin des entrées suivantes :

L'outil vous demandera aussi quels comptes et quelles configurations vous voulez migrer.

High availability
To setup replication of changes across multiple LDAP systems. Replication within OpenLDAP is, in this guide, set up using a specific replication account which has read rights on the primary LDAP server and which pulls in changes from the primary LDAP server to the secondary.

Cette configuration est ensuite réfléchie, autorisant le serveur LDAP secondaire à fonctionner comme serveur primaire. Grâce à la structure interne d'OpenLDAP, les changements ne sont pas ré-appliqués s'ils sont déjà dans la structure LDAP.

Configurer la réplication
Pour configurer la réplication, commencez par configurer un deuxième serveur OpenLDAP, de façon similaire à ce qui a été décrit ci-dessus. Néanmoins, assurez-vous que dans le fichier de configuration,


 * sync replication providerpointe sur other system.


 * L'identifiant (serverID) est différent pour chacun des serveurs OpenLDAP.

Créez ensuite le compte de synchronisation. Créez un fichier LDIF (le format utilisé en tant que données d'entrée pour les serveurs LDAP) et ajoutez le à chaque serveur LDAP.

Permissions OpenLDAP
Si vous regardez le fichier  vous verrez que vous pouvez spécifier les ACL (permissions si vous préférez) de ce que les utilisateurs peuvent être lire/écrire :

/etc/openldap/slapd.conf

Ceci vous donne accès à tout ce qu'un utilisateur est capable de changer. Si ce sont vos données, alors vous y avez accès en écriture ; si ce sont des données d'un autre utilisateur alors vous pouvez les lire ; des personnes non identifiées peuvent envoyer un mot de passe de connexion pour se connecter. Il y a quatre niveaux qui sont, en les rangeant du plus faible au plus fort :

L'ACL suivante est un peu plus sécurisée parce qu'elle empêche le lire le mot de passe shadowed des autres utilisateurs :

/etc/openldap/slapd.conf

Cet exemple donne à root et à John un accès en lecture/écriture à tout ce qui se trouve dans l'arbre ci-dessous. Ceci permet aussi aux utilisateurs de changer leur propre. Quant à l'instruction finale, tout autre personne possède une possibilité de recherche, ce qui signifie qu'elle peut remplir un filtre de recherche. Maintenant, vous pouvez avoir de multiples ACLs mais, en règle générale, elles sont traitées du bas vers le haut, c'est pourquoi le niveau supérieur devrait être le plus restrictif.

Maintenir l'annuaire
You can start using the directory to authenticate users in apache/proftpd/qmail/samba. You can manage it with LAM (Ldap Account Manager), phpldapadmin, diradm, jxplorer, or lat, which provide easy management interfaces.

Remerciements
Nous tenons à remercier Matt Heler qui nous a prêté sa machine pour réaliser ce guide. Merci aussi aux gars très compétents de #ldap @ irc.freenode.net.

Remerciements
Nous tenons à remercier les auteurs et éditeurs suivants pour leur contribution à ce guide :


 * Benjamin Coles


 * swift


 * Brandon Hale


 * Benny Chuang


 * jokey


 * nightmorph