Outils pour utilisateurs

Outils du site


systeme:ldap

Autre tuto (avec LDPS) ⇒ 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 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 <monmtdepasse>
 slappasswd -h {SHA} -s <monmtdepasse>
 slappasswd -h {CRYPT} -s <monmtdepasse>
 slappasswd -h {SCRYPT} -s <monmtdepasse>
 slappasswd -h {MD5} -s <monmtdepasse>
 slappasswd -h {SMD5} -s <monmtdepasse>

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

  • ldapadmin : permet de visualiser et de modifier l'arborescence LDAP.

Clients légers (web)

systeme/ldap.txt · Dernière modification : 2010/07/09 17:38 de root