Si le bit suid n'a aucun effet sur les répertoires et le bit collant n'a aucun effet sur les fichiers, pourquoi ne sont-ils pas combinés en un seul bit?

18

Est-ce que cela économiserait un bit par fichier, ou y a-t-il un remplissage nécessaire qui doit être utilisé de toute façon? Et même s'il y a du rembourrage, pourquoi ne pas les combiner et utiliser le bit supplémentaire pour une nouvelle fonctionnalité?

Harry
la source
3
Le bit collant fait quelque chose sur les fichiers ordinaires. Voir en.wikipedia.org/wiki/Sticky_bit pour le nombre de façons dont il est utilisé.
Joshua
@Joshua C'est intéressant, et c'est un bon point que sur les nix non Linux * le comportement varie. Mais j'avais Linux en tête pour cette question. Je me demande cependant si quelqu'un sur un noyau Linux avec BSD amd et ls pourrait toujours dépendre du bit de fichier collant? Et je suppose que divers programmes de Userland pourraient vérifier / agir dessus même si je n'en connais aucun qui le fasse.
Harry

Réponses:

26

Pour des raisons historiques. Le bit collant était à l'origine utilisé dans un but complètement différent: s'il était défini sur un fichier exécutable, il indiquait au système d'exploitation de conserver le segment de texte en swap. D'où le nom de "Sticky Bit".

Johan Myréen
la source
Merci, mais cela les empêche-t-il de rester "un bit" en interne? Ou est-ce qu'une économie d'un bit n'est tout simplement pas assez importante au niveau par fichier?
Harry
6
Un fichier exécutable peut avoir les quatre combinaisons de suid et sticky.
Johan Myréen
Oui, d'où la question d'origine. Peut-être mieux formulé, pourquoi le nom (ou l'utilisation antérieure) du bit collant a-t-il quelque chose à voir avec sa combinaison avec le bit suid aujourd'hui? Les fonctions des deux bits ne pourraient-elles pas être combinées en un seul bit "collant / suid", qui fonctionne comme suid lorsqu'il est défini sur des fichiers mais collant lorsqu'il est défini dans des répertoires?
Harry
17
Vous briseriez la compatibilité descendante si vous décaliez les bits. chmod 4755 filedéfinit le bit suid et chmod 1755 dirdéfinit le bit collant. Nous ne voulons pas casser les anciens scripts juste pour sauver un seul bit par fichier, n'est-ce pas? Bien sûr, en interne, un système de fichiers est libre d'implémenter votre optimisation, tant que l'interface externe reste la même.
Johan Myréen
6
@Johan Myréen: Et bien sûr, vous ne sauvegarderiez pas réellement ce bit, il deviendrait juste un bit inutilisé dans le champ d'autorisation octet / mot.
jamesqf