setuid
Pří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). 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. 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). 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. 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). 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.
- 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: Setuid Demystified (pdf)
- Dan Tsafrir, Dilma Da Silva, David Wagner: The Murky Issue of Changing Process Identity: Revising Setuid Demystified[nedostupný zdroj] (pdf)
- Wayne Pollock: Unix File and Directory Permissions and Modes