LDAP pas à pas en 20 min
avec Debian GNU/Linux 3.1 (Sarge)
...
Lightweight Directory Access Protocol
Protocole d'accès aux informations optimisé pour la lecture
Centraliser les informations utilisateur (login, password, homedir, ...)
OBJECTIF en 20 min
Installer un serveur LDAP avec une configuration très basique
Ajouter un groupe et un utilisateur dans un annuaire basique
Installer un serveur NFS pour contenir les homedir
Configurer un client pour l'authentification en utilisant login/password
contenus dans l'annuaire LDAP
Configurer le client pour monter automatiquement son homedir
indiqué dans l'annuaire LDAP
+---------------------+
+----------------------+ | Client 192.168.0.2 |
| | | |
| Serveur LDAP | <============ LDAP =============> | Authentification |
| | login | avec les infos LDAP |
| Serveur NFS | password | |
| | homedir | |
| 192.168.0.1 | | |
| | <============ NFS ==============> | Montage du homedir |
+----------------------+ homedir +---------------------+
SERVEUR LDAP
Installer le serveur LDAP
OpenLDAP v 2.1.30-3 (serveur et utilitaires)
user@serveur:~$
sudo apt-get install slapd ldap-utils
Configurer le serveur LDAP
Avec debconf (outil de configuration debian)
Entrer le nom de domaine DNS | abdomain.org |
Entrer le nom de l'organisation | centre |
Password de l'admin LDAP | azerty |
Autoriser le protocole v2 | Non |
Reconfigurer pour choisir le format de la base
user@serveur:~$
sudo dpkg-reconfigure slapd
Passer la configuration de slapd | Non |
Entrer le nom de domaine DNS | abdomain.org |
Entrer le nom de l'organisation | centre |
Password de l'admin LDAP | azerty |
Format de la base | LDBM |
Autoriser le protocole v2 | Non |
slapd-config
Démarrer le serveur
(Après l'installation le serveur est déjà démarré)
user@serveur:~$
sudo /etc/init.d/slapd start
Tester le serveur
Tester en interrogeant l'annuaire
- -x : sans utiliser SASL
- -b : avec la base abdomain.org
user@serveur:~$
ldapsearch -x -b dc=abdomain,dc=org
Organiser l'annuaire
abdomain.org
/ \
people services
/ \ / \
etudiants personnel groupes nfs
déclaration d'annuaire
debconf.ldif
Editer un fichier init.ldif
~ fichier init.ldif ~
dn: ou=people, dc=abdomain, dc=org
objectclass: top
objectclass: organizationalUnit
ou: people
description: Branche gens
dn: ou=etudiants, ou=people, dc=abdomain, dc=org
objectclass: top
objectclass: organizationalUnit
ou: etudiants
description: Branche etudiants
dn: ou=personnel, ou=people, dc=abdomain, dc=org
objectclass: top
objectclass: organizationalUnit
ou: personnel
description: Branche personnel
dn: ou=services, dc=abdomain, dc=org
objectclass: top
objectclass: organizationalUnit
ou: services
description: Branche services
dn: ou=groupes, ou=services, dc=abdomain, dc=org
objectclass: top
objectclass: organizationalUnit
ou: groupes
description: Branche groupes
dn: ou=nfs, ou=services, dc=abdomain, dc=org
objectclass: top
objectclass: organizationalUnit
ou: nfs
description: Branche nfs
Ajouter la "requête" dans l'annuaire
- -x : ne pas utiliser SASL
- -f : utiliser le fichier init.ldif
- -W : s'authentifier par mot de passe
- -D : avec le login admin@abdomain.org
user@serveur:~$
ldapadd -x -f init.ldif -W
-D cn=admin,dc=abdomain,dc=org
Un petit test vite fait même si le message est positif
user@serveur:~$
ldapsearch -x -b dc=abdomain,dc=org
Ajouter un groupe dans l'annuaire
Insérer un groupe de classe posixGroup dans groupes.services.abdomain.org
Editer un fichier gr.ldif
~ fichier gr.ldif ~
dn: cn=mongroupe, ou=groupes, ou=services, dc=abdomain, dc=org
objectClass: top
objectClass: posixGroup
cn: mongroupe
gidNumber: 1111
description: groupe de test mongroupe
Ajouter le groupe
user@serveur:~$
ldapadd -x -f gr.ldif -W
-D cn=admin,dc=abdomain,dc=org
Ajouter un utilisateur dans l'annuaire
Insérer un utilisateur de classe posixAccount dans etudiants.people.abdomain.org
avec les attributs uid, uidNumber, gidNumber, homeDirectory, shell ...
Editer un fichier ut.ldif
~ fichier ut.ldif ~
dn: uid=dupont, ou=etudiants, ou=people, dc=abdomain, dc=org
objectClass: top
objectClass: posixAccount
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: dupont
cn: Dupont Jean
sn: Dupont
givenName: Jean
uidNumber: 1100
gidNumber: 1111
homeDirectory: /home/aware/dupont
loginShell: /bin/bash
userPassword: poiuyt
mail: dupont@abdomain.org
l: France
ou: mongroupe
Ajouter l'utilisateur dupont
user@serveur:~$
ldapadd -x -f ut.ldif -W
-D cn=admin,dc=abdomain,dc=org
AUTHENTIFICATION AVEC LDAP PAR LE CLIENT
Installer les librairies pour l'authentification sur le poste client
Installer le module LDAP pour NSS (Name Service Switch)
libnss-ldap v220-1
user@client:~$
sudo apt-get install libnss-ldap
Adresse du serveur LDAP | 192.168.0.1 |
Annuaire | dc=abdomain,dc=org |
Version du protocole LDAP | 3 |
Authentification nécessaire à la base | Non |
Lisible et modifiable uniquement par le propriétaire | Non |
nssldap-config
Installer le module PAM (Pluggable Authentication Module) pour LDAP
libpam-ldap v169-1
user@client:~$
sudo apt-get install libpam-ldap
Création d'une BD locale pour l'admin | Oui |
Authentification nécessaire à la base | Non |
Compte privilégié de l'annuaire |
cn=admin, dc=abdomain, dc=org |
Password | azerty |
Chiffrement des password | crypt |
nssldap.config
Configurer le poste client pour l'authentification
Modifier le fichier nsswitch.conf
Ajouter LDAP pour la résolution des mots de passe
user@client:~$
sudo vi /etc/nsswitch.conf
avant
passwd: compat
group: compat
shadow: compat
après
passwd: ldap compat
group: ldap compat
shadow: ldap compat
Modifier les méthodes d'authentification
Le module pam-ldap recherche un élément de l'annuaire avec des attributs
de classe posixAccount dont l'attribut uid correspond au login
Le module récupère les informations (posixAccount)
uid uidNumber homeDirectory loginShell userPassword
Modifier le fichier common-auth pour modifier la pile de l'authentification
user@client:~$
sudo vi /etc/pam.d/common-auth
avant
auth required pam_unix.so nullok_secure
après
auth sufficient pam_ldap.so
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required pam_deny.so
Modifier le fichier common-account pour modifier les conditions sur les comptes
user@client:~$
sudo vi /etc/pam.d/common-account
avant
account required pam_unix.so
après
account sufficient pam_ldap.so
account sufficient pam_unix.so use_first_pass
Se connecter
login : dupont
password : poiuyt
C'est gagné !
A part qu'il n'y a pas de homedir.
Il faut tout simplement le créer ou utiliser un serveur de fichiers
avec automontage.
SERVEUR DE FICHIERS AVEC AUTOMONTAGE
Serveur NFS
Installer le serveur NFS
Kernel NFS Server v1:1.0.6-3
user@serveur:~$
sudo apt-get install nfs-kernel-server
Avoir un noyau avec NFSv3 activé
Config noyau
File Systems -> Network File Systems -> Provide NFSv3 server support (CONFIG_NFSD_V3)
Configurer le serveur NFS pour exporter les homedir utilisateurs
user@serveur:~$
sudo emacs /etc/exports
/etc/exports
/home/serveur 192.168.0.2(rw,root_squash)
Démarrer le serveur NFS
user@serveur:~$
sudo /etc/init.d/nfs-kernel-server start
Créer le répertoire de l'utilisateur et donner les autorisations pour
modifier ses données sur le serveur (o+rwx)
user@serveur:~$
sudo mkdir /home/serveur
sudo mkdir /home/serveur/dupont
sudo chmod go+rwx /home/serveur/dupont
Définir sur le serveur les classes d'objets pour automount
Ajouter dans le fichier nis.schema
le schema "automount.schema" pour automount
Le schema définit un attribut automountInformation et deux classes d'objet
Une instance de classe automount contient au moins deux attributs :
cn et automountInformation
user@serveur:~$
sudo emacs /etc/ldap/schema/nis.schema
~ fichier automount.schema ~
attributetype ( 1.3.6.1.1.1.1.25 NAME 'automountInformation'
DESC 'Information used by the autofs automounter'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
objectclass ( 1.3.6.1.1.1.1.13 NAME 'automount' SUP top STRUCTURAL
DESC 'An entry in an automounter map'
MUST ( cn $ automountInformation )
MAY ( description ) )
objectclass ( 1.3.6.1.4.1.2312.4.2.2 NAME 'automountMap' SUP top STRUCTURAL
DESC 'An group of related automount objects'
MUST ( ou ) )
Redémarrer le serveur LDAP pour prendre en compte les nouvelles définitions
user@serveur:~$
sudo /etc/init.d/slapd restart
Ajouter les entrées automount dans l'annuaire
Indiquer l'emplacement du homedir sur le serveur avec les options de montage
Automount recherche un objet LDAP automount dont l'attribut cn correspond au login
Editer un fichier au.ldif
~ fichier au.ldif ~
dn: cn=dupont, ou=nfs, ou=services, dc=abdomain, dc=org
objectClass: top
objectClass: automount
cn: dupont
automountInformation: fstype=nfs,hard,intr,nodev,nosuid,rw 192.168.0.1:/home/serveur/dupont
Ajouter la requête dans l'annuaire
user@serveur:~$
ldapadd -x -f au.ldif -W -D cn=admin,dc=abdomain,dc=org
Automontage des homedir par le client
Avoir un noyau avec NFSv3 activé et support de l'automount
Config noyau
File Systems -> Network File Systems -> Provide NFSv3 client support (CONFIG_NFS_V3)
File Systems -> Kernel automounter support (CONFIG_AUTOFS_FS)
Test de montage NFS
user@client:~$
mkdir /tmp/testnfs
sudo mount -t nfs 192.168.0.1:/home/serveur/dupont /tmp/testnfs
sudo umount
Installer autofs sur le client
autofs v4.1.3-4
user@client:~$
sudo apt-get install autofs autofs-ldap
Editer auto.master
Le point de montage /home/aware correspond à l'attribut homeDirectory (posixAccount)
contenu dans l'annuaire
A la connexion, le répertoire est créé et monté
A la déconnexion, le démontage est effectué 1 seconde après
user@client:~$
sudo vi /etc/auto.master
/etc/auto.master
/home/aware ldap:192.168.0.1:ou=nfs,ou=services,dc=abdomain,dc=org --timeout=1
Recharger auto.master
user@client:~$
sudo /etc/init.d/autofs reload
DOCS
Linux Magazine / Juin 2002 : Authentification basée sur LDAP
OpenLDAP Admin Guide
Une autre page Debian
HOWTO LDAP
LDAP Authentication
for Linux