Ändern der Benutzer in python
Ich Schreibe ein einfaches script, das neu startet, ein hadoop-slave. Im Skript habe ich dazu einige erste änderungen als root-Benutzer. Danach muss ich ändern, um von Benutzer "hadoop" und führen Satz von Befehlen. Ich war mit os.system zum ausführen von Befehlen, aber ich bezweifle, ob es gut funktioniert. Zum Beispiel:
uid=pwd.getpwnam('hadoop')[2]
os.setuid(uid)
os.system('whoami')
os.chdir('/home/hadoop/hadoop/')
os.system('bin/hadoop-daemon.sh stop tasktracker')
Wieder habe ich um einige Befehle als root nach dieser und wieder werden user "hadoop" und ausführen :
os.system('bin/hadoop-daemon.sh stop tasktracker')
Ich habe drei Fragen hier ,
-
Ist os.system ist der beste Befehl, den ich verwenden können, um die Frage linux-Befehle ?
-
Ich bin in der Lage zu ändern von root-Benutzer hadoop, indem Sie die Befehle oben, aber ich bin nicht in der Lage zu ändern, um root-Benutzer (kann ich verstehen, gibt es Sicherheitsprobleme, wenn Sie gestatten, möchte ich wissen, gibt es irgendeine Möglichkeit, das zu tun , atleast durch die übergabe Passwort) ?
-
Ist os.setuid() zu arbeiten ? whoami Drucke Benutzer hadoop-aber der Prozess "tasktracker" ist nicht aufgehört, diesen Befehl, aber wenn ich die gleichen Befehle manuell funktioniert es einwandfrei (ich benutze "su hadoop" anstelle von setuid, während Sie versuchen, es manuell).
Vielen Dank für Ihre Hilfe.
- Sethu
Du musst angemeldet sein, um einen Kommentar abzugeben.
den Sie verwenden könnten:
oder wenn Sie nicht haben, sudo, aber haben su
Es ist eine viel bessere Idee, mit "su" als das wechseln der Benutzer-ID mit os.setuid().
Warum?
Diese Art von Skripts implementiert werden kann, viel sauberer mit der Nutzung von Stoff-Bibliothek: http://docs.fabfile.org/en/1.3.1/index.html
Zusätzlich bietet schöne Kommandozeilen-Schnittstelle und Möglichkeiten der remote-Server-management über ssh. Alle python ist verfügbar, so können Sie verbindungen zu Datenbanken herstellen oder importieren, was Sie brauchen.
Genau die Frage, über die Ausführung von Befehlen, wie einige andere Benutzer implementiert werden können, mit sudo Befehl mit user arg: http://docs.fabfile.org/en/1.3.1/api/core/operations.html#fabric.operations.sudo
Ich nicht getan habe, diese mich selbst aber sehe ich mehrere os Funktionen, die angewendet werden können. Beginnen Sie hier: http://docs.python.org/library/os.html#os.setegid
Auch gab es einen thread über die tutor Liste, die angesprochen das Thema: http://mail.python.org/pipermail/tutor/2002-December/018981.html
Den os.system Ansatz ist begrenzt, da es nur einen Fehlercode zurückgibt. Die Teilprozess.Popen toolset ist flexibler.