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