D'accord, parfois une question a plus de 10 ans mais reste sans réponse satisfaisante à votre goût, donc je publie la mienne. Chaque processus qui crée des fichiers (ou des répertoires) donne à ces fichiers un ensemble de permissions de lecture/écriture/exécution par défaut. Bien que nous ayons utilisé le mot par défaut ici, cela ne signifie pas une valeur par défaut fixe, c'est-à-dire, cela peut changer, tout comme nous pouvons changer le comportement d'un programme en modifiant ses valeurs de configuration.
C'est une croyance pandémique erronée dans le monde des débutants de penser qu'il existe certaines valeurs de permissions par défaut fixes (comme 664 et 775, ou parfois 755 et 644, et ainsi de suite) pour les fichiers et répertoires nouvellement créés. Bien que ces nombres peuvent être les valeurs de permission par défaut, mais comme nous l'avons dit plus tôt, ils ne sont pas des nombres fixes (octaux). Ils peuvent être différents pour chaque processus.
Alors quelle est la formule réelle pour calculer les permissions par défaut pour chaque processus? C'est 0777 &
pour les répertoires et 0666 &
pour les fichiers (dans les deux cas, l'opérateur &
est le ET binaire, c'est-à-dire, en termes simples, il peut désactiver certains bits dans 0777, mais il n'active aucun bit. Ce n'est ni une négation ni une soustraction, c'est du ET binaire).
Avis 1. man umask
ne donne pas la deuxième formule (pour les fichiers), mais ne vous inquiétez pas, c'est correct.
Avis 2. Il y a un problème de sécurité légitime avec le fait d'autoriser les fichiers à avoir des permissions d'exécution par défaut. Pour cette raison, les systèmes sont généralement configurés pour supprimer la permission d'exécution pour les fichiers, d'où le 0666 dans la deuxième formule ci-dessus. Les répertoires nécessitent cependant la permission d'exécution pour être navigables. Cela signifie que, par exemple, si /home/
a la permission r
, vous pouvez le ls
et voir son contenu, mais sans la permission x
, vous ne pouvez pas ls /home/$USER
).
Avis 3. Pour "définir" le masque pour le processus, utilisez la commande umask
. Pour "obtenir" le masque d'un processus, utilisez la commande umask
seule sans aucun argument, par exemple, me donne 0022 dans mon cas lorsque je l'exécute dans mon terminal.