Libnss-ldap et libpam-ldap: Problème avec "su" et TLS

Bonjour,

J’ai installé sur mon serveur l’authentification LDAP (grâce à libnss-ldap et libpam-ldap) avec le support TLS.

Mon authentification marche bien puisque:

  • Si je fais un “getent passwd”, on me retourne bien la liste des utilisateurs LDAP
  • Si je me connecte depuis la console avec un utilisateur LDAP, l’authentification marche
  • Si je me connecte depuis SSH avec un utilisateur LDAP, l’authentification marche

Cependant si j’exécute la commande “su”, voici le comportement :

  • Si j’exécute la commande “su” depuis l’utilisateur root, vers n’importe quel utilisateur (LDAP ou local), aucun problème, tout marche
  • Si j’exécute la commande “su” depuis un utilisateur (ldap ou local) autre que root , vers n’importe quel autre utilisateur (root, utilisateur local, utilisateur ldap), j’obtiens l’erreur suivante:
setgid: Opération non permise

Et dans les logs (auth.log):
(Ici dans l’exemple, dans le cas où je fais un “su root”):

su[1738]: bad group ID `0' for user `root': Operation not permitted

Après avoir cherché sur Internet, certaines personnes avaient le problème et l’ont résolu en corrigeant les droits du fichier /bin/su. J’ai vérifié et pourtant les droits de ce fichier sont bien bons.

Après avoir réalisé plusieurs essais, j’ai remarqué que mon problème pouvait être résolu en désactivant le TLS dans libnss-ldap et libpam-ldap. Seulement cette solution ne me convient pas, pour des raisons de sécurité.

Le problème ne vient pas du certificat puisque libnss-ldap et libpam-ldap marchent correctement (Rappel: J’arrive bien à m’authentifier, c’est juste les “su” qui ne marchent pas, si cette commande est exécutée par un utilisateur autre que root.

Avez-vous des idées pour résoudre mon problème?
Merci d’avance

Dans mes fichiers /etc/libnss-ldap.conf et /etc/pam_ldap.conf:

ssl start_tls
tls_checkpeer yes
tls_cacertfile /etc/ldap/cert/cacert.pem

Dans /etc/nsswitch :

passwd: compat ldap
group:  compat ldap
shadow: compat ldap

/etc/pam.d/common-account:

account  required   pam_unix.so
account  sufficient pam_ldap.so

/etc/pam.d/common-session:

session  required  pam_limits.so
session  required  pam_unix.so
session  optional  pam_ldap.so
session  required  pam_mkhomedir.so skel=/etc/skel

/etc/pam.d/common-password:

password  required   pam_cracklib.so retry=3 minlen=6
password  sufficient pam_unix.so use_authtok md5 shadow
password  sufficient pam_ldap.so use_authtok
password  required   pam_deny.so

/etc/pam.d/common-auth:

auth  required   pam_env.so
auth  sufficient pam_unix.so
auth  sufficient pam_ldap.so use_first_pass
auth  required   pam_deny.so

/etc/pam.d/su

#
# The PAM configuration file for the Shadow `su' service
#

# This allows root to su without passwords (normal operation)
auth       sufficient pam_rootok.so

# Uncomment this to force users to be a member of group root
# before they can use `su'. You can also add "group=foo"
# to the end of this line if you want to use a group other
# than the default "root" (but this may have side effect of
# denying "root" user, unless she's a member of "foo" or explicitly
# permitted earlier by e.g. "sufficient pam_rootok.so").
# (Replaces the `SU_WHEEL_ONLY' option from login.defs)
# auth       required   pam_wheel.so

# Uncomment this if you want wheel members to be able to
# su without a password.
# auth       sufficient pam_wheel.so trust

# Uncomment this if you want members of a specific group to not
# be allowed to use su at all.
# auth       required   pam_wheel.so deny group=nosu

# Uncomment and edit /etc/security/time.conf if you need to set
# time restrainst on su usage.
# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
# as well as /etc/porttime)
# account    requisite  pam_time.so

# This module parses environment configuration file(s)
# and also allows you to use an extended config
# file /etc/security/pam_env.conf.
#
# parsing /etc/environment needs "readenv=1"
session       required   pam_env.so readenv=1
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session       required   pam_env.so readenv=1 envfile=/etc/default/locale

# Defines the MAIL environment variable
# However, userdel also needs MAIL_DIR and MAIL_FILE variables
# in /etc/login.defs to make sure that removing a user
# also removes the user's mail spool file.
# See comments in /etc/login.defs
#
# "nopen" stands to avoid reporting new mail when su'ing to another user
session    optional   pam_mail.so nopen

# Sets up user limits, please uncomment and read /etc/security/limits.conf
# to enable this functionality.
# (Replaces the use of /etc/limits in old login)
# session    required   pam_limits.so

# The standard Unix authentication modules, used with
# NIS (man nsswitch) as well as normal /etc/passwd and
# /etc/shadow entries.
@include common-auth
@include common-account
@include common-session