====== Installation d'OpenLDAP ====== Le but est d'installer et configurer un serveur LDAP pour que l'authentification des utilisateurs sur les machines GNU/Linux. On va installer un serveur minimal et créer un utilisateur. Pour avoir plus d'informations sur le protocole LDAP voir [[http://fr.wikipedia.org/wiki/LDAP|la page de wikipedia sur LDAP]], [[http://fr.wikipedia.org/wiki/Openldap|la page de wikipedia sur OpenLDAP]] et [[http://fr.wikipedia.org/wiki/Ldif|la page de wikipedia sur le format LDIF]]. ===== Installation des paquets ===== L'installation du serveur LDAP passe par le paquet //slapd//, cependant la base de données utilisée est sleepycat, il faut mieux installer les utilitaires associés. Pendant l'installation les réponses aux questions ne sont pas importantes puisqu'on va écraser les fichiers de configuration. apt-get install slapd db4.2-util ===== Configuration ===== Toute la configuration de OpenLDAP passe par le fichier ///etc/ldap/slapd.conf// : allow bind_v2 include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # verification que les entrees respectent les normes schemacheck on # permet de renvoyer toutes les entrees qui correspondent a une recherche sizelimit unlimited pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args # le niveau 256 permet de logger les connexions et les requetes # utile pour le debugage, sinon mettre 0 pour la production loglevel 256 # Loading of backend modules - automatically generated modulepath /usr/lib/ldap moduleload back_bdb backend bdb # indique les fichiers pour le TLS (authorité de certification, # certificat du serveur, clé privé du serveur) TLSCACertificateFile /etc/ldap/ssl-tls/cacert.pem TLSCertificateFile /etc/ldap/ssl-tls/servercrt.pem TLSCertificateKeyFile /etc/ldap/ssl-tls/serverkey.pem # nom de la base de donnée database authentification suffix "dc=example,dc=com" rootdn "cn=admin,dc=example,dc=com" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. # # generer avec : slappasswd -s mot_de_passe # slappasswd est un utilitaire uniquement utilisable par root password-hash SSHA rootpw {SSHA}zQywC32BmCPj15Wpa2UMskrK16Pdd5Q2 #rootpw supermotdepassesecret # 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/ldap" # indique si le serveur doit maintenir la date de dernière # modification pour chaque entrée. Desactiver pour augmenter # les performances lastmod off # taille du cache en nombre d'entrées cachesize 1000 # index à maintenir # eq : equalité # sub : sous chaine # pres: presence/absence index objectClass,uidNumber,gidNumber eq index uid,cn,sn,givenName pres,sub,eq # les acl permettent de proteger certains attributs ou certaine branches access to attrs=userPassword by self write by anonymous auth by dn.base="cn=admin,dc=example,dc=com" write by * none access to * by dn="cn=admin,dc=univ-lehavre,dc=fr" write by * read Le fichier ne doit être lisible que par root : chmod 600 /etc/ldap/slapd.conf ===== Redirection des logs du démon slapd de syslog vers slapd.log ===== Si on laisse la configuration par défaut, le démon slapd journalise dans syslog, donc on ne fait plus la difference dans les messages, surtout si on a configuré un fort taux de log. Pour que syslog envoi le contenu vers un fichier à part il faut éditer le fichier ///etc/syslog.conf// : # modification *.*;local4,auth,authpriv.none -/var/log/syslog # ajout local4.* -/var/log/slapd.log ===== Gestion des logs binaires de BDB ===== Le backend qui gère la base LDAP est BDB, son fonctionnement produit des fichiers de logs qui s'accumulent sur le disque. Il contiennent les transactions (ajout/suppression) qui ont été effectuées sur l'annuaire. Par défaut chaque fichier fait 10 Mo et ils ne sont pas effacés. En quelques jours un arrive très vite à 1 Go. Pour palier ce problème, il existe des utilitaires et un fichier de configuration. La documentation du paquet Debian est claire : <> Le fichier de configuration se nomme //DB_CONFIG// et doit être placé dans le repertoire où se situe la base LDAP (///var/lib/ldap//). Son contenu doit ressembler à ceci : set_cachesize 0 52428800 0 set_flags DB_LOG_AUTOREMOVE set_lg_bsize 1048576 set_lg_dir /var/lib/ldap/ set_lk_max_objects 5000 set_lk_max_locks 5000 set_lk_max_lockers 5000 Les lignes importantes sont les trois première. On place un cache en mémoire de 50 Mo qui contiendra les données les plus utilisées de l'annuaire. Le flag //DB_LOG_AUTOREMOVE// indique que les fichiers de log doivent être supprimés dès qu'ils ne sont plus nécessaires (c'est-à-dire plus impliqués dans une transaction active). Le troisième indique la taille unitaire des fichiers de log (10 Mo). Les utilitaires pour gérer une base BDB sont installés avec le paquet //db4.2-util//. Voici un petit descriptif des commandes utiles, pour de plus amples informations voir [[http://www.sleepycat.com/docs/utility/]] : * db4.2_stat -m : donne une indication de l'usage du cache (plus le pourcentage est elevé mieux c'est) * db4.2_stat -t : donne la liste des fichiers de log concerné par une transaction active * db4.2_archive -d : efface les fichiers de log inutiles, mais ne produit aucun affichage... à coupler avec un //ls// ===== Optimistation des écritures ===== Il peut être judicieux de supprimer la mise à jour de la date d'accès sur la partition ///var//. Pour cela editez le fichier ///etc/fstab// et ajouter l'option **noatime** à la ligne de ///var// : /dev/sda6 /var ext3 defaults,noatime 0 2 Pour remonter le système de fichier sans redémarrer : % mount -o remount /var ===== Initialisation de la base ===== L'étape la plus compliquée est de produire le squelette de la base dans lequel viendront s'insérer les utilisateurs. Heureusement cette opération n'est à réaliser qu'une seule fois. Le LDAP étant une structure arborescente, on aura une racine (dc=example,dc=com), une branche où stocker les utilisateurs (ou=people) et les feuilles qui seront les utilisateurs (uid=toto). On ajoutera également le compte de l'administrateur comme défini dans le fichier de configuration. On va utiliser un fichier au format LDIF pour insérer chacun des éléments dans le serveur LDAP. ==== Création du squelette ==== Le format LDIF impose que : * les enregistrements dans un fichiers soient séparés par une ligne vide * la première ligne contienne le dn (distinguish name) de l'entrée * le fichier se termine par 2 lignes vides Dans notre LDIF nous aurons trois parties : la racine, la branche people et le compte de l'administrateur. dn: dc=example,dc=com dc: example.com description: Organisation example objectClass: dcObject objectClass: organization o: Organisation example dn: ou=people,dc=example,dc=com ou: people objectClass: organizationalUnit dn: cn=admin,dc=example,dc=com description: Administrateur LDAP objectClass: organizationalRole cn: admin Le compte de l'administrateur n'a pas de mot de passe dans la base LDAP, il est défini dans le fichier de configuration. Pour insérer les données, on utilise la commande ''slapadd'' : /etc/init.d/slapd restart # pour créer les fichiers de la base de données /etc/init.d/slapd stop # pour l'insertion en ligne de commande on doit éteindre le service # pour éviter les modifications "distante" /usr/sbin/slapadd -l squelette.ldif -f /etc/ldap/slapd.conf # import à partir du fichier ldif /etc/init.d/slapd start Si tout c'est bien passé, la base est prête à être utilisée. ==== Ajout d'un utilisateur ==== L'étape suivante consiste à insérer un utilisateur pour nous en servir pour l'authentification. On créé un utilisateur lambda avec peu d'informations : dn: uid=toto,ou=people,dc=dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: toto cn: John Doe sn: Doe uidNumber: 2000 gidNumber: 100 homeDirectory: /home/ldap/toto userPassword: {MD5}9WykxdwZMl/jJjQWik9Ntg== Le mot de passe est générer grâce à la commande : slappasswd -s supermotdepassesecret -h \{MD5\} L'utilisateur aura le numéro 2000 sur le système, il appartiendra au groupe 100 et son login sera ''toto''. ==== Tests ==== Pour tester la connexion de l'utilisateur sur la machine cliente, il faut mettre en oeuvre la [[ldap:configuration_d_une_machine_linux_cliente|documentation pour les clients LDAP]].