Setuid
Author
Albert FloresPříznaky setuid a setgid (zkratka pro „set user ID upon execution“ a „set group ID upon execution“) jsou v informatice označení pro unixová přístupová oprávnění, která umožňují spouštět spustitelné soubory s právy vlastníka nebo skupiny vlastnící spustitelný soubor. Jsou často používána ke spouštění programů v systému s dočasně zvýšenými právy, pro provedení určité úlohy.
Příznaky setuid a setgid jsou potřebné pro úlohy, které vyžadují vyšší oprávnění než ta, která má běžný uživatel. Například při změně vlastního přihlašovacího hesla (viz passwd a soubor shadow). +more Některé z úloh, které vyžadují zvýšení práv, nemusí být okamžitě zřejmé, jako například příkaz ping, který musí odeslat a přijmout kontrolní pakety přímo na síťovém rozhraní (raw ICMP).
Setuid u spustitelných souborů
Je-li na spustitelném souboru nastaven „setuid“ atribut, běží po jeho spuštění tento proces s právy toho, kdo je vlastníkem zmíněného spustitelného souboru (obvykle je to root, ale může to být jakýkoliv uživatel systému). Získáním oprávnění uživatele root může aplikace vykonávat v systému úlohy, které běžný uživatel vykonávat nemůže. +more Uživateli, který program spustil, znemožní systém (resp. jádro systému) vytvoření nového procesu jinou cestou, například použitím systémového volání ptrace, zneužití proměnné prostředí LD_LIBRARY_PATH nebo zasláním signálu do něj (signály z terminálu budou navzdory tomu stále akceptovány). Kvůli zvýšené pravděpodobnosti zneužití bezpečnostních chyb mnoho systémů ignoruje setuid atribut na spustitelných shellových scriptech.
Příklad využití
Hesla jsou v unixovém systému uložena v textovém souboru passwd nebo nověji v souboru shadow. Uživatelé nemají možnost tyto soubory měnit, protože by mohli změnit hesla ostatním uživatelů (včetně správce root). +more To však znamená, že by uživatel nemohl změnit své heslo, protože program za normálních okolností běží s oprávněními uživatele který ho spustil a do těchto souborů tak nemá přístup. Proto je na programu passwd nastaven příznak setuid a zároveň tento program vlastní uživatel root (správce systému). Spustí-li uživatel program passwd, získá běžící program díky setuid bitu oprávnění vlastníka tohoto souboru (tedy správce systému). Program tak může změnit jakoukoliv část souboru s hesly. Aby nemohl uživatel pomocí programu passwd změnit cizí hesla, musí být program passwd pečlivě naprogramován tak, aby umožnil změnit jen heslo uživatel. Pečlivost zde je na místě, protože v případě chyby v setuid root programu passwd by ho jakýkoliv běžný uživatel systému mohl zneužít ke změně čehokoliv v celém systému.
Bezpečnostní rizika
Příznak setuid na programech vlastněných správcem systému (uživatel root) je velmi rizikový. Po úspěšných útocích na některé setuid nástroje byly kolem roku 2000 provedeny v Linuxu audity všech těchto nástrojů a byla snaha jejich počet v systému co nejvíce snížit. +more Kvůli rizikům byly zavedeny do Linuxu doplňující bezpečnostní subsystémy, jako jsou capabilities (využívá je nástroj ping), SELinux nebo úprava grafického subsystému (tzv. root-less X Server).
Setgid u adresářů
Příznaky setuid a setgid nastavené na adresáři mají úplně rozdílný význam. Nastavení setgid oprávnění na adresáři (chmod g+s) způsobí, že nové soubory a podadresáře v něm vytvořené zdědí jeho groupID místo primárního groupID uživatele, který adresář nebo soubor vytvořil (ownerID není nikdy ovlivněné, jen groupID). +more Nastavení setgid oprávnění na adresáři ovlivňuje jen groupID nových souborů a podadresářů vytvořených po tom, co byl nastaven setgid bit, avšak neaplikuje se na existující entity. Nastavení setgid bitu na všechny existující podadresáře musí být provedeno ručně například následujícím příkazem:.
[root@foo]# find /path/to/directory -type d -exec chmod g+s '{}' \;
Příznak setuid oprávnění nastavené na adresáři je ignorováno v systémech UNIX a Linux. V systému FreeBSD může být nastaveno, aby byl interpretován analogicky k setgid, tedy aby byly všechny nové soubory a podadresáře vlastněné vlastníkem nadřazeného adresáře.
Historie
Používání setuid bitu navrhl Dennis Ritchie. Jeho zaměstnavatel AT&T požádal o patent roku 1972. +more * Patent byl přidělen roku 1979 pod patentovým číslem 4135240. * Patent se zanedlouho stal veřejným.
Související články
Externí odkazy
Hao Chen, David Wagner, Drew Dean: [url=http://www. +morecs. berkeley. edu/~daw/papers/setuid-usenix02. pdf]Setuid Demystified[/url] (pdf) * Dan Tsafrir, Dilma Da Silva, David Wagner: [url=http://www. eecs. berkeley. edu/~daw/papers/setuid-login08b. pdfThe]Murky Issue of Changing Process Identity: Revising Setuid Demystified[/url] (pdf) * Wayne Pollock: [url=http://wpollock. com/AUnix1/FilePermissions. htm]Unix File and Directory Permissions and Modes[/url].