Autre tuto (avec LDP**S**) => http://julp.developpez.com/freebsd/authentification-ldap/ ===== Définition ===== LDAP signifie Lightweight Directory Access Protocol, c'est une version simplifiée du protocol X500. Vous pourrez trouvez une présentation détaillée sur [[http://fr.wikipedia.org/wiki/LDAP|Wikipédia]]. ===== Installation ===== Avant tout, installons le daemon du server ldap (slapd) sur le serveur. Pour cela, il suffit d'installer les paquets **slapd** et **ldap-utils.** On vous demandera votre mot de passe administrateur et votre nom de domaine. Renseignez les. Parfois on ne vous demandera que le mot de passe et on ne vous demandera rien concernant le nom de domaine car l'installeur récupère directement le nom de domaine de la machine. Si vous souhaiter renseigner ces champs faites : sudo dpkg-reconfigure slapd ===== Sécuriser LDAP ===== Utilisation d'un tunnel **SSL** : url commençant par ldaps: port TCP 636 **TLS** est aussi possible ===== Exemple d'entrées ===== * **dn** est le nom de l'entrée, pas un attribut de l'entrée * "cn=John Doe" est le **RDN** de l'entrée. * "dc=example,dc=org" est le **DN** de son parent * Autres lignes montrent les attributs de l'entrée. Les noms des attributs sont parfois des mnémoniques pour les plus courants : "cn" pour common name, "dc" pour domain component, "sn" pour surname. * **uid** (userid), il s'agit d'un identifiant unique obligatoire * **givenname**, il s'agit du prénom de la personne * **o** (organization), il s'agit de l'entreprise de la personne * **u** (organizational unit), il s'agit du service de l'entreprise dans laquelle la personne travaille * **mail**, il s'agit de l'adresse de courrier électronique de la personne (bien évidemment) Entrées peut également être racine d'une sous-arbre par exemple : ou=un service,dc=example,dc=org Contiendra un sous-arbre d'entrées ou contenir une référence vers un autre serveur. Un referral vers un autre serveur qui contient le sous-arbre. ===== Configuration ===== Editez le fichier **/etc/openldap/slapd.conf**. Modifiez les lignes suivantes avec votre domaine, par exemple votre_nom_d'utilisateur.fr : suffix "dc=my-tbartolo,dc=fr" rootdn "cn=root,dc=tbartolo,dc=fr" rootpw secret //password ldap Pour crypter (recommendé) le password dans le fichier de configuration, utiliser la commande suivante : slappasswd -h {SSHA} -s slappasswd -h {SHA} -s slappasswd -h {CRYPT} -s slappasswd -h {SCRYPT} -s slappasswd -h {MD5} -s slappasswd -h {SMD5} -s le -h {SSHA} précise l'algorithme de hachage qui est utilisé, {SSHA} offre une meilleure sécurité que {MD5}. Notez que le fichier est en permission 640, personne ne doit y accéder, car il contient le mot de passe de l'administrateur de l'annuaire. Ajoutez également la ligne suivante au début du fichier : loglevel any Cette ligne active l'enregistrement des logs dans la facilité local4. Dans la configuration de syslog, redirigez les enregistrements de cette facilité dans ///var/log/ldap.log//. Editer /etc/syslog.conf et rajouter la ligne suivante : local4.* /var/log/ldap.log Tous les logs ldap seront redirigés vers ///var/log/ldap.log//. Démarrez maintenant le service ldap. Vérifiez que le service se lance automatiquement au démarrage de votre machine. ===== Client LDAP ===== Pour se connecter à ldap il faut également modifier le fichier /etc/ldap.conf ===== Création d'une base de donnée utilisateurs ===== Nous allons maintenant créer une base de donnée LDAP des utilisateurs du système qui sera ensuite utilisée pour l'authentification. Pour cela, nous allons utiliser la base d'utilisateurs déjà créée dans le système dans les fichiers ///etc/passwd, shadow, group//. Pour ce faire, nous allons utiliser des scripts de migration de ces fichiers vers une base LDAP qui se trouvent dans : /usr/share/openldap/migration/ Modifiez le fichier de configuration //migrate_common.ph// pour les lignes suivantes : # Default DNS domain $DEFAULT_MAIL_DOMAIN = "tbartolo.fr"; # Default base $DEFAULT_BASE = "dc=tbartolo,dc=fr"; Ensuite, utilisez les outils suivants, qui vont créer des fichiers standards au format LDIF pour la création d'une nouvelle base et l'ajout des utilisateurs et groupe dans cette base : ./migrate_base > test.ldif ./migrate_passwd /etc/passwd >> test.ldif ./migrate_group.pl /etc/group >> test.ldif (migrate_base créé toutes les entrées de base dans la base de données). Editez le ficier //test.ldif//. vous noterez que les unités organisationnelles sont créées dans la base tbartolo.fr. (ou votre nom d'utilisateur). Supprimez du fichier toutes les entrées pour les utilisateurs « système » (root, bin, daemon, adm, lp, etc.) ; conservez seulement les utilisateurs que vous voulez garder dans la base. Ensuite, ajoutez les entrées dans la base avec la commande suivante : ldapadd -D "cn=root,dc=tbartolo,dc=fr" -f test.ldif -W -x Pour faire une recherche dans la base, avec le service ldap lancé, utilisez : ldapsearch -x -b 'ou=users dc=tbartolo,dc=fr' '(objectclass=*)' -s one -D 'cn=clientldap,ou=admin,dc=tbartolo,dc=fr' -W Le dernier champ doit contenir le type de requête que vous voulez. Par exemple, essayez de chercher les entrées dont l'objectclass est account. Si vous voulez supprimer l'intégralité de la base, supprimez tous les fichiers de ///var/lib/ldap/// Il faut maintenant signaler au service NSS qu'en plus d'utiliser les fichiers ///etc/passwd, group et shadow// pour la résolution de noms, il faut également utiliser LDAP. Editez /etc/nsswitch.conf et modifiez les lignes suivantes : passwd: files ldap shadow: files ldap group: files ldap Cela signifie que pour la résolution, le système ira d'abord jeter un coup d'oeil dans les fichiers /etc/, puis dans ldap. Au passage, supprimez des fichiers ///etc/passwd, shadow et group// l'utilisateur test et tous les autres utilisateurs et groupes que vous avez ajoutés dans LDAP. Utilisez pour cela les commandes vipw et vigr (Ces deux commandes sont utilisées spécialement pour l'édition de ces fichiers). Donc, si nous faisons un : su test Le système ira d'abord voir l'existence de cet utilisateur dans les fichiers systèmes (sans les trouver), puis demandera à ldap. Essayez. Vous avez un message d'erreur, mais vous voyez bien une activité dans les logs ldap : il s'agit de NSS qui s'adresse à LDAP pour faire la résolution numérique de l'utilisateur test. Vous auriez pu faire la même chose en utilisant la commande getent getent passwd test Mais l'authentification avec LDAP n'est pas configurée ! Or, l'utilisateur test n'existe que dans la base LDAP. PAM n'est pas configuré ! Il faut donc maintenant modifier les fichiers de configuration des programmes d'authentification dans PAM. Attention : avant d'aller plus loin, gardez une console quelconque ouverte en root, au cas où vous ne puissiez plus vous authentifier à cause d'une erreur de configuration. Editez le fichier ///etc/pam.d/su// Et rajouter la ligne en tout premier la ligne : auth sufficient pam_ldap.so Faites de même pour //account// et //password//. Cela définit que pour l'authentification, on ira d'abord regarder dans ldap, et que si cela réussit, il n'y aucune autre opération à faire. Modifiez le fichier nécessaire dans /etc/pam.d/ pour que tous les programmes réalisant de l'authentification utilisent maintenant LDAP. (Note : LDAP fournit des fichiers de configuration PAM dans ///usr/share/doc/nss_ldap-253/pam.d///). ===== Ajout d'un utilisateur ===== Officiellement (car il y a des projets parallèles), il n'y pas de modules LDAP permettant d'ajouter un utilisateur avec une commande simple, du style //adduser//. De plus, la commande //adduser// n'implémente pas l'utilisation de PAM (qui lui dirait de faire un ajout d'utilisateur dans LDAP). Ainsi, pour créer un nouvel utilisateur, il faut définir ses entrées dans un fichier LDIF. Par exemple : albert.ldif dn: uid=aeinstein,ou=People,dc=tbartolo,dc=fr uid: aeinstein cn: Alfred Einstein objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: albertpass shadowLastChange: 13777 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 509 gidNumber: 509 homeDirectory: /home/aeinstein Créez un fichier pour ajouter un nouvel utilisateur. Attention, les uid et gidNumber doivent s'incrémenter. Pour voir les derniers uid et gid de votre base, utiliser la commande slapcat pour dumper votre base. Ensuite, il vous faut ajouter ces entrées à votre base : ldapadd -D "cn=root,dc=tbartolo,dc=fr" -f albert.ldif -W -x Essayez maintenant de vous authentifier avec cet utilisateur, ça devrait marcher ! Mais que se passe-t'il ? Pouvez-vous voir le contenu de votre répertoire personnel ? Le problème du répertoire personnel : L'inconvénient d'utiliser cette méthode, c'est que le répertoire personnel n'est pas créé (ce que ferait la commande adduser). Un moyen de contourner ce problème est d'utiliser le module PAM pam_mkhomedir qui créera le répertoire personnel de l'utilisateur s'il n'existe pas. Referrez-vous à la documentation PAM en ligne :(http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html) pour ajouter ce module dans les fichiers de configuration PAM. Changement du mot de passe de l'utilisateur : Un moyen simple pour changer le mot de passe de l'utilisateur consiste à utiliser la commande //ldappasswd//. L'utilisateur peut modifier lui-même son mot de passe dans la base de donnée : ldappasswd -x -D 'uid=aeinstein,ou=People,dc=tbartolo,dc=fr' -W -S Entrez le nouveau mot de passe, puis confirmez. Ensuite, entrez l'ancien mot de passe pour l'accès à la base. Notez au passage que vous pouvez préciser les mots de passe en ligne de commande : ldappasswd -x -D 'uid=aeinstein,ou=People,dc=tbartolo,dc=fr' -w oldpassword -s newpassword Cela ne fonctionne pas ! En effet, les utilisateurs ne sont pas autorisés à accéder à la base de donnée. Pour autoriser les utilisateurs à accéder en écriture à l'attribut userPassword, modifier le fichier ///etc/openldap/slapd.conf// : access to * attrs=userPassword by dn="cn=root,dc=tbartolo,dc=fr" write by self write by * auth access to * by dn="cn=root,dc=tbartolo,dc=fr" write by * read La première partie autorise l'utilisateur root a accéder en écriture à l'attribut //userPassword//, ainsi que self, c'est-à-dire l'utilisateur à accéder à son propre userPassword. Le reste de la base n'est accessible en écriture que pour root, et en lecture pour le reste des utilisateurs. Réessayez de définir le mot de passe en tant qu'utilisateur, cela devrait fonctionner. ===== Browser LDAP ===== ==== Clients lourds ==== * [[http://ldapadmin.sourceforge.net/docs/introduction.html|ldapadmin]] : permet de visualiser et de modifier l'arborescence LDAP. ==== Clients légers (web) ==== * [[http://www.ldap-account-manager.org|LAM (LDAP Account Manager)]] * [[http://phpldapadmin.sourceforge.net|ldapmyadmin]]