Mám aplikaci GUI, která potřebuje volat démona (napsaného v Pythonu) s oprávněními superuživatele. Chtěl bych to udělat bez výzvy k zadání hesla uživatele.
Vzhledem k tomu, že démon je skript, nemohu přímo nastavit bit SUID. Mohl bych pro to napsat C wrapper, ale raději bych nevynalézal kolo znovu, zvláště když chyba na mé straně by mohla vést k vážnému ohrožení zabezpečení systému.
Co bych normálně v této situaci udělal, je přidat řádek do /etc/sudoers
což umožňuje uživatelům spustit démona jako root bez hesla pomocí direktivy NOPASSWD. Z příkazového řádku to funguje dobře. Nicméně, když to udělám z GUI, pkexec
zobrazí se dialogové okno s výzvou k zadání hesla uživatele. Zdá se, že na Ubuntu volá sudo
z GUI jsou nějak zachyceny pkexec
.
Existuje čistý způsob, jak to obejít? Opravdu raději nebudu muset řešit potíže se skriptem setuid.
Nejlepší odpověď
Není správné říkat, že:„Zdá se, že na Ubuntu volá sudo
z GUI jsou nějak zachyceny pkexec
“ . pkexec
nemá mnoho společného s sudo
. Na rozdíl od sudo
, pkexec
neuděluje oprávnění root celému procesu, ale spíše umožňuje jemnější úroveň kontroly centralizované systémové politiky.
Nyní, pokud chcete spustit aplikaci s grafickým uživatelským rozhraním, aniž by vás pkexec
požádal o heslo , to není těžké udělat. Vezměme si například GParted . Když jej otevřete, uvidíte následující dialogové okno s dotazem na heslo:
Klikněte na Podrobnosti a dialogové okno bude nyní vypadat takto:
Odtud vše, co musíte udělat, je otevřít /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
soubor pomocí například následujícího příkazu:
gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
a změňte následující řádky:
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
s následujícím:
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
Uložte soubor a zavřete jej. Dále, když otevřete GParted již nebudete vyzváni k zadání hesla.
Související:Je možné pomocí Gedit nebo příkazového řádku upravit každý čtvrtý řádek textového souboru?