J'ai trouvé cet exemple, intitulé :ACL et MASK sous Linux. Dans cet article, les exemples suivants sont démontrés, ce qui, je pense, aide à comprendre comment les ACL et umask
interagir les uns avec les autres.
Contexte
Lorsqu'un fichier est créé sur un système Linux, les autorisations par défaut 0666
sont appliqués alors qu'à la création d'un répertoire les permissions par défaut 0777
sont appliqués.
exemple 1 - fichier
Supposons que nous définissions 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 fait avec les permissions 0666, cependant quand le umask 077
est alors appliqué par le noyau les permissions suivantes sont supprimées (---rwxrwx
) et il nous reste rw-------
alias 0600.
exemple - 2 répertoires
Le même concept peut être appliqué aux répertoires, sauf qu'au lieu que les autorisations par défaut soient 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 le mkdir
commande. Le mkdir
commande a ensuite appelé l'appel système mkdir()
. Dans l'exemple ci-dessus, nous pouvons voir que le mkdir
commande appelée mkdir()
appel système avec les autorisations par défaut 0777
(rwxrwxrwx
). Cette fois avec un umask de 022
les autorisations suivantes sont supprimées (----w--w-
), il nous reste donc 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 lors de la création du répertoire ?
Vérifiez le luvly
log 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 réglé sur rwx
lorsque le répertoire a été créé, vous vous attendriez au même comportement pour la création du fichier, mais cela ne fonctionne pas de cette façon. C'est parce que le noyau appelle le open()
fonction avec les permissions par défaut de 0666
.
Pour résumer
- Les fichiers n'obtiendront pas l'autorisation d'exécution (masquée ou effective). 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.
- Le seul moyen de définir des autorisations d'exécution pour un fichier sous autorisations ACL consiste à les définir manuellement à l'aide de
chmod
.
Références
- page de manuel acl
pour des raisons de sécurité, le système d'exploitation linux ne permet pas la création automatique d'un fichier avec un bit d'exécution. Cela permet d'empêcher les cyber-attaquants d'écrire des programmes dans de tels fichiers et de les exécuter s'ils accèdent à votre serveur. C'est juste une mesure de sécurité. Vous devrez toujours définir manuellement le bit d'exécution sur les fichiers après les avoir créés avec l'utilitaire chmod