Voici un petit tuto très succint pour mettre en place rapidement une authentification LDAP. Je ne m’attarderai pas sur la sécurité, la réplication etc…
On part d’un serveur vierge, avec le réseau configuré. Si votre domaine DNS c’est toto.local, le DIT LDAP sera dc=toto,dc=local. Pour moi ce sera dc=morot,dc=fr C’est parti :
apt-get install slapd ldap-utils
On met en place nos OU qui contiendront les utilisateurs et les groupes (faire un control+D à la fin de la saisie) :
ldapadd -x -W -D cn=admin,dc=morot,dc=fr dn: ou=People,dc=morot,dc=fr objectClass: top objectClass: organizationalUnit ou: People dn: ou=Groups,dc=morot,dc=fr objectClass: top objectClass: organizationalUnit ou: Groups
On ajoute une première entrée :
ldapadd -x -W -D cn=admin,dc=morot,dc=fr Enter LDAP Password: dn: cn=Julien Morot,ou=People,dc=morot,dc=fr objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount userPassword: {SSHA}SECRET givenName: Julien sn: Morot cn: Julien Morot displayName: Julien Morot uidNumber: 1026 gidNumber: 100 uid: julien mail: julien@morot.fr gecos: Julien Morot loginShell: /bin/bash homeDirectory: /home/julien adding new entry "cn=Julien Morot,ou=People,dc=morot,dc=fr"
Le mot de passe SSHA est généré par la commande slappasswd.
On passe au client :
root# apt-get install libnss-ldap libpam-ldap nscd
Debconf pose un certain nombre de questions à adapter par rapport à votre DIT :
- URI : ldapi:/// ldap:///localhost:389 ldap:///nom.domaine:389
- Base de recherche : dc=morot,dc=fr
- LDAP Version : 3
- Make local root Database admin : yes
- Does the LDAP database require login : No
- LDAP account for root : cn=admin,dc=morot,dc=fr
- LDAP root account password : celui indiqué à l’installation du package slapd
Maintenant que les packages sont configurés, il faut indiquer à NSS et PAM de les utiliser :
/etc/nsswitch.conf :
passwd: compat ldap group: compat ldap shadow: compat ldap
Vérification :
root# getent passwd |grep julien julien:x:1026:100:Julien Morot:/home/julien:/bin/bash
Dans le fichier /etc/pam.d/common-session, on ajoute un module PAM qui se charge de créer le répertoire personnel de l’utilisateur s’il n’est pas présent :
root# grep -v '^#' /etc/pam.d/common-session session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session optional pam_umask.so session required pam_unix.so session optional pam_ldap.so session required pam_mkhomedir.so skel=/etc/skel umask=0022
C’est terminé!
Salut,
Juste une petite observation, dans le fichier /etc/nsswitch.conf, il faut éviter de mettre «ldap» en 1er.
C’est toujours les comptes locaux dans /etc/passwd qui doivent être lu en 1er car il contient les comptes systèmes et en cas de plantage du ldap, pas besoin d’attendre le timeout pour passer sur les comptes locaux.
Sinon bon article 🙂
Manu
Merci à toi! Tu as raison effectivement. Dans le cas présent, j’ai toujours le root actif donc je peux toujours rapidement bypasser l’authentification LDAP sans me logger en simple user et passer sudoers en cas d’incident.
SSSD (http://fedorahosted.org/sssd) est plus intéressant à mon sens, j’en parlerai peut être à l’occasion. Cela permet de faire de l’authentification mise en cache mais tu connais sans doute 🙂
J irai même plus loin si je place “ldap” avant “compat” le boot d’une ubuntu 12.04 avec SSD passe de 2 secondes a + d’ 1 minute ! Donc il FAUT mettre “ldap” après “compat” (je viens de passer un moment a chercher le problème donc si ça peut aider certains ;))
a+