Našel jsem tento příklad s názvem:ACL a MASK v linuxu. V tomto článku jsou ukázány následující příklady, které podle mého názoru pomáhají pochopit, jak ACL a umask vzájemně komunikovat.
Pozadí
 Když je soubor vytvořen v systému Linux, výchozí oprávnění 0666 se použijí, zatímco při vytvoření adresáře se použijí výchozí oprávnění 0777 jsou použity.
příklad 1 – soubor
 Předpokládejme, že nastavíme umask na 077 a dotkneme se souboru. Můžeme použít strace abyste viděli, co se vlastně děje, když to uděláme:
$ 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
 V tomto příkladu vidíme, že systémové volání open() je vytvořeno s oprávněními 0666, ale když umask 077 je poté aplikováno jádrem, jsou odebrána následující oprávnění (---rwxrwx ) a zbývá nám rw------- aka 0600.
příklad - 2 adresář
Stejný koncept lze aplikovat na adresáře, s tím rozdílem, že namísto výchozích oprávnění 0666 jsou to 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
 Tentokrát používáme mkdir příkaz. mkdir příkaz pak zavolal systémové volání mkdir() . Ve výše uvedeném příkladu vidíme, že mkdir příkaz s názvem mkdir() systémové volání s výchozími oprávněními 0777 (rwxrwxrwx ). Tentokrát s umask 022 následující oprávnění jsou odebrána (----w--w- ), takže nám zbývá 0755 (rwxr-xr-x ) při vytvoření adresářů.
příklad 3 (použití výchozího ACL)
Nyní vytvoříme adresář a předvedeme, co se stane, když se na něj použije výchozí ACL spolu se souborem v něm.
$ 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
 Nyní vytvoříme soubor aclfile :
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Nyní získejte oprávnění k nově vytvořenému souboru:
$ 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--
 Všimněte si masky, mask::rw- . Proč to není mask::rwx stejně jako když byl adresář vytvořen?
 Zkontrolujte luvly log, abyste viděli, jaká výchozí oprávnění byla použita pro vytvoření souboru:
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
 Tady je to trochu matoucí. S maskou nastavenou na rwx když byl adresář vytvořen, očekávali byste stejné chování pro vytvoření souboru, ale takto to nefunguje. Je to proto, že jádro volá open() fungovat s výchozími oprávněními 0666 .
Shrnutí
- Soubory nezískají oprávnění ke spuštění (maskovací nebo účinné). Nezáleží na tom, kterou metodu použijeme:ACL, umask nebo maska &ACL.
- Adresáře mohou získat oprávnění ke spuštění, ale záleží na tom, jak je nastaveno maskovací pole.
- Jediný způsob, jak nastavit oprávnění ke spuštění pro soubor, který má oprávnění ACL, je ručně nastavit pomocí chmod.
Odkazy
- manuálovou stránku acl
z bezpečnostních důvodů operační systém linux neumožňuje automatické vytvoření souboru s prováděcím bitem. To má zabránit kybernetickým útočníkům zapisovat programy do takových souborů a spouštět je, pokud získají přístup k vašemu serveru. Je to jen bezpečnostní opatření. Po vytvoření souborů pomocí nástroje chmod
budete navždy muset ručně nastavit bit spuštění u souborů