wiki:pam

Notes

Mettre bind_policy soft dans /etc/libnss-ldap.conf

pam_password_prohibit_message Please visit  http://internal to change your password.

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@…

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é [[BR]] 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[[BR]] 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