Authentification Linux avec le LDAP de Zimbra du site

le besoin

  • l'accès aux serveurs de calcul sous Linux est géré par un annuaire LDAP local.
  • projet : utiliser la base zimbra pour gérér les accès aux services du laboratoire
    • adresse valide permet d'ouvrir les accès / compte fermé bloque les accès (wiki/intranet, vpn, ssh/calcul)
    • en cas de problème temporaire : masquer dans la liste GAL

LDAP zimbra

  • serveur:
    ldaps://xxxxxx.grenoble.cnrs.fr
  • arbre des utilisateurs :
    ou=people,dc=laboxxx,dc=cnrs,dc=fr
  • filtre utilisateurs :
    (uid=%{user})

    ou user=prenom.nom

  • identifiant de connexion LDAP :
    uid=xxxxxx,ou=people,dc=grenoble,dc=cnrs,dc=fr

    + mot de passe

LDAP sur Debian

  • installer les paquets : ldap-utils, libldap-common, libnss-ldapd, libpam-ldapd, nslcd, nslcd-utils
    apt install ldap-utils libldap-common libnss-ldapd libpam-ldapd nslcd nslcd-utils
  • paramétrer le serveur LDAP.
  • tester : ça ne marche pas
    $ su - prenom.nom
    su: l'utilisateur prenom.nom n'existe pas ou l'entrée de l'utilisateur ne contient pas tous les champs requis

«Débogage» et configuration

  • arrêt de nslcd et redémarrage en mode debug
    nslcd -ddd 2>&1 | tee /tmp/nslcd.log
    su - prenom.nom
  • recherche des éléments demandés à l'annuaire dans le log
    grep ldap_build_search_req /tmp/nslcd.log 
    ldap_build_search_req ATTRS: uidNumber cn gecos uid objectClass homeDirectory gidNumber loginShell
  • recherche des champs disponibles dans l'annuaire Zimbra et chercher des correspondances
    ldapsearch -x -H ldaps://XXXXXXX.grenoble.cnrs.fr/ -D uid=XXXXXXX,ou=people,dc=grenoble,dc=cnrs,dc=fr -w 'XXXXXXX' "uid=prenom.nom"
    cn: Ok
    displayName: => gecos 
    objectClass: posixAccount n'existe pas => filter sur (objectClass=zimbraAccount)
    pager: => uidNumber
    uid: Ok
  • Il manque donc
    gidNumber
    homeDirectory
    loginShell
  • Ajout du paramétrage des filtres et du mappage de champs à la fin de /etc/nslcd.conf
    filter passwd (objectClass=zimbraAccount)
    map passwd uidNumber pager
    map passwd gecos displayName
    ##group 100 : users
    map passwd gidNumber "100"
    map passwd homeDirectory "/home/$uid"
    map passwd loginShell "/bin/bash"
  • et on obtient
    adlpmmc@BWmini32:~$ su - jean-daniel.dubois
    Mot de passe : 
    jean-daniel.dubois@BWmini32:~$ pwd
    /home/jean-daniel.dubois
    jean-daniel.dubois@BWmini32:~$

    Login Ok et création du home

  • il reste à deployer/tester sur notre infra de calcul :
    • problème de l'accès ldap/zimbra depuis le datacentre IMAG.
      • le plus simple : utilisation de simpleproxy sur un serveur interne
        root@proxy:~# simpleproxy -L 636 -R XXXX.grenoble.cnrs.fr:636 -v
        simpleproxy[3818541]:Waiting for connections.
        simpleproxy[3818550]:Connect from xxx.xxx.xxx.xxxx (ANY:636->XXXX.grenoble.cnrs.fr:636)
        simpleproxy[3818551]:Connect from xxx.xxx.xxx.xxxx (ANY:636->XXXX.grenoble.cnrs.fr:636)
        simpleproxy[3818551]:Connect from xxx.xxx.xxx.xxxx (ANY:636->XXXX.grenoble.cnrs.fr:636) closed
        simpleproxy[3818552]:Connect from xxx.xxx.xxx.xxxx (ANY:636->XXXX.grenoble.cnrs.fr:636)
      • ouvrir l'accès de notre sous-réseau datacentre IMAG vers LDAP Zimbra (?)
      • installer openLdap en proxy. complexe…
    • utiliser sssd sur les serveurs permettrait un cache moyen terme qui éviterait les problèmes liés à des déconnexions temporaires au LDAP mais le mappage des attributs LDAP sur des constantes ou variables comme avec nslcd ne semble pas possible.

Outils pour utilisateurs