it-swarm.com.de

Wie führe ich ein grafisches Sudo in Bash auf Kubuntu 18.04 aus, wenn Kdesudo nicht mehr vorhanden ist?

TL; DR: Was ist der neue richtige Weg, um ein grafisches Sudo von einem Shell-Skript aus zu erstellen?

Dreschen:

Ich habe gerade ein Upgrade von Kubuntu 16.04 auf 18.04 durchgeführt und mache die normale Triage.

kdesudo ist im 18.04 weg (nicht gewartet).

Ich benutze es oft in Bash-Skripten mit GUI I/O.

In einigen Beiträgen heißt es "benutze kdesu" - was seltsam erscheint. Ich scheine mich zu erinnern, dass es mit dem effektiven Benutzer oder so etwas in Unordnung gerät.

Das ist nicht in meinem PATH installiert.

Ich fand es bei

[email protected]:~/pq$ ls -l /etc/alternatives/kdesu
rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu -> 
/usr/lib/kde4/libexec/kdesu-distrib/kdesu

das sagt immer noch kde4.

Ich habe versucht, Sudo -A ls

und es hieß

[email protected]:~$ Sudo -A ls
Sudo: no askpass program specified, try setting Sudo_ASKPASS

Ich ging in ein paar Kreisen und schaute ksshaskpass und ssh-askpass an, aber beide sagen, sie sollen nicht direkt angerufen werden.

Ich mache nicht irgendetwas mit ssh.

Ich brauche dies für Bash-Skripte, die fast alles als normaler Benutzer ausführen und dann einen oder zwei Befehle als root ausführen. Diese Skripte werden häufig über Desktopsymbole gestartet, bei denen kein Terminalfenster geöffnet ist (und ich brauche oder möchte keines). Sie verwenden häufig yad (wie zenity oder kdialog) Schnittstelle mit dem Benutzer.

4
Joe

Wie Sie herausgefunden haben, können Sie die Option -A mit Sudo verwenden, aber Sie benötigen eine GUI-Methode, um das Passwort an Sudo weiterzugeben.

Sie können ein solches Tool so oft schreiben, wie Sie möchten, solange es das Passwort auf stdout an Sudo zurückgibt. Ich verwende eine einfache Lösung, die mir vor langer Zeit von jemandem vorgeschlagen wurde, die kdialog verwendet, und wie alle einfachen Lösungen ist sie seitdem mein Ding geblieben.

Erstellen Sie sich also ein einfaches kdialog-Skript wie dieses

    #!/bin/bash
    kdialog --password "Password required to proceed"

Jetzt benutzt du das mit Sudo so

    #!/bin/bash
    export Sudo_ASKPASS=<path to your kdialog script>
    Sudo -A foo

Sie können natürlich jede Sprache für Ihren GUI-Passwort-Provider verwenden, wenn Sie nicht über KDE verfügen

EDIT: Lösung zur Umgehung von Sudo passwd_tries

Damit Sie nur einmal nach dem Kennwort fragen können (wie Sie möchten), können Sie das Kennwort in einer Variablen innerhalb des Skripts erfassen und diese Variable mit der Option -S direkt an den Befehl Sudo übergeben.

Dies hat den Vorteil, dass die Sudo-Regel passwd_tries ignoriert wird und weiterhin die interaktive Kennworteingabe erforderlich ist, sodass das Kennwort nicht im Skript gespeichert wird.

PASSWD=$(kdialog --password "Sudo password required")
echo $PASSWD | Sudo -S foo

Sie können dies auch direkt in einer Zeile tun, wenn Sie nicht mehrere Sudo-Befehle im Skript benötigen

echo $(kdialog --password "Sudo password required") | Sudo -S foo

Und natürlich können Sie Ihr eigenes kdialog-Skript verwenden, das wir zuvor besprochen haben, anstatt hier kdialog zu verwenden, wenn Sie in all Ihren Skripten eine Standard-kdialog-Eingabeaufforderung wünschen.

Das Problem, das Sudos passwd_tries von meinem POV aus umgeht, besteht darin, dass Ihr Skript nach dem Sudo-Befehl weiterhin Befehle verarbeitet, wenn Sie das falsche Kennwort erhalten. Wenn also der Sudo-Befehl mit erhöhten Rechten für den Erfolg des Skripts entscheidend war, treten Probleme auf.

Die Einschränkung besteht darin, dass das Passwort von kdialog (oder einer Alternative wie zenity) auf stdout geschrieben ist, etwas, das ich zuvor hätte erwähnen sollen, sodass jeder, der das stdout der PID erfasst hat, Ihr Passwort sehen würde. Aber dann würde jeder Hacker auf Ihrem System viel mehr als nur das tun.

3
nobody special

Nicht nur kdesudo, sondern auch gksu ist ebenfalls veraltet. Diese Änderungen sind zumindest leicht ärgerlich. Es scheint, als ob der Ansatz, den wir jetzt verfolgen sollen, darin besteht, das admin:// -Präfix zu verwenden, wenn Sie zum Beispiel kdesudo gedit /etc/default/grub verwendet haben. Jetzt würden Sie sich stattdessen an gedit admin:///etc/default/grub gewöhnen Lassen Sie jemals 16.04 fallen, um eine "neue und verbesserte" Version zu erhalten.

Eine andere mögliche Lösung wäre, einfach das Skript zunächst in einem Terminal zu starten.

Quelle: https://www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html

0
Elder Geek

Ich habe gerade ein paar Antworten gefunden hier .

Der Kern davon ist:

Zur Umgehung dieses Problems können Sie zunächst feststellen, wo kdesu auf Ihrem System installiert ist

was du damit machen kannst

ls -l /etc/alternatives/kdesu

und fügen Sie dann einen Alias ​​für kdesudo zu $HOME/.bashrc oder, falls Sie ihn verwenden, zu $HOME/.bash_aliases hinzu.

Der Alias ​​ist

## Resurect kdesudo - this will probably fail eventually
alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu'

stellen Sie sicher, dass der Pfad zu kdesu dem Pfad entspricht, den Sie im obigen Schritt gefunden haben.

Dies funktioniert bei einigen Programmen unter KDE nicht, weil

Die KDE-Entwickler arbeiten an einer Polkit-Route, um vorübergehend erhöhte Berechtigungen für andere Anwendungen zuzulassen, wie sie dies bereits für Kate getan haben. - GreyGeek

und wenn sie dies tun, deaktivieren sie die direkte Erhöhung, weil Sie sie (wenn sie richtig funktioniert) nicht mehr benötigen. Das Programm fragt nur nach einem Passwort, wenn es eine privilegierte Operation ausführen muss. Es bleibt abzuwarten, wie das in einem Skript funktioniert.

0
Joe

Haben Sie versucht, pkexec

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
0
papampi