Droits spéciaux Linux : setuid, setgid et sticky bit
SETUID
Lorsqu’un utilisateur exécute un script, celui-ci se lance avec les droits de l’utilisateur du fichier. Il arrive que l’on veuille lancer une commande spéciale (en général dévolue à root) en tant que simple utilisateur, exemple avec la commande passwd (sous /usr/bin/passwd) qui est une commande root, mais tous les utilisateurs peuvent pourtant changer leur mot de passe avec cette commande. En regardant les droits sur passwd, on s’aperçoit que ce fichier est setuidé :
[root@TOTOTEST tmp]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 27832 sep 20 2016 /usr/bin/passwd
Lorsqu’un utilisateur lance la commande passwd, elle est lancée avec les droits du superutilisateur root, ainsi l’écriture pourra se faire dans le fichier /etc/passwd et l’utilisateur aura changé son mot de passe sans être root. Sans le setuid, l’utilisateur n’aurait pas pu écrire dans le fichier /etc/passwd.
Il n’y a pas de notion de setuid pour les répertoires.
Syntaxe :
chmod u+s fichier-exécutable
chmod 4+droits fichier-exécutable
SETGID
Le principe du setgid est le même que le setuid pour un fichier mais au niveau des droits du groupe. Un exécutable setgidé peut donc être lancé avec les droits du groupe auquel il appartient.
Par contre, le comportement change lorsqu’il s’agit d’un répertoire. Lorsqu’un répertoire est setgidé, tous les fichiers créés dans ce répertoire appartiennent au même groupe que le répertoire. Imaginons un répertoire conteneur, plusieurs utilisateurs travaillent dedans, il est bon de le setgider, de cette façon, les fichiers créés appartiendront tous au même groupe et non aux groupes de chaque utilisateur individuel.
Syntaxe :
chmod g+s fichier-exécutable|répertoire
chmod 2+droits fichier-exécutable|répertoire
STICKY BIT
En ce qui concerne les répertoires, le sticky bit sert à sécuriser un fichier se trouvant dans un répertoire où tout le monde a les droits en écriture. En positionnant le sticky bit sur ce répertoire, la suppression d’un fichier est autorisé uniquement à son propriétaire.
Syntaxe :
chmod a+t répertoire
chmod 1+droits répertoire