J'ai trouvé cet exemple, intitulé: ACL et MASK sous linux . Dans cet article, les exemples suivants sont présentés, ce qui, à mon avis, aide à comprendre comment les ACL et umask
interagissent les uns avec les autres.
Contexte
Lorsqu'un fichier est créé sur un système Linux, les autorisations par défaut 0666
sont appliquées tandis que lorsqu'un répertoire est créé, les autorisations par défaut 0777
sont appliquées.
exemple 1 - fichier
Supposons que nous réglions notre umask sur 077 et que nous touchions un fichier. Nous pouvons utiliser strace
pour voir ce qui se passe réellement lorsque nous faisons cela:
$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile
Dans cet exemple, nous pouvons voir que l'appel système open()
est effectué avec les autorisations 0666, mais lorsque le umask 077
est ensuite appliqué par le noyau, les autorisations suivantes sont supprimées ( ---rwxrwx
) et nous nous retrouvons avec rw-------
aka 0600.
exemple - 2 répertoire
Le même concept peut être appliqué aux répertoires, sauf qu'au lieu des autorisations par défaut étant 0666, elles sont 0777.
$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777) = 0
drwxr-xr-x 2 saml saml 4096 Jul 9 10:55 testdir
Cette fois, nous utilisons la mkdir
commande. La mkdir
commande a ensuite appelé l'appel système mkdir()
. Dans l'exemple ci-dessus, nous pouvons voir que la mkdir
commande a appelé l' mkdir()
appel système avec les autorisations par défaut 0777
( rwxrwxrwx
). Cette fois avec un umask des 022
autorisations suivantes sont supprimées ( ----w--w-
), nous nous retrouvons donc avec 0755 ( rwxr-xr-x
) lors de la création des répertoires.
exemple 3 (Application de l'ACL par défaut)
Créons maintenant un répertoire et montrons ce qui se passe lorsque l'ACL par défaut lui est appliquée avec un fichier à l'intérieur.
$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir
$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx #effective:rwx
group::r-x #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx #effective:rwx
default:group::r-x #effective:r-x
default:mask::rwx
default:other::r-x
Créons maintenant le fichier aclfile
:
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Obtenez maintenant les autorisations du fichier nouvellement créé:
$ getfacl --all-effective acldir/aclfile
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
Remarquez le masque, mask::rw-
. Pourquoi n'est-ce pas mask::rwx
comme lorsque le répertoire a été créé?
Vérifiez le luvly
fichier journal pour voir quelles autorisations par défaut ont été utilisées pour la création du fichier:
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
C'est là que ça devient un peu déroutant. Avec le masque défini rwx
lors de la création du répertoire, vous vous attendriez à ce que le comportement soit identique pour la création du fichier, mais cela ne fonctionne pas de cette façon. C'est parce que le noyau appelle la open()
fonction avec les autorisations par défaut de 0666
.
Résumer
- Les fichiers ne seront pas autorisés à exécuter (masquage ou efficace). Peu importe la méthode que nous utilisons: ACL, umask ou mask & ACL.
- Les répertoires peuvent obtenir des autorisations d'exécution, mais cela dépend de la façon dont le champ de masquage est défini.
- La seule façon de définir les autorisations d'exécution pour un fichier qui se trouve sous les autorisations ACL est de les définir manuellement à l'aide
chmod
.
Références
mask::rw-
. Mais ce n'est pas vraiment votre question, n'est-ce pas?