Sudo et LDAP

Arno (encore lui) m’a indiqué une feature interessante de sudo : on peut stocker le sudoers dans LDAP.
Fini les /etc/sudoers à gérer sur chaques machines !

Partie serveur LDAP

Un petit exemple vaut mieux qu’un long discours. Ici l’utilisateur toto veut invoquer n’importe quelle commande en tant que “root” (j’utilise cette règle dans des salles de libre service sous Ubuntu 8.04).

dn: ou=sudoers,dc=example,dc=net
objectclass: organizationalUnit
ou: sudoers
 
dn: cn=defaults,ou=sudoers,dc=example,dc=net
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOption's go here
sudoOption: logfile=/var/log/sudolog
 
dn: cn=root,ou=sudoers,dc=example,dc=net
objectClass: top
objectClass: sudoRole
cn: root
sudoUser: root
sudoHost: ALL
sudoCommand: ALL
 
dn: cn=toto_to_root,ou=sudoers,dc=example,dc=net
objectClass: top
objectClass: sudoRole
cn: toto_to_root
sudoUser: toto
sudoHost: ALL
sudoCommand: ALL

Un “ldapadd” pour envoyer la sauce et c’est fini.

Partie client Ubuntu 8.04

On installe sudo-ldap (par défaut sudo n’intègre pas le support de LDAP, la version de ce paquet est compilée avec les librairies LDAP).

[root@client01 #] apt-get install sudo-ldap

Et effectivement :

[root@client01 #] ldd `which sudo`
linux-gate.so.1 => (0xb7f48000)
libpam.so.0 => /lib/libpam.so.0 (0xb7f2a000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7f26000)
libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0xb7ee5000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d96000)
liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0xb7d89000)
/lib/ld-linux.so.2 (0xb7f49000)
libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7d76000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb7d5f000)
libgnutls.so.13 => /usr/lib/libgnutls.so.13 (0xb7ce8000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7cd0000)
libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb7cc0000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7cab000)
libgcrypt.so.11 => /lib/libgcrypt.so.11 (0xb7c5e000)
libgpg-error.so.0 => /lib/libgpg-error.so.0 (0xb7c59000)

Ensuite, il faut rensigner le nsswitch.conf :

sudoers:        files ldap

Puis le /etc/sudoers doit contenir uniquement le réglage suivant :

Defaults ignore_local_sudoers

Enfin, il faut ajouter la configuration suivante dans votre ldap.conf :

sudoers_base ou=sudoers,dc=example,dc=net

On note que si vous avez un fichier libnss-ldap.conf il est parsé par sudo-ldap à la place du ldap.conf. Pour mes configurations j’ai un fichier “réel” /etc/ldap/ldap.conf, /etc/ldap.conf et /etc/libnss-ldap.conf sont des liens. Mes fichiers sont cohérents.

Voili, voilou

6 Responses to “Sudo et LDAP”


  • Je n’ai découvert le stockage du fichier sudoers dans LDAP que 10 minutes avant toi ;-)

  • sudoers dans LDAP!…c’est pas nouveau selon certains (ceux qui partage jamais leurs découvertes) mais que c’est bien de le lire expliqué..merci Garnett (je link)

    Cordialement

  • Thx,

    En fait, ça faisait un bail qu’Arno m’en avait parlé mais je ne l’ai testé que maintenant (j’aime bien tester avant de poster).

    Content que ça serve !

  • Bonjour,

    Que se passe t’il lorsque le serveur LDAP est en panne, ou bien que la connexion ne fonctionne pas ?

    Il n’est plus possible d’utiliser sudo ?

  • En fait sudo avec le support de ldap peut merger des sudoers locaux et LDAP. Si la connexion est morte, alors tu as uniquement les maps locales.
    Heuresement tout n’est pas permis par défaut. Le problème que tu soulève est inhérent à chaque système de centralisation.

  • Bonjour, j’ai testé la méthode sur une Ubuntu server 9.10 et ça ne passe pas. Je penche pour l’objectClass sudoRole qui ne serait pas définit dans les schémas que j’ai chargé à l’installation (cosine.ldif, inetorgperson.ldif et nis.ldif). Cela dit, j’ai recherché cette classe avec grep dans le dossier des schémas et ne l’ai pas trouvé. ça a l’air de recouper une autre méthode que j’ai trouvé sur le net et qui indiquait comment définir cette classe, mais elle avait l’air un peu vieillotte.

Leave a Reply