Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.
“Sous Linux, tout est fichier.” Cette idée géniale nous vient de Rudd Canaday, l'un des trois fondateurs des systèmes Unix (avec Ken Thompson et Dennis Ritchie) dans les années 70.
Bien entendu, les données sont stockées dans des fichiers, mais les périphériques sont aussi des fichiers, les disques, les cartes réseau, les répertoires, la représentation des processus, etc. Il est donc primordial de comprendre la gestion des droits associée à ces fichiers.
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 :
Et nous verrons deux droits un peu particulier sous Linux : SetUID et StickyBit.
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 :
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.
Ce mode de gestion des droits nous vient d'une norme de l'armée américaine nommée Trusted Computer System Evaluation Criteria (plus connu sous le nom du “livre orange” (orange book).
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.
Les droits sous Linux sont définis à l'aide de 3 bits :
r
(pour “read”) ;w
(pour “write”) ;x
(pour “execute”).Et nous avons vu ci-dessus que les droits étaient exprimés :
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 :
# En tant que propriétaire du fichier ou via le compte root # on peut changer les droits s'appliquant sur un fichier # Accorde tous les droits pour l'utilisateur propriétaire chmod u+rwx aFile # Retire le droit d'exécution pour tous les utilisateurs chmod ugo-x aFile # Equivalent chmod a-x aFile
Vous savez que les bons informaticiens cherchent toujours à économiser les frappes clavier au strict nécessaire. Et la commande précédente chmod ugo-rw+x
fut raccourcie de manière très efficace par chmod a=x
.
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 taper les commandes :
chmod u=rwx aFile chmod g=rx aFile chmod o=r aFile
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 :
Nous avons donc une valeur en base décimale équivalente à chaque combinaison possible de ces 3 bits telle que :
Droits | valeur binaire | Valeur décimale |
---|---|---|
- - - | 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 |
# Affecter les droits de lecture/ecriture pour tout le monde chmod 666 aFile # Donner les droits de lecture et d'execution à tous mais # n'autoriser l'écriture qu'au compte propriétaire chmod 755 aFile
La seconde commande importante concernant la gestion des droits sous Linux est chown(pour “change owner”, modification du compte propriétaire).
La commande chown
permet de changer la propriété d'un objet Linux.
Mais ATTENTION, vous devez disposer d'une élévation de privilèges pour lancer cette commande. En effet, un utilisateur lambda ne peut pas transférer la propriété des ses objets à un autre utilisateur. C'est tout à fait normal, cette fonctionnalité poserait beaucoup de problèmes de sécurité et de fiabilité.
# Meme si je suis propriétaire, je ne peux pas changer le compte propriétaire sudo chown userDest:groupDest aFile
Vous connaissez désormais les droits standard sous Linux, mais il existe deux droits spéciaux supplémentaires que je vous propose d'analyser :
Ci dessous on montre notamment comment la commande passwd illustre parfaitement le rôle essentiel mais très dangereux de SetUID, et je vous propose d’illustrer le Sticky Bit avec son plus fervent représentant : le répertoire /tmp
!