Ich habe eine GUI-Anwendung, die einen (in Python geschriebenen) Daemon mit Superuser-Rechten aufrufen muss. Ich möchte dies tun, ohne den Benutzer zur Eingabe eines Passworts aufzufordern.
Da der Daemon ein Skript ist, kann ich das SUID-Bit nicht direkt setzen. Ich könnte einen C-Wrapper dafür schreiben, aber ich würde das Rad lieber nicht neu erfinden, besonders wenn ein Fehler meinerseits dazu führen könnte, dass die Sicherheit des Systems stark beeinträchtigt wird.
Normalerweise würde ich in dieser Situation eine Zeile hinzufügen, in /etc/sudoers
der Benutzer den Dämon als root ohne Kennwort ausführen können, wobei die NOPASSWD-Direktive verwendet wird. Dies funktioniert problemlos über die Befehlszeile. Wenn ich dies jedoch über die grafische pkexec
Benutzeroberfläche mache, wird ein Dialogfeld angezeigt, in dem Sie nach dem Kennwort des Benutzers gefragt werden. Es scheint, dass unter Ubuntu Aufrufe sudo
von der GUI irgendwie von abgefangen werden pkexec
.
Gibt es eine saubere Lösung dafür? Ich würde mich wirklich lieber nicht mit den Problemen eines Setuid-Skripts auseinandersetzen müssen.
quelle
sudo somecommand
, wird als Dialogfeld einpkexec
Kennwortdialog angezeigt, unabhängig davon, ob eine sudoers-Richtlinie die Ausführung des Programms zulässt.Antworten:
Es ist falsch zu sagen: "Es scheint, dass auf Ubuntu Aufrufe
sudo
von der GUI irgendwie abgefangen werden vonpkexec
" .pkexec
hat nicht viel gemeinsam mitsudo
. Im Gegensatz zusudo
,pkexec
erlaubt keine Root - Rechte auf einen ganzen Prozess gewähren, sondern eine feinere Kontrolle der zentralen Systemrichtlinie.Wenn Sie eine GUI-Anwendung ausführen möchten, ohne nach einem Kennwort gefragt zu werden
pkexec
, ist dies nicht schwierig. Nehmen wir zum Beispiel GParted . Wenn Sie es öffnen, erscheint das folgende Dialogfenster, in dem Sie nach einem Passwort gefragt werden:Klicken Sie auf Details und das Dialogfenster sieht jetzt so aus:
Von hier aus müssen Sie lediglich die Datei mit dem folgenden Befehl öffnen :
/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
und ändere die folgenden Zeilen:
mit den folgenden:
Speichern Sie die Datei und schließen Sie sie. Wenn Sie GParted öffnen, werden Sie nicht mehr nach einem Passwort gefragt.
quelle
gparted
. Wenn Sie vom Terminalsudo gparted
aus ausführen, führen Sie eine/usr/sbin/gparted
Datei mit Root-Rechten aus. Wenn Sie beginnen ,gparted
von der GUI, starten Sie in der Tatgparted-pkexec
(Sie das Innere überprüfen können/usr/share/applications/gparted.desktop
Datei) , das ist ,/usr/bin/gparted-pkexec
dass ein Shell - Skript , dessen Zweck es ist , den folgenden Befehl auszuführen:pkexec "/usr/sbin/gparted"
die mit entsprichtpkexec gparted
. Also nichts damit zu tunsudo
. Und diesen Befehl solltest du im Terminal nicht verwendensudo gparted
.sudo
sollte nur für Shell-Apps verwendet werden, nicht für GUI-Apps. Sehenman sudo
undman pkexec
in diesem Sinne.