Chaque processus dans un système de type UNIX, comme tous les fichiers, a un propriétaire (l'utilisateur, qu'il soit réel ou un système de « pseudo-utilisateur », tels que daemon
, bin
, man
, etc.) et un propriétaire du groupe. Le propriétaire du groupe pour les fichiers d'un utilisateur est généralement le groupe principal de cet utilisateur et, de la même manière, tous les processus que vous démarrez appartiennent généralement à votre ID utilisateur et à votre ID de groupe principal.
Parfois, cependant, il est nécessaire d'avoir des privilèges élevés pour exécuter certaines commandes, mais il n'est pas souhaitable de donner des droits administratifs complets. Par exemple, la passwd
commande doit avoir accès au fichier de mots de passe cachés du système pour pouvoir mettre à jour votre mot de passe. Évidemment, vous ne voulez pas donner à chaque utilisateur des privilèges root, juste pour qu'ils puissent réinitialiser leur mot de passe - cela conduirait sans aucun doute au chaos! Au lieu de cela, il doit y avoir un autre moyen d'accorder temporairement des privilèges élevés aux utilisateurs pour effectuer certaines tâches. C'est à cela que servent les bits SETUID et SETGID. C'est un moyen de dire au noyau d'augmenter temporairement les privilèges de l'utilisateur, pendant la durée de l'exécution de la commande marquée. Un binaire SETUID sera exécuté avec les privilèges du propriétaire du fichier exécutable (généralementroot
), et un binaire SETGID sera exécuté avec les privilèges de groupe du propriétaire du groupe du fichier exécutable. Dans le cas de la passwd
commande, qui appartient à root
et est SETUID, elle permet aux utilisateurs normaux d'affecter directement le contenu du fichier de mot de passe, de manière contrôlée et prévisible, en s'exécutant avec les privilèges root. Il existe de nombreuses autres SETUID
commandes sur UNIX comme les systèmes ( chsh
, screen
, ping
, su
, etc.), qui tous exigent des privilèges élevés pour fonctionner correctement. Il existe également quelques SETGID
programmes, où le noyau modifie temporairement le GID du processus, pour permettre l'accès aux fichiers journaux, etc. sendmail
est un tel utilitaire.
Le sticky bit
sert un but légèrement différent. Son utilisation la plus courante consiste à s'assurer que seul le compte d'utilisateur qui a créé un fichier peut le supprimer. Pensez au /tmp
répertoire. Il a des autorisations très libérales, qui permettent à n'importe qui de créer des fichiers là-bas. Ce qui est bon et permet aux processus des utilisateurs de créer des fichiers temporaires ( screen
, ssh
, etc, conserver les informations d'état /tmp
). Pour protéger les fichiers temporaires d'un utilisateur, /tmp
le bit collant est défini, de sorte que moi seul puisse supprimer mes fichiers et que vous seul puissiez supprimer le vôtre. Bien sûr, root peut tout faire, mais nous devons espérer que le sysadmin n'est pas dérangé!
Pour les fichiers normaux (c'est-à-dire pour les fichiers non exécutables), il est inutile de définir les bits SETUID / SETGID. SETGID sur les répertoires de certains systèmes contrôle le propriétaire du groupe par défaut pour les nouveaux fichiers créés dans ce répertoire.