Gibt es ein desktopneutrales gksudo?

17

Es gibt verschiedene Tools für verschiedene Desktops, die darauf abzielen, eine grafische Anwendung als Root auszuführen. gksudo, kdesudo, empower, Etc ...

Aber was ist, wenn ich ein Skript schreibe, das auf jedem Linux-Desktop verwendet werden kann? Gibt es eine xdg-sudoArt ..? Ein Standard für den Sudo-Zugriff in einer Desktop-Umgebung?

Oli
quelle

Antworten:

16

Auf @Tachyons Vorschlag hin habe ich viel recherchiert pkexecund es ist großartig !

  • Es ist Teil von PolicyKit , einem weit verbreiteten Paket.
  • Gehostet und gesponsert von freedesktop.org
  • Standard in Gnome , Unity , MATE , Cinnamon , KDE , LXDE und XFCE und möglicherweise anderen
  • Funktioniert über D-Bus, ist also vollständig desktopneutral und verfügt über ein genau definiertes Protokoll.
  • In vielen DEs wird es in verschiedenen Diensten wie Anmeldebildschirm, Herunterfahren / Neustarten, Datenträgerverwaltung (udisks / automount) usw. verwendet.

Also ja, es erfüllt alle Anforderungen und ich denke, es ist das Nächste, was ein "Universal-Gksudo" sein kann.

Dies pkexecist das Befehlszeilen-Front-End von PolicyKit. Es gibt 2 grundlegende Betriebsarten:

  • Führen Sie es einfach wie gewohnt aus sudound Sie erhalten eine nette GUI-Eingabeaufforderung:

    $ pkexec rm -rf /

pkexec GUI-Eingabeaufforderung

  • Oder erstellen Sie eine PolicyKit-Autorisierungsdatei für Ihre Anwendung, und legen Sie /usr/share/polkit-1/rules.dsie ab. Sie bietet zahlreiche Anpassungs- und Sicherheitsoptionen, z. B. Root-Zugriff nur für bestimmte Aktionen, keine Kennwortanforderung für andere, Zugriff auf bestimmte Pfade usw. Sie können Ihre Einstellungen mit erstaunlicher Granularität verfeinern.
MestreLion
quelle
6

Ein allgemeinerer Weg wäre, ein "Hilfsprogramm" zu schreiben. Ein solches Programm würde den Benutzer zur Eingabe eines Passworts auffordern. Wenn Sie sicher sind, dass beispielsweise Zenity installiert ist, können Sie dies verwenden. Andernfalls müssen Sie das Hilfsprogramm in Python schreiben oder etwas anderes, das mit der GUI interagieren kann.

Lesen Sie das sudoHandbuch für die Optionen -A("askpass") und -S(stdin).

Denken Sie daran, dass Sie beim Ausführen sudoIhres Skripts die -HOption (home) zum Simulieren benötigen gksudo.

Diese Methode funktioniert gut, aber Sie müssen das Hilfsprogramm gründlich testen, um sicherzustellen, dass es fehlerfrei ist.

Paddy Landau
quelle
1
Sie müssen auch die xauth-Tokenübergabe in Ihrem Programm verarbeiten - was nicht trivial ist.
Symcbean
4

Nein, es gibt keine Standardmethode zum Abrufen von Root-Rechten (oder Rechten eines anderen Benutzers).

Wenn Sie mit so vielen Systemen wie möglich kompatibel sein möchten, gehen Sie nicht davon aus, sondern teilen Sie dem Benutzer mit, dass er Ihr Skript als bestimmter Benutzer ausführen muss. Anschließend muss der Benutzer / Administrator das System so konfigurieren, dass das Skript ordnungsgemäß ausgeführt wird.

Ein paar Vorschläge zur Verwendung der gebräuchlichsten Authentifizierungssysteme wie su, sudo und ConsoleKit zu machen, wäre nett.

Florian Diesch
quelle
polkitRichtig für Anfang 2009, aber dankenswerterweise ist PolicyKit jetzt weit genug verbreitet, um als Standard zu gelten.
MestreLion