Comment les autorisations de fichiers sont-elles appliquées aux fichiers nouvellement créés?

12

J'ai un répertoire qui dispose des autorisations suivantes:

drwxr-s---. user group folder

Sur le bureau, j'accède à ce dossier et clique droit pour créer un nouvel appel de fichier foo.txt. Puis en utilisant le terminal, j'ai créé un autre fichier en utilisant la commande $ touch bar.txt.

Lorsque je vérifie les autorisations pour ces fichiers, j'ai:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

J'attendais -rw-r-----. user group. Comment est née la permission d'écriture supplémentaire pour le groupe et la permission de lecture pour les autres?

Débordement de question
la source

Réponses:

16

setguid

Il y a 2 forces ici au travail. Le premier est le bit setgid qui est activé sur le dossier, folder.

drwxr-s---. user group folder

C'est sdans le pack de caractères au début de cette ligne. Ils sont regroupés ainsi:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

Les r-smoyens que tous les fichiers ou répertoires créés dans ce dossier auront le groupe automatiquement réglé sur le groupe group.

C'est ce qui a causé les fichiers foo.txtet a bar.txtété créé comme suit:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

autorisations et umask

Les autorisations que vous voyez sont une autre affaire. Ceux-ci sont régis par les paramètres de votre umask. Vous pouvez voir ce que votre umaskest défini avec la commande umask:

$ umask
0002

NOTE: ces bits sont également appelés bits "mode".

C'est un masque, il désactivera donc tous les bits liés aux autorisations activées. Dans cet exemple, le seul bit que je veux désactiver est les autorisations d'écriture pour les autres.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

La représentation des "bits" dans cette commande est sous forme décimale. Donc, un 2 équivaut à 010 sous forme binaire, qui est le bit d'écriture. Un 4 (100) signifie que vous souhaitez désactiver la lecture. Un 7 (111) signifie que vous voulez lire / écrire / exécuter tout désactivé. Construire à partir d'ici:

$ umask 007

Désactiverait les bits de lecture / écriture / exécution pour les autres utilisateurs.

Alors qu'en est-il de vos fichiers?

Eh bien, la umaskrègle les autorisations qui seront définies lors de la création d'un nouveau fichier. Donc, si nous avions l' umaskensemble suivant :

$ umask 007

Et commencé à toucher de nouveaux fichiers, nous les verrions créés comme suit:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Si nous l'avons changé pour autre chose, dites ceci:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Cela n'aura cependant aucun impact sur les fichiers que nous avons déjà créés. Vois ici:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Alors, que se passe-t-il avec le navigateur de fichiers?

C'est umaskce que j'avais appelé un réglage "doux". Il n'est en aucun cas absolu et peut être contourné assez facilement sous Unix de plusieurs manières. De nombreux outils prennent des commutateurs qui vous permettent de spécifier les autorisations dans le cadre de leur fonctionnement.

Prenez mkdirpar exemple:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

Avec l' -minterrupteur, nous pouvons passer outre umask. La touchcommande n'a pas cette fonctionnalité, vous devez donc faire preuve de créativité. Voir cette Q&R U&L intitulée: Les fichiers peuvent-ils être créés avec des autorisations définies sur la ligne de commande? pour de telles méthodes.

D'autres moyens? Remplacez simplement umask. Le navigateur de fichiers est probablement en train de faire cela ou d'ignorer complètement umasket de déposer le fichier en utilisant les autorisations configurées pour le faire.

slm
la source
Je pensais que umask est censé supprimer les privilèges, pas les ajouter. Ou est-ce que je manque quelque chose?
Débordement de questions
@QuestionOverflow - votre masque contrôle les autorisations qui sont autorisées lorsque des fichiers et des répertoires sont créés. D'où son nom. Il masque les bits utilisés pendant le processus de création.
slm
Mon lit umask 0002. Si umask définit des autorisations au lieu de supprimer des autorisations, le bit d'exécution serait défini pour l'utilisateur et le groupe lorsque je le fais touch, mais ce n'est pas le cas.
Débordement de questions
@QuestionOverflow - c'est une limitation de la touchcommande. Voir le lien que j'ai inclus dans mon A. Ce lien: unix.stackexchange.com/questions/47178/…
slm
Juste pour clarifier quelques points sur la base des commentaires: 1) les autorisations du nouveau fichier sont toujours déterminées par umask + le programme utilisé pour créer le fichier, 2) les autorisations ne sont jamais héritées du répertoire parent.
Débordement de questions