Comment fonctionne le truc collant?

148

SUID

Le bit collant appliqué aux programmes exécutables signalant au système de conserver une image du programme en mémoire une fois le programme exécuté.

Mais je ne sais pas ce qui est stocké dans la mémoire. Et comment je peux les voir, dans ce cas.?

coup de chance
la source
Voici un bon tutoriel avec des exemples travaillés et des explications. La clé pour comprendre ceci est le système octal impliqué. Didacticiel Linux Sticky Bits avec exemples travaillés .
CMP

Réponses:

193

C’est probablement l’une des choses les plus embêtantes que les gens perdent tout le temps. Le bit SUID / GUID et le sticky-bit sont deux choses complètement différentes.

Si vous faites un, man chmodvous pouvez lire sur le SUID et les sticky-bits. La page de manuel est également disponible ici .

Contexte

extrait

Les lettres rwxXst sélectionnent les bits de mode de fichier pour les utilisateurs concernés: lecture (r), écriture (w), exécution (ou recherche de répertoires) (x), exécution / recherche uniquement si le fichier est un répertoire ou dispose déjà de l'autorisation d'exécution pour certains utilisateur (X), définition de l'identifiant de l'utilisateur ou du groupe lors de l'exécution (s) , indicateur de suppression restreinte ou bit collant (t) .

SUID / GUID

Ce que la page de manuel ci-dessus essaie de dire, c’est que la position que le bit x prend dans le rwxrwxrwx pour l’octal de l’utilisateur (1er groupe de rwx) et le groupe octal (le deuxième groupe de rwx) peut prendre un état supplémentaire où x devient un s. Lorsque cela se produit, ce fichier, lorsqu'il est exécuté (s'il s'agit d'un programme et pas seulement d'un script shell), s'exécutera avec les autorisations du propriétaire ou du groupe du fichier.

Donc, si le fichier appartient à root et que le bit SUID est activé, le programme sera exécuté en tant que root. Même si vous l'exécutez en tant qu'utilisateur régulier. La même chose s'applique au bit GUID.

extrait

SETUID ET SETGID BITS

chmod efface le bit set-group-ID d'un fichier normal si l'ID de groupe du fichier ne correspond pas à l'ID de groupe effectif de l'utilisateur ou à l'un des ID de groupe supplémentaires de l'utilisateur, à moins que l'utilisateur ne dispose des privilèges appropriés. Des restrictions supplémentaires peuvent faire en sorte que les bits set-user-ID et set-group-ID de MODE ou RFILE soient ignorés. Ce comportement dépend de la stratégie et des fonctionnalités de l'appel système sous-jacent chmod. En cas de doute, vérifiez le comportement du système sous-jacent.

chmod conserve les bits set-user-ID et set-group-ID d'un répertoire, sauf indication contraire de votre part. Vous pouvez définir ou effacer les bits avec des modes symboliques tels que u + s et gs, et vous pouvez définir (mais pas effacer) les bits avec un mode numérique.

Exemples SUID / GUID

no suid / guid - seuls les bits rwxr-xr-x sont définis.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

Suid et bit exécutable de l'utilisateur activé (minuscules) - les bits rwsr-xrx sont définis.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid activé et bit exécutable désactivé (S majuscule) - les bits rwSr-xr-x sont définis.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

Le bit exécutable de guid & group est activé (minuscules) - les bits rwxr-sr-x sont activés .

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guid activé et bit exécutable désactivé (S majuscule) - les bits rwxr-Sr-x sont activés .

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

peu collant

Le bit collant, d’autre part, est noté comme t, par exemple, avec le /tmprépertoire:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Ce bit aurait toujours dû s'appeler le "bit de suppression restreinte" étant donné ce qu'il indique vraiment. Lorsque ce bit de mode est activé, un répertoire est créé pour que les utilisateurs ne puissent y supprimer que les fichiers et les répertoires dont ils sont propriétaires.

extrait

DRAPEAU DE SUSPENDANCE OU DRAPEAU DE SUPPRESSION RESTRICTED

L'indicateur de suppression restreinte ou bit collant est un bit unique, dont l'interprétation dépend du type de fichier. Pour les répertoires, cela
empêche les utilisateurs non privilégiés de supprimer ou de renommer un fichier du répertoire sauf s'ils sont propriétaires du fichier ou du répertoire; c'est ce qu'on appelle l'indicateur de suppression restreinte pour le répertoire. On le trouve généralement dans les répertoires en écriture, tels que / tmp. Pour les fichiers normaux sur des systèmes plus anciens, le bit enregistre l'image texte du programme sur le périphérique d'échange afin qu'il se charge plus rapidement à l'exécution. c'est ce qu'on appelle le bit collant.

slm
la source
43
En réalité, le sticky-bit pouvait auparavant être appliqué aux fichiers exécutables, ce qui leur permettait de rester dans l'échange après leur premier chargement. Cela pourrait économiser beaucoup de ressources disque / réseau (NFS) et d'utilisation du processeur inutiles pour des programmes très utilisés. Cependant, ni Linux ni la plupart (tous?) Les systèmes Unix ne le supportent plus (il a été supprimé du noyau). C'est "collant", car l'exécutable est bloqué en swap. En outre, il a été utilisé pour les répertoires que vous décrivez.
Baard Kopperud
4
En fait, "très utilisé ou très gros" serait une meilleure description. N'oubliez pas que dans mon université, le navigateur Web de Netscape était «collant» sur leur ordinateur HP-UX en 1995. Des programmes très souvent utilisés (par exemple, les commandes système exécutées fréquemment par cron) et de gros programmes (par exemple, Netscape). étaient les premiers candidats à devenir "collants". Dans les deux cas, il serait inutile de les recharger constamment à partir du disque / NFS.
Baard Kopperud
8
Les programmes Sticky-bit étaient censés rester résidents dans la RAM, pas dans le swap (le chargement d'une image à partir d'un fichier d'échange n'est pas tellement plus rapide que de le charger à partir d'un disque de système de fichiers). Il était destiné aux commandes essentielles au niveau du système d'exploitation, telles que ls. De toute évidence, seul le superutilisateur peut définir le bit persistant sur un fichier. Il est devenu moins important après l’introduction de la mémoire virtuelle et des bibliothèques partagées, et plus particulièrement lorsque les pagers sont devenus plus intelligents et peuvent décider de manière dynamique des pages à conserver.
alexis
4
Et comme la propriété sticky n’avait aucun sens pour un répertoire, le même bit du masque d’autorisations a ensuite été interprété pour modifier la sémantique traditionnelle de la création de fichiers pour les répertoires.
alexis
5
@ alexis: À l'origine, les programmes de bits collants étaient conservés dans l'espace d'échange. Cette opération était beaucoup plus rapide que la lecture du système de fichiers car la lecture des images de fichiers d'échange était des secteurs contigus et pouvait donc être lue principalement de manière asynchrone. Avec les premiers systèmes de fichiers, il n'y avait pas de "longueur d'exécution" de secteur et la plupart des premiers pilotes de système de fichiers lisaient un secteur à la fois, même si ces secteurs étaient consécutifs. Le résultat sur un PDP-40 était que les programmes collants semblaient se charger instantanément tandis que les programmes non collants prenaient la seconde ou les deux habituelles. Je pense que nous n'avions que edcollant.
wallyk
8

"Le bit collant appliqué aux programmes exécutables signalant au système de garder une image du programme en mémoire après l’exécution du programme."

Je pense que c'est une information assez obsolète, aujourd'hui, la plupart des Unix modernes l'ignorent. Sous Linux, le bit collant ne concerne que les répertoires. Voir ici et l'article assez informatif de Wikipedia .

Quoi qu'il en soit, dans cet ancien comportement, l'image (uniquement le "code", pas les données) était uniquement conservée dans la mémoire virtuelle, normalement permutée, et non dans la mémoire réelle, afin de l'exécuter plus rapidement la prochaine fois.

Léonbloy
la source
3

Quels sont les bits collants?

Un sticky bit est un bit d'autorisation défini sur un répertoire qui permet uniquement au propriétaire du fichier de ce répertoire ou à l'utilisateur root de supprimer ou de renommer le fichier. Aucun autre utilisateur ne dispose des privilèges nécessaires pour supprimer le fichier créé par un autre utilisateur.

Il s'agit d'une mesure de sécurité visant à éviter la suppression des dossiers critiques et de leur contenu (sous-répertoires et fichiers), bien que les autres utilisateurs disposent de toutes les autorisations.

chandrakumar.M
la source
1
Ce n'est pas correct: fr.wikipedia.org/wiki/Sticky_bit
AB
7
@AB Cela me semble assez exact, presque au point de paraphraser le début de l'article de Wikpedia que vous citez. Qu'est ce qui ne va pas avec ça?
Roaima
Je dirais que la réponse est incomplète. "Post-it" indique également que l'exécutable serait conservé dans l'espace de swap pour qu'il s'exécute plus rapidement. Il s’agit d’une histoire ancienne, mais dans les systèmes de fichiers plus anciens, les pilotes lisaient un secteur à la fois, même s’il s’agissait de secteurs consécutifs. Cela rendait les exécutables non collants lents, le caractère collant avait beaucoup de sens à cette époque.
GhostCode