Přístupová práva v unixu

Minulý článek mě inspiroval k napsání krátkého shrnutí funkcí přístupových práv u složek v unixu. Špatné nastavení těchto práv totiž může, jak jsem minule nastínil, způsobit závažnou bezpečnostní díru, díky které se vám mohou ostatní uživatelé hrabat v souborech.

Co jsou to přístupová práva

Jsou to atributy každého souboru i složky, které určují, jaká práva nad tímto souborem/složkou mají určití uživatelé (skupiny). Tyto atributy se zapisují přímo do tabulky I-nodů.

Na binární úrovni jsou základní práva vyjádřena 9 bity. Přesněji 3mi skupinami po 3bitech. My ale nebudeme číst práva v tomto binárním zápisu, ale v zápisu osmičkovém, případně textovém.

Zkuste si příkaz "ls -l" vídíte na začátku řádky něco takového:

-rwxr--r--

A právě to je zapsaní práv. Osmičkově to můžeme přepsat jako 0744. Binárně pak jako 111,100,100.

Co tyto znaky a čísla znamenají:

typ právasymbolické vyjádřeníosmičkovébinární
právo čtenír4100
právo zápisuw210
právo spuštěníx11

V zápisu se tyto znaky ale opakují a vídíme i nějaké pomlčky. Co s tím? První pomlčka znamená, že se jedná o obyčejný soubor (není to adresář, ani symbolický odkaz, apod.) Následují pak tři skupiny rwx za sebou. Pokud má soubor nějaké právo nastaveno, vídíme odpovídající písmenko, pokud ne, vídíme jen pomlčku. Skupiny rwx jsou tři, protože vyjadřují tři typy uživatelů

V uvedeném příkladě může tedy vlastník číst, zapisovat i spouštět soubor, ostatní jen číst.

Změna práv

Na změnu práv slouží príkaz chmod. Měnit práva souboru může buď vlastník a nebo root. Chmod má dva druhy zápisu

Symbolický

Má tři operátory

  1. komu měníme práva : u(user),g(group),a(all)
  2. operace s právy : +(přidání),-(odebrání),=(přiřazení)
  3. jaká práva : r,w,x

Tedy např.: chmod ug+w soubor (přidáme uživateli a skupině právo zápisu) chmod a-x soubor chmod g=r

Absolutní

Má jen jeden operátor a to dekadické vyjádření práv. Nemůže tedy nic přidat nebo ubrat, vždy jen přiřazuje všechny práva najednou.

chmod 777 soubor (rwx pro všechny)

Poznámka: Doopravdy jsou skupiny čtyři. Ta, kterou jsem neuvedl slouží pro speciální práva - tzv. SUID bit, SGID bit a sticky bit. O nich možná příště.

Adresáře

Adresáře jsou na tom ale trochu jinak. Co totiž znamená zapisovat do adresáře nebo spouštět adresář? Zde by se možná hodilo krátce popsat, co to vlastně adresář je: Adresář je vlastně tabulka, ve které jsou zapsány názvy souborů a jim odpovídající čísla i-nodů.

Pokud chceme vylistovat obsah adresáře potřebujeme číst z jeho tabulky. Proto musí mít adresář nastaven bit r. Pokud ale chceme nějakým způsobem operovat se soubory ve složce (měnit, vytvářet) musíme mít nastaven nejen bit w, ale i bit x. Bit x v tomto případě znamená, že nám adresář dovolí "spustit" číslo i-nodu, což potřebujeme, abysme mohli pracovat s daty souboru.

Z těchto pár poznatků vyplývá jedna podstatná věc: Pokud má složka nastaven pouze bit x, vypadá to na první pohled, že je nepřístupná. To ale není pravda. Nemůžeme sice vylistovat obsah složky, ale můžeme přistupovat k souborům složky. Pokud tedy známe jméno nějakého souboru uvnitř složky, můžeme si ho bez problému otevřít. Pravě tato bezpečnostní díra se objevila na jednom nejmenovaném hostingu u složek klientů. Jakýkoliv chytrý klient si tak mohl číst v souborech ostatních.

Možná někdo namítne, že přece nemůžu znát názvy souborů uvnitř složky - od čeho pak máme slovníkové útoky, že?