Si on gère de nombreux ordinateurs multi-utilisateurs, on se pose
forcément la question de la centralisation des
Il existe plusieurs solutions techniques à ce problème,
et je présente ici l'utilisation de
Si on gère de nombreux ordinateurs multi-utilisateurs, on se pose
forcément la question de la centralisation des
LDAP est juste un protocole, il n'impose rien sur le mécanisme de
stockage des données, dont on dira un mot au moment de configurer le
Nous avons donc une machine
Que faut-il connaitre sur LDAP
encore ? Outre les références à la fin de cet article, nécessaires
pour tout savoir, notons simplement que chaque objet stocké dans la
base LDAP a un DN (
Utilisons le client
% ldapsearch -h ldap.example.org -x -b dc=example,dc=org \
'(objectClass=posixAccount)'
...
dn: cn=Louis Bleriot,ou=People,dc=example,dc=org
objectClass: posixAccount
objectClass: shadowAccount
cn: Louis Bleriot
sn: bleriot
uid: bleriot
uidNumber: 1011
homeDirectory: /home/bleriot
gecos: Louis Bleriot
loginShell: /usr/bin/zsh
...
(
Pour éviter de mettre du code LDAP dans chaque application qui fait
de l'
On va donc installer le support LDAP de PAM. Sur une Debian, c'est
le paquetage
# On peut aussi indiquer le serveur par la directive "uri" mais je n'ai
# jamais réussi à la faire fonctionner
host ldap.example.org
base dc=example,dc=org
# Ne pas oublier ces trois lignes, commentées par défaut !
nss_base_passwd ou=People,dc=example,dc=org?one
nss_base_shadow ou=People,dc=example,dc=org?one
nss_base_group ou=Group,dc=example,dc=org?one
# Pour savoir quel couple attribut/valeur ajouter à la base (ici ou=People),
# demander à l'administrateur du serveur LDAP.
On configure ensuite PAM pour
utiliser LDAP, dans
# Utiliser LDAP
auth sufficient pam_ldap.so
# Garder une authentification traditionnelle au cas où...
auth required pam_unix.so nullok_secure
Même chose pour
Sommes-nous prêts, désormais, à authentifier ? Pas tout à fait. PAM
ne fait que l'
Installons donc NSS LDAP, c'est le paquetage Debian
# On peut aussi indiquer le serveur par la directive "uri" mais je n'ai
# jamais réussi à la faire fonctionner
host ldap.example.org
base dc=example,dc=org
# rootbinddn ne fonctionne pas pour moi et n'est de toute façon pas
# très utile
#rootbinddn cn=admin,dc=example,dc=org
# Ne pas oublier ces trois lignes, commentées par défaut !
nss_base_passwd ou=People,dc=example,dc=org?one
nss_base_shadow ou=People,dc=example,dc=org?one
nss_base_group ou=Group,dc=example,dc=org?one
# Pour savoir quel couple attribut/valeur ajouter à la base (ici ou=People),
# demander à l'administrateur du serveur LDAP.
Puis indiquons à NSS qu'il doit utiliser LDAP, ce qui se fait dans
passwd: compat ldap
group: compat ldap
shadow: compat ldap
Maintenant, tout devrait marcher. Il est temps de tester. Commençons
par demander la liste des comptes :
% getent passwd
...
bleriot:x:1011:110:Louis Bleriot, Test account:/home/bleriot:/usr/bin/zsh
On doit voir apparaitre les comptes purement LDAP. On peut aussi
utiliser des commandes qui affichent des informations sur les
utilisateurs :
% finger bleriot
Login: bleriot Name: Louis Bleriot
Directory: /home/bleriot Shell: /usr/bin/zsh
Office: Test account
...
Ou bien (
% cd ~bleriot
% pwd
/home/bleriot
Enfin, il ne reste qu'à s'authentifier (même avertissement : il
faut redémarrer les programmes qui utilisent NSS comme le serveur
Et si cela ne marche pas ? Il faut tester avec
D'autres programmes peuvent s'authentifier avec LDAP. Par exemple,
le
hostssl all USERNAME 192.0.2.240/28 pam
Maintenant, si le système d'exploitation utilisé n'est pas Debian,
mais
Une fois les ports installés, il faut indiquer au client LDAP de
la machine où trouver les informations. Voici un exemple de
BASE dc=example,dc=org
URI ldap://ldap.example.org/
pam_login_attribute uid
On a indiqué la base LDAP, l'
Ensuite, il faut configurer PAM dans chaque application, via les
fichiers en
auth sufficient /usr/local/lib/pam_ldap.so no_warn
...
auth required pam_unix.so no_warn try_first_pass
account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user
...
account required pam_unix.so
Maintenant, on peut se connecter mais, pour avoir tous les services
de noms, il faut NSS. On édite
host ldap.example.org
base dc=example,dc=org
nss_base_passwd ou=People,dc=example,dc=org?one
nss_base_shadow ou=People,dc=example,dc=org?one
nss_base_group ou=Group,dc=example,dc=org?one
Et il faut indiquer à la
group: files ldap
passwd: files ldap
Désormais, tout marche, notre machine FreeBSD peut utiliser tous les
services de noms que fournit LDAP.
Et sur le serveur ? Si on doit le configurer, s'il n'a pas déjà été fait, voici les étapes.
On install le logiciel serveur d'
suffix "dc=example,dc=org"
et s'assurer que les permissions (directives
Si on a un schéma LDAP spécifique, il faut aussi le mettre dans ce
fichier :
include /etc/ldap/schema/example.schema
On relance le serveur, on vérifie qu'il tourne et qu'on peut
l'interroger avec
Sa base est actuellement vide, il nous faut donc créer des
comptes. Il existe plusieurs solutions, le choix dépend des
circonstances.
Une fois le ou les comptes créés, il faut évidemment tester que les clients LDAP puissent s'en servir, comme indiqué plus haut, lors de la configuration du client.
Détruire un compte peut également se faire de plusieurs façons :
Il peut être pratique, notamment pour déboguer des problèmes avec
un client récalcitrant, de demander au serveur d'écrire dans son
journal toutes les requêtes LDAP reçues. Cela ralentit le serveur,
cela peut être très indiscret, mais c'est un bon outil de test. Il
faut pour cela modifier la directive
# Read slapd.conf(5) for possible values
loglevel 256
On trouvera alors dans le journal des informations très indiscrètes comme (au moment
d'une connexion SSH de l'utilisateur
Mar 26 10:15:05 lilith slapd[15932]: conn=410 op=1
SRCH base="ou=People,dc=example,dc=org"
scope=1 deref=0 filter="(uid=bleriot)"
(Un petit mot sur le journal : comme chaque requête LDAP est notée,
cela peut ralentir sérieusement le serveur. Vérifiez bien dans la
configuration de
N'oubliez pas les
Une fois les sauvegardes faites et vérifiées, vous pouvez aussi
vous préoccupper des performances du serveur LDAP. echoping a un
% echoping -n 5 -m ldap ldap.example.org \
-b ou=People,dc=example,dc=org -s one -r '(uid=bleriot)'
Elapsed time: 0.000606 seconds
Elapsed time: 0.000493 seconds
Elapsed time: 0.000446 seconds
Elapsed time: 0.000425 seconds
Elapsed time: 0.000393 seconds
---
Minimum time: 0.000393 seconds (651399 bytes per sec.)
Maximum time: 0.000606 seconds (422442 bytes per sec.)
Average time: 0.000472 seconds (542373 bytes per sec.)
Standard deviation: 0.000074
Median time: 0.000446 seconds (573991 bytes per sec.)
Les utiisateurs d'