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
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.