56 votes

Pourquoi 777 est attribué à chmod pour tout autoriser sur un fichier ?

Lors d'un entretien, on m'a demandé pourquoi le 777 est chargé de prendre toutes les permissions pour un fichier. Pourquoi pas 555 ? Il a répondu qu'il y a une raison à tout. Alors, quelle est la raison de 777 ? Pourquoi pas un autre numéro ? Y a-t-il une signification à ce numéro ?

132voto

daviewales Points 1151

Je vais essayer d'aborder la raison sous-jacente pourquoi c'est 777, plutôt que aaa, ou 999.

N'oubliez pas que les autorisations se présentent sous le format suivant :

 u   g   o
rwx rwx rwx

où u=utilisateur, g=groupe, o=autre.

Maintenant, imaginez que vous représentez chacun de ces groupes sous forme binaire. 1 est vrai, 0 est faux.

Si vous voulez donner un accès complet à tout le monde, vous devez attribuer les permissions suivantes en binaire :

 u   g   o
rwx rwx rwx
111 111 111

Maintenant, si vous connaissez le binaire, vous réaliserez que lorsque vous convertissez 111 du binaire au décimal, on obtient 7 .

Ainsi, vous pouvez représenter l'accès complet comme 777 .

Nota: Nous sommes vraiment en train de convertir le binaire en octal. Voir l'édition ci-dessous.

Cela fonctionne également pour tous les autres modes d'accès.

Par exemple, nous pouvons facilement déterminer ce que 555 en convertissant chaque 5 en binaire, et l'écrire dans le format ci-dessus. 5 en binaire est 101 Nous avons donc les autorisations suivantes :

 u   g   o
r-x r-x r-x
101 101 101
 5   5   5

De même, si nous voulons donner toutes les autorisations à l'utilisateur, mais ne permettre aux autres personnes que de lire, nous pouvons trouver une représentation numérique.

 u   g   o
rwx r-- r--
111 100 100
 7   4   4

Maintenant, nous savons que 111 en binaire est 7 en décimal, et 100 en binaire est 4 en décimal. Ainsi, les permissions seront 744 .

Edit :

Techniquement, comme l'ont souligné @LuuVinhPhúc et @Braiam, nous convertissons le binaire en octal, comme décrit ci-dessous. Cependant, les représentations décimales et octales des nombres < 8 sont les mêmes, donc pour les nombres binaires à 3 chiffres ou moins, les représentations décimales et octales sont les mêmes.

Lorsqu'ils sont représentés sous forme de nombres octaux, plutôt que de les diviser en groupes de trois et d'effectuer une conversion binaire-décimale sur chaque groupe, vous pouvez en fait prendre les trois groupes ensemble comme un seul nombre binaire et le convertir en octal.

Par exemple, voici quelques conversions de binaire en octal :

0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744

Notez que je précède "0b" et "0o" pour distinguer les nombres binaires et octaux.

Si vous voulez jouer avec cela, ouvrez un terminal, exécutez python puis jouez avec les commandes suivantes :

oct(0b111111111)
bin(0o555)

N'oubliez pas de faire précéder les chiffres de "0b" ou "0o" pour indiquer à l'ordinateur la base qui vous intéresse. (Si vous ne le faites pas, il supposera la base 10).

17voto

Prakash V Holkar Points 2351

L'autorisation de lecture d'un fichier signifie 4 l'autorisation d'écriture d'un fichier signifie 2 et l'autorisation d'exécuter le fichier signifie 1 .

Donc le total de tout ceci est 7 .

Maintenant, qu'est-ce que 777 : d'abord 7 est pour le propriétaire du fichier, ce qui signifie que le propriétaire du fichier a les droits de lecture, de droit et d'exécution.

2ème 7 est pour le groupe auquel le fichier appartient, cela signifie que le groupe a également toutes les autorisations de lecture, d'écriture et d'exécution.

Et 3ème 7 est pour la permission des autres

Si vous donnez au fichier la permission 555 alors le fichier owner, group and others ont seulement read y execute autorisation not write permission parce que la permission de lire signifie 4 et celle d'exécuter signifie 1 donc le total obtient 5

7voto

Julio Nobre Points 101

En moins de mots que la première réponse :

Chaque fichier a 3 options de permissions : lecture, écriture et exécution. Vous pouvez choisir aucune de ces options, une de ces options, deux de ces options ou toutes ces options :

C(3,0) + C(3,1) + C(3,2) + C(3,3) = 8

1 + 3 + 3 + 1 = 8

Au total, il y a donc 8 combinaisons, 8 possibilités de permissions. En comptant à partir de 0, le dernier chiffre est 7 (de 0 à 7). Ainsi, représentées par des chiffres, voici toutes les options :

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)

Il y a trois chiffres car l'ordre est le suivant : [autorisations de l'utilisateur] [autorisations du groupe] [autorisations des autres].

Ainsi, 777 signifie que les trois groupes ont des droits de lecture, d'écriture et d'exécution.


Aussi (indirectement lié, donc vous ne devez pas nécessairement lire cette partie), parce que je pense que sa pertinence est importante : Pourquoi est-ce que read le numéro 4 au lieu du numéro 3 ?

0 - nothing
1 - execute
2 - write
3 - read
4 - execute + read (1 + 3)
5 - write + read (2 + 3)
6 - execute + write + read (3 + 2 + 1)
7 - ????? no way to get this with the 3 basic options (and we are missing execute + write)

La seule façon d'obtenir des combinaisons uniques pour toutes les possibilités est d'utiliser des puissances de 2 pour les options de base. 2 0 \= 1 (exécution), 2 1 \= 2 (écriture), 2 2 \= 4 (lire), et s'il y avait une 4ème option de base, elle serait numérotée 2 3 \= 8. Notez que write n'est pas listé tant que toutes les combinaisons d'options précédentes n'ont pas été listées (ce qui n'est qu'une option, puisqu'il s'agit juste de execute ). read n'est pas listé tant que toutes les combinaisons des options précédentes n'ont pas été listées (encore une, puisqu'il n'y a qu'une seule combinaison avec deux options - execute + write ). execute + write + read n'est pas listé tant que toutes les combinaisons précédentes n'ont pas été listées, c'est-à-dire 3, puisqu'il y a maintenant deux choix parmi trois permissions. La liste se poursuivrait de cette manière, quel que soit le nombre d'options de base. À titre d'exemple, avec 4 options de base (notez que nous savons également qu'il y aura 16 combinaisons au total, puisqu'il y a 4 options et 2 autorisations), la liste se poursuivra. 4 \= 16) :

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
8 - love
9 - execute + love (1 + 8)
10 - write + love (2 + 8)
11 - execute + write + love (1 + 2 + 8)
12 - read + love (4 + 8)
13 - execute + read + love (1 + 4 + 8)
14 - write + read + love (2 + 4 + 8)
15 - execute + write + read + love (1 + 2 + 4 + 8)

4voto

DavidT Points 328

Je suis surpris par tant de réponses similaires qui passent complètement à côté de la cible.

Après avoir déterminé les 3 classes qui étaient nécessaires : lecture, écriture et exécution. Ils ont opté pour l'octal (3 bits) pour minimiser l'espace nécessaire à la gestion du système de fichiers .

3voto

M Sasan MH Points 146

Pour une raison quelconque, les concepteurs d'UNIX ont décidé d'utiliser Numéros d'OCTAL pour les autorisations de fichiers. Comme vous le savez, la valeur maximale du nombre octal à un chiffre est 7. Il s'est avéré qu'un chiffre octal pour l'accès utilisateur, un pour l'accès groupe et un pour l'accès monde est suffisant pour presque tout. La valeur maximale du nombre octal à 3 chiffres est 777, et il est logique qu'elle désigne "l'accès à tout le monde/tout".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X