Chci vědět, jak vytvořit (pokud je to možné) bash skript, který běží jako root na Debianu bez ohledu na uživatele, který jej spouští, aniž bych žádal o jakoukoli autentizaci.
Tento soubor bude spouštět všechny své příkazy jako uživatel root, ale pouze skutečný uživatel root jej bude moci číst nebo do něj zapisovat.
Potřebuji to, protože chci spouštět příkazy jako swapoff
, swapon
, apt
, atd... Ale přes jinou aplikaci a chci, aby se mě na žádné heslo neptal.
Příkazy budou opraveny (tyto kořenové příkazy budou mít své parametry v souboru, nikoli jako vstup), takže bezpečnostní implikace nejsou zrovna moje starost, ale přijímám i vysvětlení.
Přijatá odpověď:
Nízkoúrovňový způsob, jak mít program vždy spuštěn pod konkrétním UID, je bit setuid v binárním souboru. Takhle např. sudo
a su
získat oprávnění root, i když je obvykle spouští normální použití.
Obecně ale platí, že systémy podobné Unixu nepodporují setuid skripty , viz:Povolit setuid ve skriptech prostředí
Co však můžete udělat, je nakonfigurovat sudo
nebo nějaký jiný takový nástroj, který uživatelům umožní spouštět některé konkrétní soubory s příslušnými právy. To by například umožnilo viceadmin
ke spuštění /usr/local/bin/sudoswapon
s jakýmikoli argumenty a bez ověření:
viceadmin ALL = NOPASSWD:/usr/local/bin/sudoswapon
Nyní, od sudo
se zabývá samotnou změnou oprávnění, sudoswapon
může být skript Shell.
Máte pravdu, když poznamenáváte, že skript by si měl dávat pozor na to, jak zachází s argumenty příkazového řádku, a že všechny budou platit gotchas jazyka shellu. Naštěstí sudo
filtruje většinu proměnných prostředí, alespoň pokud env_reset
možnost je nastavena.