Frage

Ist es möglich, dass eine Wurzel fragen pw ohne in meinem Skript Speicher in und einige os. * Befehle als root ausführen?

Mein Skript

  1. durchsucht einige Ordner und Dateien zu überprüfen, ob es die Arbeit machen kann
  2. nimmt einige Änderungen in / etc /...
  3. erstellt einen Ordner und Dateien, die von dem Benutzer gehört werden sollen, die das Skript ausgeführt

(1) kann als normaler Benutzer durchgeführt werden. Ich kann durch sudoing das Skript (2), aber dann den Ordner und Dateien in (3) root sein wird. 'S

Das Problem ist, dass ich eine Menge os.makedirs verwenden, os.symlink, usw., das mich hält von so dass es von einem normalen Benutzer runnable.

Tanks 2 alle für Anregungen

Die Lösung ist so weit:

# do all in sudo
os.chown(folder, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

dank gnibbler für Hinweis.

War es hilfreich?

Lösung 5

gnibbler gab einen Hinweis auf os.chown. Das Problem war dann die ID des Benutzers hinter sudo zu kennen. Diese Informationen werden in Umgebungsvariablen SUDO_* gespeichert:

os.chown, (some_path, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

Splitting der Code in 3 Dateien könnte eine Lösung sein, aber der Code ist bereits gemischt, so dass nicht geeignet ist.

Andere Tipps

Vielleicht können Sie (2) in einem separaten Skript setzen, sagen script2.py, und im Hauptskript rufen Sie sudo script2.py mit einem popen?

Auf diese Weise nur (2) wird als root ausgeführt werden.

yourscript.py:

run_part_1()
subprocess.call(['sudo', sys.executable, 'part2.py'])
run_part_3()

part2.py:

run_part_2()

Möchten Sie prüfen, mit Linux PAM ? Vielleicht haben Sie einen Blick auf die Linux-PAM Application Developers' Guide und Python-API für PAM

Sie sollten das Skript als root und tun die richtigen Änderungen an Berechtigungen für (3) mit os.chmod und os.chown auszuführen.

Es wäre möglich, dass Sie ein anderes Skript mit Root-Rechten durch sudo auszuführen, aber das würde auch Ihr Kennwort des Benutzers in das Skript zu speichern, um sudo zu passieren, was eine schreckliche Idee von einem Standpunkt der Sicherheit aus ist.

Damit Ihr Problem ist über die richtigen Berechtigungen immer auf einige Dateien / Ordner. Zuerst passiert in oder harten Code der UID / Benutzername Ihres normalen Benutzers. Dann nutzen Sie os.chown den Besitzer zu ändern, und os.chmod die Berechtigungen zu ändern. Es gibt auch alternative chown / chmod Methoden im o Paket, das Sie sehen sollen: http: // docs .python.org / library / os.html

Ein letzter Hinweis: Sie verfügen nicht über die Berechtigungen von Symlinks zu kümmern. Sie haben die Berechtigungen von dem, was sie zeigen auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top