Introduction
-
LDAP: Lightweight Directory Access protocol,
système de gestion d'annuaire, flexible. Version light d'un
protocole plus ancien, et beaucoup plus lourd : X500.
- caractéristiques:
-
stockage de données faiblement typées (strings, entiers, binaire).
-
organisées selon un modèle de classes d'objet (personne,
organisation, posixAccount, SambaAccount...)
-
différent d'un SGBD : faible typage, modèle supposant beaucoup
d'accès en lecture, peu en écriture, un objet peut appartenir à
plusieurs classes.
-
robuste : réplication du serveur possible.
- format d'échange de données LDIF:
- un standard : LDAP Data Interchange Format
- un format textuel : facilement scriptable
Introduction (suite)
Objectif de la présentation
-
installer et configurer un serveur d'authentification
LDAP: afin de centraliser la gestion des comptes unix sur
20 machines unix d'un cluster, avec les homedirs en NFS.
-
proposer une alternative sécurisée et portable à
NIS+.
-
détailler les étapes de configuration à travers les
fichiers de configuration impliqués sur une distribution Linux
récente (Fedora Core 3).
-
configurer séparément:
- le serveur
- les clients
- une interface web permettant de gérer l'annuaire
Configuration pour le serveur LDAP
Le serveur ldap s'appelle disk.dg.creatis.insa-lyon.fr, c'est
également le serveur NFS des home directories.
Création du certificat pour slapd
Le création d'un certificat autosigné se fait avec le Makefile adéquat
fourni par la package openssl:
# make -C /usr/share/ssl/certs slapd.pem
# chgrp ldap /usr/share/ssl/certs/slapd.pem
# chmod g+r /usr/share/ssl/certs/slapd.pem
Ce certificat contient a la fois la clé privée et la partie publique du
certificat.
Configuration du client LDAP
La configuration du fichier /etc/openldap/ldap.conf
permet
aux clients (package openldap-clients) de savoir quel serveur
contacter, et dans quel mode (ssl ou clear), ainsi que le RDN (Relative
Distinguished Name) à utiliser. Le fichier doit contenir :
HOST disk.dg.creatis.insa-lyon.fr
BASE dc=dg,dc=creatis,dc=insa-lyon,dc=fr
URI ldaps://disk.dg.creatis.insa-lyon.fr
TLS_CACERT /usr/share/ssl/certs/slapd.pem
TLS_CERT /usr/share/ssl/certs/slapd.pem
TLS_KEY /usr/share/ssl/certs/slapd.pem
Installation et configuration de LAM sur apache
-
Le package ldap-account-manager (LAM) permet de gerer les
comptes unix du serveur LDAP à travers une interface Web. Exemple de
écran de login, liste des utilisateurs, détail d'un utilisateur.
-
LAM a besoin d'un certain nombre de packages supplementaires
(php-ldap, plus des modules Perl du CPAN:
perl-Compress-Zlib, perl-Convert-ASN1,
perl-Digest-HMAC, ...).
-
Editer le fichier de configuration
/etc/httpd/conf.d/lam.conf
ainsi:
-
ajouter les directives
allow from a.b.c.d
pour les
restrictions d'acces.
-
modifier la ligne DirectoryIndex en
DirectoryIndex
index.php, index.html
.
-
recharger apache,
service httpd reload
.
-
note: si lam ne tourne pas sur le serveur ldap
(recommandé), alors, il faut:
-
récupérer le certificat
slapd.pem
du serveur.
-
Ne garder que la partie certificat de ce fichier (délimitée par
des tags BEGIN CERTIFICATE/END CERTIFICATE).
-
Le mettre en lecture pour other, de manière a ce que l'uid de
apache puisse y avoir accès.
-
configurer
/etc/openldap/ldap.conf
(cas du client
LDAP, voir le slide précédent).
-
La configuration de LAM se fait a partir de fichiers templates.
cd /var/www/lam/config
mv config.cfg_sample config.cfg
mv lam.conf_sample lam.conf
-
Editer le fichier
lam.conf
ainsi:
serverURL: ldaps://disk.dg.creatis.insa-lyon.fr
admins: cn=Manager,dc=dg,dc=creatis,dc=insa-lyon,dc=fr
usersuffix: ou=people,dc=dg,dc=creatis,dc=insa-lyon,dc=fr
groupsuffix: ou=groups,dc=dg,dc=creatis,dc=insa-lyon,dc=fr
hostsuffix: ou=machines,dc=dg,dc=creatis,dc=insa-lyon,dc=fr
domainsuffix: ou=domains,dc=dg,dc=creatis,dc=insa-lyon,dc=fr
# les valeurs par defaut sont 10000
minUID: 100
minGID: 100
-
Rediriger les requêtes à lam en https sur le serveur web en ajoutant
ceci dans le fichier
httpd.conf
:
NameVirtualHost *:80
<VirtualHost *:80>
Redirect /lam https://disk.dg.creatis.insa-lyon.fr/lam
</VirtualHost>
-
Activer https (installer le package mod_ssl) dans
conf.d/ssl.conf
et générer un certificat pour apache
sans mot de passe.
# cd /etc/httpd/conf
# make testcert
# mv ssl.key/server.key ssl.key/server.key.bak
# openssl rsa -in ssl.key/server.key.bak -out ssl.key/server.key
# service httpd restart # ne doit pas demander de passphrase
Mise en service
Configuration du client LDAP (pour activation du service)
-
Editer le fichier
/etc/ldap.conf
(du package
nss_ldap), qui doit contenir :
host disk.dg.creatis.insa-lyon.fr
base dc=dg,dc=creatis,dc=insa-lyon,dc=fr
ldap_version 3
pam_password md5
ssl on
tls_checkpeer yes
Switcher l'authentification vers LDAP
-
Désactiver les users et groups créés dans LAM des fichiers
/etc/passwd
, /etc/groups
, et
/etc/shadow
(les mots de passe Unix doivent être
intégrés à LDAP à ce moment-là, si besoin est, voir slide Importer
des passwords unix existants).
-
Configurer
/etc/nsswitch.conf
pour utiliser LDAP en
complément des fichiers habituels:
passwd: files ldap
shadow: files ldap
group: files ldap
-
configurer PAM (soit en lancant
system-config-authentication
), soit en modifiant
manuellement /etc/pam.d/system-auth
(system-auth est un
pseudo service introduit par RedHat, dans un soucis de
factorisation):
--- /etc/pam.d/system-auth 2004-04-14 17:09:47.000000000 +0200
+++ /tmp/system-auth 2004-09-22 16:06:02.000000000 +0200
@@ -3,13 +3,18 @@
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
+auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass
auth required /lib/security/$ISA/pam_deny.so
+account sufficient /lib/security/$ISA/pam_succeed_if.so uid < 100
account required /lib/security/$ISA/pam_unix.so
+account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.so
-password required /lib/security/$ISA/pam_cracklib.so retry=3
+password requisite /lib/security/$ISA/pam_cracklib.so retry=3 type=
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
+password sufficient /lib/security/$ISA/pam_ldap.so use_authtok
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
+session optional /lib/security/$ISA/pam_ldap.so
-
Tester avec
getent {group,passwd,shadow}
Des outils en ligne de commande
export BINDDN="cn=Manager,dc=dg,dc=creatis,dc=insa-lyon,dc=fr"
faire une recherche (la sortie de ces commandes est au format LDIF,
grace a l'option -L).
ldapsearch -L -x -D $BINDDN -W "(sn=bellet)"
modifier le password d'un objet.
ldappasswd -x -D $BINDDB -W -S "uid=bellet,ou=people,dc=dg,dc=creatis,dc=insa-lyon,dc=fr"
supprimer une entrée:
ldapdelete -x -D $BINDDN -W "uid=toto,ou=people,dc=dg,dc=creatis,dc=insa-lyon,dc=fr"
Des clients graphiques
Importer des passwords unix existants
Changer le password en utilisant le password Unix:
ldapsearch -L -x -D $BINDDN -w mypassword "(sn=*)" > x.ldif
éditer le fichier, et changer l'entrée userPassword
par
userPassword: {crypt}xxxx
avec xxxx étant le shadow
password. Enfin soumettre la modification au serveur:
ldapmodify -x -D $BINDDN -w mypassword -f x.ldif
Déployer sur d'autres postes clients
Conclusion
-
Vérifier avec un sniffer que le flux ldap entre client et serveur,
et entre webserver et server sont effectivement chiffrés.
-
Tester chaque brique de base séparément, avec les outils client en
ligne de commande
-
Utiliser éventuellement une autorité de certification pour signer
vos certificats de services (web et slapd).
-
La création, et la configuration (environnement, desktop, init
files) du homedirectory d'un utilisateur ne sont pas automatisées.
Références