“Sous Linux, tout est fichier.”
Dans ce chapitre, je vous propose de détailler le principe fondamental de la gestion des droits sous Linux dit DAC pour Discretionary Access Control.
Nous verrons ensuite :
la représentation de ces droits : lecture, écriture, exécution pour les fichiers et les répertoires,
leur correspondance numérique
Et nous verrons deux droits un peu particulier sous Linux :SetUID
et StickyBit
.
Appréhendez le principe régissant les droits sous Linux
Le contrôle d'accès sous les systèmes Unix, et par héritage sous Linux, est dit “discrétionnaire“ : tous les objets (répertoires, fichiers, processus, etc.) sont la propriété d'un compte utilisateur ou système, ainsi que d'un groupe de comptes utilisateurs et/ou système.
Les droits associés à ces objets sont donc définis pour :
Le propriétaire de l'objet
Le groupe propriétaire de l'objet
Tous les autres : comptes utilisateurs et/ou système qui ne sont pas le compte et le groupe propriétaire.
L'aspect discrétionnaire de la gestion de ces droits réside dans le fait que le propriétaire de l'objet (ainsi que le super utilisateur root) peut directement gérer les droits associés à cet objet.
Selon cette norme, un utilisateur peut donc créer, modifier ou supprimer ses propres objets, et définir quels autres comptes utilisateurs peuvent accéder en lecture ou modification à cet objet.
Associée à la présence d'un compte super utilisateur, généralement root, cette gestion de droits reste finalement assez simple. Mais on peut alors lui reprocher son manque de granularité. Par exemple, un processus lancé par un utilisateur hérite de ses droits même si ce processus n'en a pas forcément besoin.
Maîtrisez le triplets des droits sous Linux
Les droits sous Linux sont définis à l'aide de 3 bits :
Un bit à la position 2, pour indiquer le droit de lecture, généralement noté
r
(pour "read").Un bit à la position 1, pour indiquer le droit en écriture, généralement noté
w
(pour "write").Un bit à la position 0, pour indiquer le droit en exécution, généralement noté
x
(pour "execute").
Et nous avons vu ci-dessus que les droits étaient exprimés :
pour le propriétaire noté
u
(pour "user") ;pour le groupe propriétaire noté
g
(pour "group") ;et enfin pour tous les autres, notés eux
o
(pour "others" comme un très bon film d’ailleurs).
Vous pouvez en déduire une expression générale des droits sur un objet à l'aide de 9 bits, répartis en 3 groupes de 3 dans l'ordre suivant :
rwx pour u
rwx pour g
rwx pour o
Voilà, vous avez tout compris ! Ah… on me signale dans l’oreillette qu’un petit screencast qui détaille tout ça serait le bienvenu ? Pas de soucis, et au passage on en profite pour découvrir les commandes touch
et chmod
, c’est parti !
Simplifiez la gestion des droits avec leur valeur numérique
Mais qu'en est-il lorsque vous souhaitez positionner des droits spécifiques à chaque utilisateur ? Par exemple :
rwx
pour l'utilisateur propriétaire ;rx
pour le groupe propriétaire ;r
uniquement pour tous les autres.
Il faudrait alors écrire :
chmod u=rwx fichier
puis
chmod g=rx fichier
puis
chmod o=r fichier
Les bons informaticiens étant fainéants, il y a forcément plus court ! Et oui, il y a effectivement plus court, en passant notamment par la valeur numérique de chaque bit de permission.
En effet, en considérant que :
le bit
x
est en position 0, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1x2exp0, soit 1 ;Le bit
w
est en position 1, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1x2exp1, soit 2 ;Le bit
r
est en position 2, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1x2exp2, soit 4 ;
Nous avons donc une valeur en base décimale équivalente à chaque combinaison possible de ces 3 bits telle que :
- - -
-> 000
-> 0+0+0
-> 0
- - x
-> 001
-> 0+0+1
-> 1
- w -
-> 010
-> 0+2+0
-> 2
- w x
-> 011
-> 0+2+1
-> 3
r - -
-> 100
-> 4+0+0
-> 4
r - x
-> 101
-> 4+0+1
-> 5
r w -
-> 110
-> 4+2+0
-> 6
r w x
-> 111
-> 4+2+1
-> 7
Oui, bon, je sais, tout ça parait un peu compliqué, mais il n’en est rien. La preuve : je vous montre comment vous servir de la base 2 pour gérer les droits sur les fichiers !
Changez le propriétaire d’un fichier sous Linux
Manipulez les droits spéciaux sous Linux
Vous connaissez désormais les droits standard sous Linux, mais il existe deux droits spéciaux supplémentaires que je vous propose d'analyser :
Le premier de ces droits particuliers se nomme le
SetUID
bit, et son petit frère leSetGID
bit. Ce droit permet notamment d’exécuter un fichier avec les droits de son propriétaire ! C’est très important, car de nombreux aspects de la gestion des droits sous Linux utilisent cette propriété fondamentale.Le second est le
Sticky Bit
(le "bit collant"). Ce droit est une tentative de gestion d'espaces collaboratifs, proposé par la branche BSD de Unix au milieu des années 80 (même si une version antérieure de cette fonctionnalité existait déjà sur Unix dès les années 70, mais pas du tout avec le même objectif).
Allez, je vous montre tout ça dans le screencast ci-dessous. Vous verrez notamment comment la commande passwd
illustre parfaitement le rôle essentiel mais très dangereux deSetUID
, et je vous propose d’illustrer le Sticky Bit
avec son plus fervent représentant : le répertoire /tmp
!
En résumé
Le contrôle d'accès sous Linux est discrétionnaire (DAC)
Les droits d'accès sont donc définis pour 3 entités : le propriétaire de l'objet, le groupe propriétaire et tous les autres comptes utilisateurs et/ou système.
Les droits d'accès sont également définis avec 3 bits : READ, WRITE et EXECUTE
Au total, il faut 9 bits (READ, WRITE et EXECUTE x 3 entités) pour définir les droits d'accès d'un objet sous Linux
Ces droits sont exprimés en puissance de 2 avec les valeurs 0, 1, 2 et 4 offrant une combinaison unique, par exemple 755
Les commandes
chown/chgrp
("change owner"/"change group") permettent de changer le propriétaire et le groupe propriétaire d'un objetSetUID
est un droit spécial permettant d'exécuter un fichier avec les droits de son propriétaireSticky Bit
est un droit spécial permettant de gérer des espaces partagés
Bref, les fichiers Linux n'ont presque plus de secret pour vous ! Il est temps de passer à un autre gros morceau : la gestion du réseau. En route vers la prochaine partie alors !