Ho trovato questo esempio, intitolato: ACL e MASK in Linux . In questo articolo vengono dimostrati i seguenti esempi che ritengo possano aiutare a comprendere come gli ACL e umask
interagire tra loro.
sfondo
Quando un file viene creato su un sistema Linux, 0666
vengono applicate le autorizzazioni predefinite, mentre quando viene creata una directory 0777
vengono applicate le autorizzazioni predefinite .
esempio 1 - file
Supponiamo di impostare umask su 077 e di toccare un file. Possiamo usare strace
per vedere cosa sta realmente accadendo quando lo facciamo:
$ 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
In questo esempio possiamo vedere che la chiamata di sistema open()
viene effettuata con i permessi 0666, tuttavia quando umask 077
viene poi applicato dal kernel le seguenti autorizzazioni vengono rimosse ( ---rwxrwx
) e restiamo rw-------
alias 0600.
esempio - 2 directory
Lo stesso concetto può essere applicato alle directory, tranne per il fatto che invece che le autorizzazioni predefinite siano 0666, sono 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
Questa volta stiamo usando il mkdir
comando. Il mkdir
comando ha quindi chiamato la chiamata di sistema mkdir()
. Nell'esempio sopra possiamo vedere che il mkdir
comando ha chiamato la mkdir()
chiamata di sistema con le autorizzazioni defaul 0777
( rwxrwxrwx
). Questa volta con un'ombra delle 022
seguenti autorizzazioni vengono rimossi ( ----w--w-
), quindi rimaniamo con 0755 ( rwxr-xr-x
) quando vengono create le directory.
esempio 3 (Applicazione dell'ACL predefinito)
Ora creiamo una directory e dimostriamo cosa succede quando viene applicato l'ACL predefinito insieme a un file al suo interno.
$ 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
Ora creiamo il file aclfile
:
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Ora ottieni le autorizzazioni per il file appena creato:
$ 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--
Si noti la maschera, mask::rw-
. Perché non è mask::rwx
proprio come quando è stata creata la directory?
Controlla il luvly
file di registro per vedere quali autorizzazioni predefinite sono state utilizzate per la creazione del file:
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
Qui è un po 'confuso. Con la maschera impostata su rwx
quando è stata creata la directory, ti aspetteresti lo stesso comportamento per la creazione del file, ma non funziona in questo modo. È perché il kernel chiama la open()
funzione con le autorizzazioni predefinite di 0666
.
Riassumere
- I file non ottengono il permesso di esecuzione (mascheramento o effettivo). Non importa quale metodo utilizziamo: ACL, umask o mask & ACL.
- Le directory possono ottenere le autorizzazioni di esecuzione, ma dipende da come è impostato il campo di mascheramento.
- L'unico modo per impostare le autorizzazioni di esecuzione per un file che si trova nelle autorizzazioni ACL è impostarle manualmente utilizzando
chmod
.
Riferimenti
mask::rw-
. Ma questa non è davvero la tua domanda, giusto?