Pokud mám kořenovou složku s nějakým omezujícím oprávněním, řekněme 600, a pokud mají podřízené složky/soubory oprávnění 777, bude každý moci číst/zapisovat/spouštět podřízený soubor, i když má kořenová složka 600?
Přijatá odpověď:
Přesné pravidlo zní:adresář můžete procházet tehdy a pouze tehdy, máte-li v něm oprávnění ke spuštění.
Například pro přístup k dir/subdir/file
, potřebujete oprávnění ke spuštění v dir
a dir/subdir
, plus oprávnění k file
pro požadovaný typ přístupu. Když se dostávám do rohových případů, nejsem si jistý, zda je univerzální, že pro přístup k souboru přes relativní cestu potřebujete oprávnění ke spuštění v aktuálním adresáři (v Linuxu to děláte).
Záleží na způsobu přístupu k souboru. Například pokud máte oprávnění ke spuštění na /foo/bar
ale ne na /foo
, ale váš aktuální adresář je /foo/bar
, můžete přistupovat k souborům v /foo/bar
cestou relativní, ale ne cestou absolutní. Nemůžete změnit na /foo/bar
v tomto scénáři; privilegovanější proces pravděpodobně provedl cd /foo/bar
než odejdou bez privilegií. Pokud má soubor více pevných odkazů, cesta, kterou k němu používáte, určuje vaše přístupová omezení.
Symbolické odkazy nic nemění. K jejich procházení používá jádro přístupová práva volajícího procesu. Pokud například sym
je symbolický odkaz na adresář dir
, potřebujete oprávnění ke spuštění v dir
pro přístup k sym/foo
. Oprávnění k samotnému symbolickému odkazu mohou nebo nemusí záležet v závislosti na OS a souborovém systému (někteří je respektují, někteří je ignorují).
Odstranění oprávnění ke spuštění z kořenového adresáře účinně omezuje uživatele na část stromu adresářů (na kterou se musí změnit privilegovanější proces). To vyžaduje, aby byly seznamy řízení přístupu k jakémukoli použití. Například pokud /
a /home
jsou pro joe
zakázány (setfacl -m user:joe:0 / /home
) a /home/joe
je joe
's home directory, pak joe
nebude mít přístup ke zbytku systému (včetně spouštění skriptů prostředí pomocí /bin/sh
nebo dynamicky propojené binární soubory, které potřebují přístup k /lib
, takže pro praktické použití budete muset jít hlouběji, např. setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
).
Oprávnění ke čtení v adresáři dává právo na výčet položek. Udělit oprávnění ke spuštění bez udělení oprávnění ke čtení je příležitostně užitečné:názvy položek slouží jako hesla pro přístup k nim. Nenapadá mě žádné využití v udělování oprávnění ke čtení nebo zápisu do adresáře bez oprávnění ke spuštění.