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ů