Monthly Archive for September, 2008

Clés USB et comptes LDAP

L’utilisation d’une clé USB sous Ubuntu par un utilisateur lambda est conditionée par son appartenance (ou non) au groupe “plugdev”. Plusieurs solutions :
- Passer sur toutes les machines ajouter les utilisateurs dans le groupe plugdev : autant se tirer une balle tout de suite.
- Faire un groupe posix dans LDAP “plugdev” et mettre les gens dedans. L’objection principal que je vois est que le GID de ce groupe est local (donc bas) : les GID distribués par LDAP doivent être sur une plage supérieure.
- Ajouter dynamiquement l’utilisateur dans le groupe “plugdev” après l’authentification.

J’ai retenu la dernière solution. On peut faire ça en utilisant la PAM pam_group.so.

/etc/security/group.conf

*;*;*;Al0000-2400;cdrom,floppy,plugdev

Cette ligne nous dit en gros que n’importe qui qui se connecte sur la machine à n’importe quelle heure et par n’importe quel moyen (ssh, login en mode texte, [k|x|g]dm etc.) se voit ajouter aux groupes locaux cdrom, floppy et plugdev.

/etc/pam.d/common-auth

auth    optional        pam_group.so
auth    sufficient      pam_ldap.so
auth    requisite       pam_unix.so nullok_secure
auth    optional        pam_smbpass.so migrate missingok

On active la pam_group qui va réaliser les actions définies dans /etc/security/group.conf. Attention a bien la placer en tête de fichier.

Enfin dans /etc/dbus-1/system.d/hal.conf, il faut remplacer “deny” par “allow” à la ligne :

<deny send_interface="org.freedesktop.Hal.Device.Volume"/>

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