Authentification d'utilisateurices sur un serveur LDAP
NB : cette doc n'en est pas vraiment une, c'est plutôt des gros bouts de doc interne à pRiNT copiés/collés ici, parce que ça peut toujours servir, hein.
Introduction
LDAP est le système d'authentification par annuaire choisi par pRiNT, afin de permettre à n'importe quelle utilisatrice de s'authentifier avec le même mot de passe sur n'importe quelle machine. Il est centralisé sur un serveur nommé prisme
. Ainsi, si une utilisatrice souhaite changer de mot de passe, son nouveau choix est pris immédiatement en compte sur tous les clients.
La mise en place fut difficile, et le serveur LDAP (version 2.1) n'a du coup pas été mis à jour depuis bien longtemps, de peur de tout casser, ce qui peut expliquer certaines incohérences entre ce qui est décrit ci-dessous et ce que ça donne maintenant que la version 2.2 est livrée dans sarge.
On peut distinguer 2 aspects dans ce système :
- un annuaire centralisé, contenant les informations des utilisatrices (login, mot de passe, chemin du répertoire personnel, groupes d'appartenance, shell utilisé, etc.)
- un système d'authentification centralisé : que l'on se logue via ssh, sur une console (via login), sur une session graphique (via gdm), et ce sur n'importe quel poste client, LDAP interroge le serveur afin de vérifier que l'utilisatrice est bien celle qu'elle prétend, et ce de manière totalement sécurisée (le client s'assure, grâce à un certificat signé, qu'il interroge bel et bien le serveur plutôt qu'un quelconque laptop mal-intentionné, et le mot de passe est crypté avant de passer par une connection cryptée elle aussi).
Techniquement, côté client, on trouve deux blocs :
- la partie NSS (Name Switch Server) concerne la gestion et la reconnaissance des UID/users et des GID/groupes
- la partie PAM (Pluggable Auth Module) concerne l'authentification.
Installation du serveur
Ça vient, ça vient...
Paquets Debian : ldap-utils, libldap2, sldap, libpam-cracklib, et en option :
- libldap2-dev, libslapd2-dev pour pouvoir faire des paquets Debian et compiler des trucs
- libpam-ldap, libnss-ldap si le serveur doit lui même utiliser le serveur LDAP pour authentifier ses users (à manier avec précaution, à moins de vraiment vouloir donner à tout le monde un shell sur le serveur...)
Les users ont pour objectClass : top, person, organizationalPerson, inetOrgPerson, posixAccount, shadowAccount.
Commandes de base :
slapcat
: exportation de la base LDAPslapadd
: importation d'entrée LDAP, voire d'une base entière
Mettre un poste client sous authentification LDAP
À venir : un script ldap-client-setup.sh
qui, une fois copié sur une machine cliente, fait tout ça automatiquement.
Configuration préalable
S'ils existent, il faut supprimer les utilisateurs et les groupes locaux du client, qui sont pris en charge par LDAP, dans /etc/passwd
et /etc/group
.
Installation des paquets Debian
Les paquets libnss-ldap
et libpam-ldap
permettent à NSS et PAM d'utiliser LDAP, ca-certificates
et openssl
sécurisent les échanges clients/serveur, libpam-cracklib
je ne sais plus, et nscd
est un "cache" d'authentification qui accélère les logins.
NB: nscd, comme tout cache, nécessite un rafraîchissement afin qu'une modification soit immédiatement prise en compte. Il suffit donc, après un changement de mot de passe, une création de compte, ou autre, de le relancer par : /etc/init.d/nscd restart
. On peut également modifier son délai de rafraîchissement automatique, au cas par cas, dans le fichier de configuration : /etc/nscd.conf
.
apt-get install libnss-ldap libpam-ldap ca-certificates openssl libpam-cracklib nscd
, donc, et voici les réponses qu'il faut donner à debconf, en adaptant, évidemment :
libnss-ldap
- hôte: prisme
- dn: dc=tanneries,dc=taz
- LDAP version: 3
- pas d'authentification
- lisible par tout le monde
libpam-ldap
- pas de base locale
- pas de mot de passe
- chiffrage des mots de passe: crypt
ca-certificates
- autoriser l'agréement: demander (pas oui, pas non)
Configuration post-installation
NB : les lignes ci-dessous correspondent aux options de config ajoutées ou modifiées par nos soins, il ne s'agit pas de fichiers de config entiers.
/etc/libnss-ldap.conf
host prisme
port 636
base dc=tanneries,dc=taz
uri ldaps://prisme/
ldap_version 3
ssl yes
sslpath /etc/ssl/certs
scope sub
nss_base_passwd ou=People,dc=tanneries,dc=taz?one
nss_base_shadow ou=People,dc=tanneries,dc=taz?one
nss_base_group ou=Group,dc=tanneries,dc=taz?one
/etc/nsswitch.conf
passwd: ldap compat
group: ldap compat
shadow: ldap compat
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
/etc/ldap/ldap.conf
BASE dc=tanneries, dc=taz
URI ldaps://prisme
TLS_CACERT /etc/ssl/certs/mouveupe.mine.nu-ca.pem
TLS_REQCERT demand
/etc/pam_ldap.conf
host prisme
port 636
uri ldaps://prisme/
ssl yes
sslpath /etc/ssl/certs
ldap_version 3
scope sub
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password crypt
tls_cacertfile /etc/ssl/certs/mouveupe.mine.nu-ca.pem
tls_cacertdir /etc/ssl/certs
/etc/pam.d/common-account
account sufficient pam_ldap.so
account required pam_unix.so
/etc/pam.d/common-auth
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-password
password required pam_ldap.so
password required pam_cracklib.so retry=3 minlen=6 difok=3
password required pam_unix.so use_authtok nullok md5
/etc/pam.d/common-session
session sufficient pam_ldap.so
session required pam_unix.so
Administration au quotidien
Quelques notes préalables :
- Pour utiliser les scripts qui bidouillent la base LDAP, mieux vaut être connecté en SSH sur le serveur. En tout cas, la plupart des scripts sont conçus dans ce sens.
- Certains des scripts décrits ci-dessous doivent être utilisés avec un p'tit
sudo
, vu qu'ils créent/suppriment des fichiers, par exemple des répertoires/home/nfs/*
- c'est pratique de mettre les scripts en question dans
/usr/local/sbin/
- la plupart de ces scripts vous révéleront leur syntaxe détaillée si vous les lancer sans paramètre, ou avec l'option
--help
:)
Ajouter un-e utilisateurice
Le script : ldapadduser.pl.
NB: ce script n'ajoute l'utilisateurice en question qu'à son groupe de base, donc après la création d'un-e nouvelle adminE (dont le groupe de base est obligatoirement "adminz"), il faut l'ajouter dans les groupes "users" et "print" avec ldapaddusertogroup.pl.
Supprimer un-e utilisateurice
Le script : ldapdeluser.pl.
NB : ce script enlève l'utilisateurice des groupes auxquels ille appartenait, fort logiquement.
Ajouter un-e utilisateurice d'un ou plusieurs groupes
Le script : ldapaddusertogroup.pl.
Supprimer un-e utilisateurice d'un ou plusieurs groupes
Le script : ldapdeluserfromgroup.pl.
Sources d'info
- liste debian-openldap: http://lists.snowman.net/pipermail/debian-openldap/
- LDAP, présentation et implémentation
- plein de petits scripts utiles : http://developer.skolelinux.no/info/studentgrupper/2003_NITH_brukeradmin/sluttfase/docbook.html