it-swarm-eu.dev

Záleží na oprávnění nadřazeného adresáře při přístupu do podadresáře?

Pokud mám kořenovou složku s určitým omezujícím povolením, řekněme 600, a pokud mají podřízené složky/soubory oprávnění 777, bude každý schopen číst/zapisovat/vykonávat podřízený soubor, přestože kořenová složka má 600?

168
Ken Li

Přesné pravidlo je: adresář můžete procházet pouze tehdy, pokud k němu máte 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í dir a dir/subdir plus oprávnění pro file pro požadovaný typ přístupu. Když se dostanu do rohových případů, nejsem si jistý, zda je univerzální, že pro spuštění přístupu k souboru prostřednictvím relativní cesty (jako v systému Linux) potřebujete provést oprávnění v aktuálním adresáři.

Způsob přístupu k souboru je důležitý. 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 relativní cestou, ale ne absolutní cestou. Nemůžete změnit na /foo/bar v tomto scénáři; více privilegovaný proces patrně provedl cd /foo/bar před tím, než se stanete bez výhrad. Pokud soubor obsahuje více pevných odkazů, určuje cesta, kterou k němu používáte, přístupová omezení.

Symbolické odkazy nic nezmění. Jádro používá přístupová práva volajícího procesu k jejich procházení. Pokud je například sym symbolickým odkazem na adresář dir, potřebujete k přístupu k dir oprávnění ke spuštění sym/foo. Oprávnění samotného symbolu může nebo nemusí záležet v závislosti na OS a souborovém systému (někteří je respektují, jiní ignorují).

Odstranění oprávnění ke spuštění z kořenového adresáře účinně omezí uživatele na část stromu adresářů (do které se musí změnit privilegovanější proces). To vyžaduje použití seznamů řízení přístupu. Například, pokud / a /home jsou mimo limity joe (setfacl -m user:joe:0 / /home) a /home/joe je domovský adresář joe, potom joe nebude mít přístup ke zbytku systému (včetně spouštění skriptů Shell s /bin/sh nebo dynamicky propojené binární soubory, které potřebují přístup k /lib, pro praktické použití byste tedy měli 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 výčet položek. Občas je užitečné udělit oprávnění ke spuštění bez udělení oprávnění ke čtení: názvy položek slouží jako hesla pro přístup k nim. Nemohu myslet na jakékoli použití při udělování oprávnění ke čtení nebo zápisu do adresáře bez oprávnění ke spuštění.

Ne. Oprávnění kořenové složky omezuje oprávnění podřízených souborů. Můžeš to zkusit.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Mám to:

$ cat: ./rootfolder/childfile: permission denied
34
goovim

Můžete podřízený adresář zapisovat, i když nadřazený adresář není. Dělám to pro skupiny.

Například: nadřazený adresář je vlastněn skupinovým kodérem

drwxr-sr-x

podřízený adresář

drwxrwsr-x

Vy (kterýkoli člen skupiny kodérů) můžete stále psát do podřízeného adresáře, ale nikoli do nadřazeného adresáře.

4
Kemin Zhou

Můžete vytvořit pevný odkaz pro přístup k souboru, i když nemáte nadřazené adresářové oprávnění ke spuštění. Úlovek zde ale znamená, že musíte vytvořit pevné propojení dříve, než ztratíte své spouštěcí oprávnění v nadřazeném adresáři

$ ln foo/bar/test_privs privs_test_checking
1
Kamal