[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Quelques petits problèmes LDAP et autres considérations sans importance (sauf pour moi).



Bonjour,

A l'occasion de l'achat d'un nouveau serveur pour remplacer la vieille machine fatiguée qui remplissait ce rôle dans mon labo, je me suis dit in petto "Tiens, c'est l'occasion d'installer un annuaire LDAP, depuis le temps que tu dis qu'il faut le faire...". Dont acte. Malheureusement, tout ne se passe pas vraiment aussi simplement que j'aurais pu l'espérer. Pour tout vous dire, après quelques dizaines d'heures d'avancées (maigres), d'échecs (cuisants), de bidouillages (approximatifs), de déceptions (cruelles) et autres arrachages de cheveux (capilo-douloureux), je suis pas loin de la crise de nerfs.

Mais avant de vous exposer par le menu le détail de mes misères, j'aurais besoin de quelques éclaircissements au niveau sécurité. Voilà, comme je suis derrière les pare-feu de l'université, je n'ai pas vraiment besoin d'un niveau de sécurité top-mega-secure, mais d'un autre côté, j'ai pas envie non plus que le moindre clampin puisse lire mon mot de passe rien qu'en sniffant une petite trame passant sur le réseau. Du coup, je me demande si j'ai besoin de TLS ou pas. En d'autre termes, avec le protocole ldap par défaut (celui qu'on trouve en 389 généralement), est-ce que les mots de passe circulent en clair sur le réseau ?

Ceci étant, j'ai quand même pas mal de problèmes...

Mais commençons par le commencement : Tout d'abord, j'utilise une lenny
$ cat debian_version
lenny/sid
$ uname -a
Linux serv 2.6.26-1-amd64 #1 SMP Wed Sep 10 15:31:12 UTC 2008 x86_64 GNU/Linux

Ensuite mon annuaire LDAP est destiné à
- gérer en local les noms de machines (ou=Hosts), les groupes (ou=Groups) et les utilisateurs non-root (ou=Users,ou=People)
- permettre le login des utilisateurs en local (via PAM) ou en SSH depuis les postes clients
- permettre l'authentification pour divers services Web depuis le serveur Apache local et d'autres serveurs Apache (distants)
- permettre l'authentification Samba
- permettre l'utilisation de l'annuaire comme carnet d'adresse pour les clients mails des utilisateurs qui le supportent.

Le serveur LDAP en tant que tel a l'air de fonctionner correctement ; en tout cas depuis la machine locale. J'ai pu créer mon arborescence, et y ajouter des enregistrements.

Ensuite, si je tape (en root)
$ ldapsearch -x -H ldap://serv -b "ou=Users,ou=People,dc=####,dc=####,dc=fr"
il m'affiche bien tout le contenu de mon annuaire.

A l'aide de Webmin, j'ai créé le certifiact indispensable à l'utilisation en TLS. Après celà, si je tape (toujours en root)
$ ldapsearch -x -H ldaps://<adresse spécifiée dans le certificat> -Z -b "ou=Users,ou=People,dc=####,dc=####,dc=fr
il m'affiche aussi tout le contenu de mon annuaire comme prévu.

Lorsque je passe en utilisateur lambda (qui existe dans l'annuaire)
$ su - lambda
il me dit "I have no name!", mais si j'active le service de cache nscd cette mention disparaît rapidement. Mais bon, pour l'instant, je laisse le cache désactivé (j'ai lu quelque part qu'il avait du mal à cohabiter avec Samba ; qu'en est-il ?).
Je peux alors faire des recherches en tant qu'utilisateur lambda depuis le serveur lui-même.

J'ai aussi testé la connection SSH depuis le serveur lui-même :
$ ssh lambda@localhost
et ça marche pas ! dans auth.log, le module pam_ldap me sort un fatidique "Invalid credentials"

Depuis un poste distant, la recherche en ldap:// marche, mais la recherche en ldaps:// ne marche pas ! La connection en ssh depuis un poste distant ne marche pas non plus...

Devant cet état de fait, j'ai essayé de regarder en détail les modules PAM qui interviennent dans l'affaire et même après les bricolés dans tous les sens, je ne note pas d'amélioration notable à mon grand dam !

Voilà, voilà, voilà....

Je suis à l'écoute de toute remarque, source d'information ou quoi que ce soit qui pourrait m'aider.

Merci d'avance.


PS :  Voilà la config actuelle (j'ai simplement viré les commentaires et remplacé les valeurs locales par des ####) :

#########################################
# fichier /etc/default/slapd (extrait): #
#########################################
SLAPD_SERVICES="ldap:/// ldaps:///"
###

##################################
# fichier /etc/ldap/slapd.conf : #
##################################
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/samba.schema

TLSCertificateFile /etc/ssl/ldap.cert
TLSCertificateKeyFile /etc/ssl/ldap.key

pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args
loglevel        8
modulepath      /usr/lib/ldap
moduleload      back_hdb
sizelimit 500
tool-threads 1
backend         hdb
database        hdb

suffix dc=####,dc=####,dc=fr
password-hash {MD5}
rootdn cn=admin,dc=####,dc=####,dc=fr
rootpw {MD5}####

directory       "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
index           objectClass,uid,uidNumber,gidNumber eq
lastmod         on
checkpoint      512 30

access to attrs=userPassword
        by self write
        by anonymous auth
        by * none
access to attrs=sambaLMPassword,sambaNTPassword
        by self write
        by anonymous auth
        by * none
access to dn.base=""
        by * read
access to *
        by * read
###

#################################
# fichier /etc/ldap/ldap.conf : #
#################################
base dc=####,dc=####,dc=fr
uri ldap://localhost/

binddn cn=nss,dc=####,dc=####,dc=fr
bindpw {MD5}aitP7fMRPBRSmYGVus966g==

rootbinddn cn=admin,dc=####,dc=####,dc=fr
pam_password crypt

TLS_REQCERT allow

nss_base_passwd ou=Users,ou=People,dc=####,dc=####,dc=fr
nss_base_shadow ou=Users,ou=People,dc=####,dc=####,dc=fr
nss_base_group ou=Groups,dc=####,dc=####,dc=fr
nss_base_hosts ou=Hosts,dc=####,dc=####,dc=fr
###

Pour permettre la connection des utilisateurs, j'ai configuré libnss-ldap et libpam-ldap de la manière suivante :

##############################
# fichier /etc/nsswitch.conf #
##############################
passwd:         files ldap
group:          files ldap
shadow:         files ldap

hosts:          files dns

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis
###

#################################
# fichier /etc/libnss-ldap.conf #
#################################
host 127.0.0.1
base dc=####,dc=####,dc=fr
ldap_version 3

nss_base_passwd   ou=Users,ou=People,dc=####,dc=####,dc=fr?one
nss_base_shadow   ou=Users,ou=People,dc=####,dc=####,dc=fr?one
nss_base_group    ou=Groups,dc=####,dc=####,dc=fr?one
nss_base_hosts    ou=Hosts,dc=####,dc=####,dc=fr?one

uri ldap://127.0.0.1
rootbinddn cn=admin,dc=####,dc=####,dc=fr
# le password du root est stocke en clair dans /etc/libnss-ldap.secret (mode 600)
binddn cn=nss,dc=dc=####,dc=####,dc=fr
bindpw ####

bind_policy soft
###

################################
# fichier /etc/pam_ldap.conf : #
################################
uri ldap://127.0.0.1
base dc=####,dc=####,dc=fr
ldap_version 3

rootbinddn cn=admin,dc=####,dc=####,dc=fr
# le password du root est stocke en clair dans /etc/pam_ldap.secret (mode 600)

pam_password crypt

binddn cn=nss,dc=####,dc=####,dc=fr
bindpw ####
###

Modules PAM :

#######################################
# fichier /etc/pam.d/common-account : #
#######################################
account sufficient      pam_ldap.so
account required        pam_unix.so     shadow
###

####################################
# fichier /etc/pam.d/common-auth : #
####################################
auth    required        pam_env.so
auth    sufficient      pam_ldap.so
auth    required        pam_unix.so     shadow use_first_pass
###

########################################
# fichier /etc/pam.d/common-password : #
########################################
password        required        pam_cracklib.so retry=3
password        sufficient      pam_ldap.so     use_authtok
password        required        pam_unix.so     shadow use_authtok
###

#######################################
# fichier /etc/pam.d/common-session : #
#######################################
session required        pam_limits.so
session required        pam_mkhomedir.so        skel=/etc/skel
session optional        pam_ldap.so
session required        pam_unix.so             shadow
###

#############################
# fichier /etc/pam.d/sshd : #
#############################
@include common-account
account    required     pam_nologin.so

@include common-auth

@include common-password

session    optional     pam_motd.so
session    optional     pam_mail.so standard noenv
@include common-session
###

Reply to: