Pourquoi «chmod 1777» et «chmod 3777» définissent-ils tous les deux le bit collant?

15

Pour définir le bit collant sur un répertoire, pourquoi les commandes chmod 1777et les chmod 3777deux fonctionnent-elles?

Liao Zhuodi
la source
2
Vous proposez une opération potentiellement risquée. La combinaison bit collant et autorisations rwx pour tous est une mauvaise pratique. Tout le monde peut modifier et exécuter le fichier et le bit s permet de basculer vers l'utilisateur root sans mot de passe.
jippie
1
@jippie les bits setuid et setgid disparaissent si le fichier est modifié, vous ne pouvez donc pas obtenir un accès root de cette façon.
Kyle Jones
@KyleJones, c'est toujours dangereux. Si le passwdbinaire était accessible en écriture dans le monde, vous ne seriez pas en mesure d'obtenir un accès root en le modifiant, comme vous le dites, mais vous pouvez le remplacer par un autre binaire que tout le monde exécuterait par la suite, pensant que c'était le cas passwd.
Wildcard
@Wildcard Accepté.
Kyle Jones

Réponses:

29

Chaque nombre (également appelé octal car il s'agit de base8) dans ce groupe représente 3 bits. Si vous le transformez en binaire, cela le rend beaucoup plus facile.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Donc, si vous avez fait 1777, 3777, 5777 ou 7777, vous définiriez le bit collant car la troisième colonne serait un 1. Cependant, avec 3777, 5777 et 7777, vous définissez également d'autres bits (SUID pour la première colonne, et SGID pour la deuxième colonne).

Inversement, tout autre nombre à cet endroit (jusqu'à un maximum de 7) ne définirait pas le bit collant car la dernière colonne ne serait pas un 1 ou "on".

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0

JZeolla
la source
3
+1 pour une belle description du fonctionnement des nombres octaux et de la façon dont il s'applique aux bits d'autorisation de fichier.
un CVn le
1
Il s'appelle "bitmask", et +1 également pour expliquer / montrer comment il peut être défini et clearles colonnes Owner Group & Other.
Chris K
16

Les autorisations passées en argument à chmod sont spécifiées comme une valeur octale . Chaque chiffre de la valeur représente trois bits. Si trois chiffres sont donnés, vous définissez les bits de lecture, d'écriture et d'exécution pour le propriétaire du fichier, le groupe et les autres (tout le monde). Si quatre chiffres sont donnés, le nombre le plus à gauche définit les bits setuid, setgid et sticky. Octal 1 définit le bit collant. Octal 2 définit le bit setgid. Octal 2 + octal 1 est octal 3 qui définit à la fois le bit setgid et le bit collant.

Kyle Jones
la source
1
N'est-ce pas octal 2 | octal 1 plutôt qu'octal 2 + octal 1? Les opérations ont le même résultat dans ce cas, mais en général, c'est un peu au niveau du bit ou c'est important, n'est-ce pas?
gerrit
1
@gerrit Oui, dans le cas général, vous devriez regarder l' binary oropérateur. Cependant, comme vous le faites remarquer, dans ce cas, cela donne le même résultat, et beaucoup plus de gens connaissent l'addition.
un CVn le