2016-07-25 16 views
-2

Ich möchte meinen Benutzer als sudo und als normaler Benutzer abhängig von seiner Wahl ausführen lassen. Er könnte sudo oder normal verwenden, aber wenn ich nicht sudo verwende, muss ich einige Funktionen deaktivieren, um Fehler loszuwerden .so wie könnte ich wissen, dass dieser Benutzer mir Sudo-Berechtigungen erteilt oder nicht? Ich baue meine Anwendung auf Python.different sudo <command> und <command>

+2

Wenn ich richtig verstehe, sind Sie für diese suchen http://stackoverflow.com/questions/2806897/what-is-the-best-practices-for-checking-if-the-user-of -a-python-script-has-root? –

+2

Der beste, sicherste und robusteste Weg ist es, einfach die Operation zu versuchen und den Benutzer wissen zu lassen, ob es fehlschlägt und der wahrscheinliche Grund dafür (und vielleicht, sudo/gksudo in ihrem Namen aufzurufen). Der schlauste Weg ist, nach einer UID von 0 zu suchen. –

+0

@thatotherguy: Vielleicht, aber ich denke, es ist vernünftig für ein Skript, eine '--no-root'-Option (oder ähnlich) zu verwenden, die alles rooty vermeidet. – ruakh

Antwort

1

Nachdem ich Ihre Frage ein paar Mal gelesen habe, denke ich, dass ich weiß, was Sie fragen. Habe ich recht damit zu denken, dass Sie wissen wollen, ob Sie während der Laufzeit Ihr Python-Skript als root-Berechtigungen erkennen können?

Wenn Sie wirklich im Voraus überprüfen möchten, können Sie das System nach der Benutzer-ID mit os.geteuid() abfragen, und wenn es 0 zurückgibt, wird Ihr Skript als root ausgeführt.

Ein alternativer Ansatz wäre jedoch, einfach den Code auszuführen, der root-Berechtigungen in einem try-Block benötigt. Je nachdem, was genau Sie tun, kann dies eine bessere Lösung sein oder auch nicht. Sie müssen auch den Typ der zu erwartenden Ausnahme kennen, wenn Sie nicht über die erforderlichen Berechtigungen verfügen. Dies macht es ein wenig schwieriger zu schreiben, aber der Code kann flexibler auf sich verändernde Umstände wie Benutzer mit genügend Privilegien, aber nicht root. Es kann auch für mehr portablen Code sorgen, obwohl sich die Ausnahme von einem Betriebssystem zu einem anderen ändern kann.

z.

try: 
    function_that_needs_root() 
except MyNotRootException: 
    print "Skipping function_that_needs_root: you are not root"