Niveau :
Résumé : setcap ; getcap ; getpcaps
Sous linux la gestion des droits des processus est héritée de posix et donc extrêmement simple.
Si on exclut les modules de sécurité comme SELinux, il n'y a que deux systèmes. Seul le premier est véritablement connu.
Les droits unix
Un processus porte en lui-même 2 informations associées à ses droits : un utilisateur et un groupe. Ceux-ci permettent de déterminer ses actions possibles sur les fichiers (donc partout puisque tout est fichier) avec les attributs correspondants.
Malheureusement tout n'est pas fichier, pour le reste il existe une distinction entre les processus d'uid 0 (root) et les autres. Cette distinction donne des droits supplémentaires au processus root lors de ses appels système, par exemple l'écoute sur un port inférieur à 1024 ou la possibilité de redémarrer une machine.
Ces droits sont hérités d'un processus à un autre sauf dans 2 cas :
- un fichier exécuté a le bit suid alors on change l'uid du processus (augmentation des droits en général vers root)
- le processus a l'uid root et demande à en changer (réduction des droits, par exemple pour login)
Les capabilities
C'est ici que ça devient intéressant. Sous linux, un processus dispose aussi d'un ensemble de droits spécifiques que peu de gens connaissent.
En supposant que votre noyau soit compilé pour (c'est en général le cas), il associera à chaque processus (pour être précis, chaque thread) un champ de bits lui listant ses droits (dont celui de garder le silence). Ce champ est hérité d'un processus à un autre et, miracle, il peut être associé à un fichier exécutable comme le bit suid.
continue reading...