(avec l'active participation de Christophe Martin <C.Martin@ipnl.in2p3.fr>)
Un grand classique parmi les questions sur la liste est « comment faire pour que tout le monde puisse se connecter à Internet, et pas seulement root ? ». Une variante est « que tout le monde puisse utiliser la carte son ». Toutes ces questions ont le même genre de réponse sous Debian : on met les utilisateurs habilités à faire telle ou telle chose dans tel ou tel groupe. Mais avant d'aller plus loin, voyons un peu mieux ce que sont les permissions, et leur utilité.
Les permissions ne sont pas là seulement pour vous empêcher de faire ce que vous voulez (seul root peut utiliser le modem, c'est pas juste...) mais aussi pour :
Sous Unix, la plupart des périphériques sont vus sous forme de fichiers spéciaux placés dans le répertoire /dev (la souris, le disque dur, les partitions de chaque disque, le modem, etc). Qui a accès en lecture et écriture à l'un de ces fichiers contrôle le périphérique qui lui est associé sans aucune autre forme de sécurité.
Accorder un privilège est un acte qui doit être réfléchi. Il faut partir du principe que lorsque quelqu'un possède un privilège quelconque, un jour ou l'autre, ce droit sera utilisé d'au moins l'une des trois manières suivantes :
Certains périphériques sont évidemment plus sensibles que d'autres :
La philosophie Debian consiste à créer un grand nombre de groupes, un par catégorie de matériel. Dans /dev, chaque périphérique appartient à un de ces groupes, suivant sa catégorie.
À partir de là, il est facile de contrôler qui a le droit de faire quoi. Pour qu'un utilisateur ait le droit de se servir pleinement d'un lecteur de disquettes, c'est-à-dire non seulement de monter une disquette, mais aussi de la formater, il suffit de l'ajouter dans le groupe floppy (en fait monter une disquette ne nécessite absolument pas d'avoir des droits sur le lecteur de disquette. Aussi bizarre que ça puisse paraître à première vue, il faut des privilèges logiciels et non matériels).
Les groupes ont une autre utilité. Ils permettent également de contrôler certains aspects purement logiciels du système. Qui a le droit de lire tel ou tel fichier, ou qui a le droit de faire telle ou telle action.
Voici une liste de groupes, sans doute non exhaustive, accompagnés des privilèges qu'ils donnent (auxquels j'ai pensé):
Le fait d'appartenir à ce groupe, permet la lecture de bon nombre de fichiers de log (notamment /var/tmp/btmp) dans lesquels on trouve des choses intéressantes (comme des mots de passe en clair, mais c'est rare).
L'utilité majeure de ce groupe est de pouvoir lire les messages systèmes avec xconsole. (il faut ensuite lancer xconsole -file /dev/xconsole -bg black -fg blue -title "Systeme "`hostname`" - Debian GNU/Linux" -geometry 736x77+20+209). Ou du moins, c'est vrai sur ma machine. Il semble que ce ne soit pas vrai avec certaines distributions plus anciennes de Debian.
De fait, seul les administrateurs devraient appartenir à ce groupe.
Attention : ça n'a rien à voir avec le groupe dip, ici on ne parle que de pouvoir causer à un port série, sûrement pas de mettre en oeuvre un liaison IP sur une telle ligne (ce qui nécessite des privilèges logiciels énormes).
FIXME : Attention : chez moi, getty change les permissions des consoles virtuelles dont il a la charge. Ces consoles appartiennent alors au groupe dialout. Je ne connais pas l'impact que cela peut avoir sur la sécurité.
L'utilisation de ce groupe est à proscrire pour des raisons évidentes de stabilité, de sécurité, et de confidentialité.
sous root, lancer la commande
# adduser <nom de l'utilisateur> <nom du groupe>
Cette commande ne prend effet qu'après que l'utilisateur se soit déloggé puis reloggé.
D'accord, il faut être prudent ; mais comment vérifier précisément à quoi un
groupe donne accès ? La commande find
vient à la rescousse dans
ces moments difficiles.
sous root, exécuter une commande du genre
# find / /usr /var -xdev -group <nom du groupe> -ls
Par exemple chez moi, j'ai le résultat suivant :
# find / -group dip -ls 4167 1 drwxr-s--- 2 root dip 1024 Jan 17 1999 /etc/ppp/peers 4168 1 -rw-r----- 1 root dip 489 Jun 19 1998 /etc/ppp/peers/provider 77 1 drwxr-s--- 2 root dip 1024 Jan 17 1999 /etc/chatscripts 78 1 -rw-r----- 1 root dip 200 Jun 19 1998 /etc/chatscripts/provider 2108 104 -rwsr-xr-- 1 root dip 105532 Jun 19 1998 /usr/sbin/pppd
Ce qui signifie que seul root et les membres du groupe dip peuvent :
J'ai un lecteur de CD IDE qui s'appelle /dev/hdc. Après avoir installé Debian GNU/Linux, le périphérique /dev/hdc appartient au groupe disk (car il est impossible pour le programme d'installation de savoir si un périphérique IDE donné est un disque ou un lecteur de CD).
L'erreur serait d'ajouter les utilisateurs dans le groupe disk.
La bonne solution consiste à changer le périphérique /dev/hdc de groupe avec la commande :
# chgrp cdrom /dev/hdc
S'il y a un lien symbolique cdrom vers /dev/hdc dans /dev, il est inutile de s'en préoccuper. Les permissions des liens sont ignorées, seules comptent les permissions de ce qu'ils désignent.
Ensuite, il suffit d'ajouter les utilisateurs au groupe cdrom.
J'ai un lecteur zip. Le fichier correspondant est /dev/sda, qui fait partie du groupe disk
La mauvaise méthode consiste à mettre les utilisateurs dans le groupe disk.
La bonne méthode consiste à créer un groupe qui ne servira qu'à ça. Par exemple un groupe nommé zip :
# addgroup zip
Ensuite, changer le groupe du lecteur sda et de ses partitions :
# chgrp zip /dev/sda*
Enfin, ajouter les utilisateurs dans le groupe zip
Nota Bene : On peut empêcher un utilisateur de partitionner une cartouche, tout en lui laissant la possibilité de formater des partitions existantes.
La plupart des cartouches sont vendues déjà partitionnées avec une seule grande partition (en général la quatrième) qui couvre l'intégralité de la cartouche.
En ne donnant l'accès qu'à cette quatrième partition (/dev/sda4) et non à la cartouche toute entière (/dev/sda), on laisse la possibilité à un utilisateur de formater une cartouche du commerce, mais pas de la repartitionner.
Une question beaucoup moins banale sur le sujet est :
"Le système de groupe est très bien pour une machine personnelle, mais pas vraiment adaptée à une machine partagée et en réseau. En effet, on peut toujours utiliser les devices à distance si on peut se logger sur la machine. Sous solaris ou Red Hat, les droits des devices comme les lecteurs de disquettes et les cartes audio sont automatiquement positionnés en lecture/écriture pour la personne physiquement loggée sur la console et l'accès au device est bloqué pour le reste du monde. Comment faire de même sous Debian ?"
Malheureusement, il n'y a pas de bonne solution pour faire cela sous Debian (pour l'instant). Deux pistes :
schaumat@ens-lyon.fr
, pour ne pas
le nommer :) ont dit continuer l'investigation pour adapter cette solution à
Debian. Une piste : il faut utiliser PAM. Le meilleur moyen d'en savoir plus
est peut-être de lui demander directement...
La FAQ de la liste debian-user-french@lists.debian.org
15 avril 2002debian-user-french@lists.debian.org
mquinson@ens-lyon.fr
thierry.laronde@polynum.com
C.Martin@ipnl.in2p3.fr
Frederic.Petit@univ-mlv.fr