Uživatelé pracující na konzole grafické pracovní stanice si všimli, že několik programů lze spustit, aniž by zjevně potřebovali autentizaci uživatele root nebo heslo, jako je například restart. Tento proces zahrnuje chytré použití programu SUID /usr/sbin/userhelper
použit v širším kontextu, než byl původně navržen.
Grafický uživatel spustí zprostředkující program s aliasem /usr/bin/consolehelper
který autorizuje akce na základě specifické konfigurace PAM (Programmable Authentication Modules) a poté odešle příkaz do programu SUID, aby spustil uživatelský program s oprávněními. Pokud uživatel nemá odpovídající oprávnění, požadovaný program se spustí v prostředí Linux uživatele.
V současné době nasazený konfigurační soubor PAM potřebný pro restart obsahuje kontroly, zda je uživatel přihlášen ke konzole nebo zda je aktuálně spuštěn v prostředí root, aby se zabránilo požadavkům na hesla.
Používá udisky. (FUSE se však používá v případě síťových souborových systémů). Pro vaše experimentování jsou k dispozici rozhraní příkazového řádku k udiskům. V posledních verzích přichází s rozhraním příkazového řádku udisksctl
.
udisksd
běží jako root a přijímá požadavky uživatelů pomocí D-Bus.
udisksd
používá PolicyKit PolKit rozhodnout, které požadavky jsou povoleny. Některé mohou vyžadovat zvláštní oprávnění, např. formátování interních disků. To může zahrnovat další ověřovací krok - podobný výzvě Windows UAC nebo sudo na příkazovém řádku. Nevím přesně, jak je zvláštní ověřování koordinováno.
Požadavky přes D-Bus jsou v současnosti zadávány pomocí Unixových soketů pomocí SCM_CREDENTIALS, které identifikuje proces, který požadavek podává.
Jedním z faktorů používaných při rozhodování je, zda je uživatel přihlášen lokálně nebo přes síť (např. ssh
). Domnívám se, že tyto informace poskytuje systemd-logind
(ve spiknutí s pam-systemd
).