2016-07-20 16 views
2

Jetzt zu laufen, ich habe eine Python-GUI-Anwendung, die einen Befehl mit sudo Privileg wie dies unten ausgeführt werden muß:ein Root-Rechte zu einer Python-GUI-Anwendung gibt einen Befehl in ubuntu

import commands 
iStat, askpassPath = commands.getstatusoutput("which ssh-askpass") 
cmd = "export SUDO_ASKPASS=%s;sudo -A mkdir -p /usr/lib/test"%(askpassPath) 
commands.getstatusoutput(cmd) 

enter image description here

Das funktioniert gut, wenn ssh-askpass auf ubuntu installiert wurde. Aber es scheint, dass einige ubuntu-Systeme es nicht standardmäßig installieren, während ich es nicht für sie installieren kann.

Also, ich muss wissen, ob es eine andere Möglichkeit für mich gibt, ein Sudo-Privileg zu bekommen.

Vielen Dank im Voraus.

Edit: Die App sollte nicht mit Root-Privilegien gestartet werden.Es muss Root-Rechte nur erhalten, wenn es ausgeführt wird.

+0

Es ist sehr interessante Frage für mich. Ich denke du solltest 'gksu/gksudo' verwenden ([Wie kann ich eine Anwendung mit einer GUI als Administrator ausführen] (https://askubuntu.com/questions/164819/how-can-i-run-an-an-application-with) -a-gui-as-admin-von-einer-nicht-admin-benutzer-sitzung)) als Frontend-Anwendung, um Root-Rechte zu erhalten, bevor Sie die Anwendung starten. Danach sollten Sie einen root-Befehl ausführen und dann sollten Sie die Rechte herunterfahren. Wenn die Anwendung ohne Root-Rechte gestartet wurde, sollten Sie den Benutzer darüber informieren. So sehe ich es. Sie können ähnliches Verhalten in * wireshark * -Anwendung sehen. – frist

+0

@ first.This Lösung ist nicht für mich geeignet, weil unsere App für die Arbeit verwendet wird, wird der Benutzer nicht in der Lage sein, es mit Root-Privilegien ausführen. Außerdem kann ich ihnen keinen Tooltip geben, da andere Funktionen keine root-Rechte benötigen, was zu einer schlechten Benutzererfahrung führen wird. Also kann ich nur interim root-Rechte bekommen, um etwas zu tun, wenn der Befehl root-Rechte benötigt . –

+1

'ssh-askpass' ist nur ein Programm, das Dialogfenster anzeigt und auf das vom Benutzer eingegebene Passwort schreibt. Ich hoffe, dass Sie eine Werkzeuganwendung machen können, die den Job erledigt und es als 'SUDO_ASKPASS' Programm für' sudo' spezifiziert. – frist

Antwort

0

Da sind Sie für "eine andere Möglichkeit für mich, ein Sudo-Privileg zu bekommen". Sie können und sollten die Anwendung möglicherweise nicht mit erhöhten Rechten ausführen.

Eine Option, die ich sehe, ist eine Hilfsbinär zu installieren und speichern Sie sie mit einem SUID-bit. Sie können diese Binärdatei dann aufrufen, um Ihre Operation auszuführen.

Wenn Sie mit erhöhten Rechten arbeiten möchten, können Sie sich die consolehelper ansehen. Sogar die Qt wiki erwähnt diese Methode.

Um eine vollständigere Antwort zu geben, werde ich versuchen, welche Schritte Sie tun müssen. Dies ist nicht als umfassende Anleitung gedacht. Bitte beachten Sie die Dokumentation.

Im Wesentlichen versuchen

ln -s /usr/sbin/consolehelper /usr/bin/yourapp-root 

Dann PAM konfigurieren (zB /etc/pam.d/yourapp-root):

#%PAM-1.0 
auth   include   config-util 
account   include   config-util 
session   include   config-util 

Und dann /etc/security/console.apps/yourapp -root:

USER=root 
PROGRAM=/usr/bin/yourapp 
+0

Danke für Hilfe. Einige Leute können unsere App von unserer Website, die "deb" -Format ist. So kann ich diese für sie nicht tun. Und Installation von App von Ubuntu Software Center, die auch einen Dialog wie das Bild in meinem Pop Frage.So denke ich, dass es machbar ist. –