Wie konfiguriere ich pkexec so, dass kein Passwort abgefragt wird?

12

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/sudoersder 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 pkexecBenutzeroberfläche mache, wird ein Dialogfeld angezeigt, in dem Sie nach dem Kennwort des Benutzers gefragt werden. Es scheint, dass unter Ubuntu Aufrufe sudovon 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.

Chinmay Kanchi
quelle
Über welche Bewerbung sprechen Sie?
Radu Rădeanu
Beliebige GUI-App. Wenn eine GUI-App versucht, ausgeführt zu werden sudo somecommand, wird als Dialogfeld ein pkexecKennwortdialog angezeigt, unabhängig davon, ob eine sudoers-Richtlinie die Ausführung des Programms zulässt.
Chinmay Kanchi

Antworten:

14

Es ist falsch zu sagen: "Es scheint, dass auf Ubuntu Aufrufe sudovon der GUI irgendwie abgefangen werden von pkexec" . pkexechat nicht viel gemeinsam mit sudo. Im Gegensatz zu sudo, pkexecerlaubt 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:

gparted authentifizieren

Klicken Sie auf Details und das Dialogfenster sieht jetzt so aus:

Geteilte Authentifizierung - Details

Von hier aus müssen Sie lediglich die Datei mit dem folgenden Befehl öffnen :/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

und ändere die folgenden Zeilen:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

mit den folgenden:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Speichern Sie die Datei und schließen Sie sie. Wenn Sie GParted öffnen, werden Sie nicht mehr nach einem Passwort gefragt.

Radu Rădeanu
quelle
Ja, pkexec fängt tatsächlich Aufrufe von sudo ab. Lassen Sie mich sehen, ob ich ein minimales Beispiel für dieses Verhalten erstellen kann.
Chinmay Kanchi
Ich kann dies nicht in einer einfachen App replizieren, es kann nur in bestimmten Situationen vorkommen und ich habe keine Zeit, den Fehler zu verfolgen. Ich werde deine Antwort annehmen. Prost.
Chinmay Kanchi
@ ChinmayKanchi Lassen Sie uns klarer sein. Ich werde zum Beispiel wieder nehmen gparted. Wenn Sie vom Terminal sudo gpartedaus ausführen, führen Sie eine /usr/sbin/gpartedDatei mit Root-Rechten aus. Wenn Sie beginnen , gpartedvon der GUI, starten Sie in der Tat gparted-pkexec(Sie das Innere überprüfen können /usr/share/applications/gparted.desktopDatei) , das ist , /usr/bin/gparted-pkexecdass ein Shell - Skript , dessen Zweck es ist , den folgenden Befehl auszuführen: pkexec "/usr/sbin/gparted"die mit entspricht pkexec gparted. Also nichts damit zu tun sudo. Und diesen Befehl solltest du im Terminal nicht verwenden sudo gparted.
Radu Rădeanu
1
@ChinmayKanchi sudosollte nur für Shell-Apps verwendet werden, nicht für GUI-Apps. Sehen man sudound man pkexecin diesem Sinne.
Radu Rădeanu
Ja, mir sind beide Punkte bekannt. Meine Situation ist, dass ich eine (von mir geschriebene) GUI-App habe, die versucht, ein Shell-Programm (einen ebenfalls von mir geschriebenen Daemon) mit sudo zu starten. Aus irgendeinem Grund führt dies dazu, dass pkexec anstelle von sudo aufgerufen wird, was bedeutet, dass alle Sudo-Richtlinien, die ich für den Dämon erstellt habe, ignoriert werden.
Chinmay Kanchi