Sie verwenden möchten, den Benutzer mit os.setuid einstellen(), und Sie können die uid mit PWD erhalten. Wie so:
>>> import pwd, os
>>> uid = pwd.getpwnam('root')[2]
>>> os.setuid(uid)
Offensichtlich funktioniert dies nur, wenn der Benutzer oder ausführbar ist berechtigt, dies zu tun. Wie genau ich das einrichten soll, weiß ich nicht. Offensichtlich funktioniert es, wenn Sie root sind. Ich denke, dass Sie möglicherweise das Setuid-Flag in der ausführbaren Python-Datei benötigen, und das würde eine WHOPPING-Sicherheitslücke hinterlassen. möglich, das ist zulässig, wenn der Benutzer, den Sie ebenfalls festlegen, ein dedizierter eingeschränkter Benutzer ist, der nichts tun kann, außer was immer Sie tun müssen.
Unix-Sicherheit, basierend auf Benutzern und Einstellungen und Sachen, ist nicht sehr gut oder praktisch, und es ist einfach, große Sicherheitslücken zu hinterlassen. Eine sicherere Möglichkeit ist es, diesen Client-Server typisch zu machen, also haben Sie einen Dämon, der alles macht, und der Kunde spricht mit ihm. Der Dämon kann dann mit einer höheren Sicherheit als die Benutzer laufen, aber die Benutzer müssten beim Ausführen des Skripts einen Namen und ein Passwort angeben oder sich mit einem öffentlichen/privaten Schlüssel oder dergleichen identifizieren.
Haben Ihre anderen Benutzer nicht die Berechtigung, 'python' auszuführen? – Arkady
Es geht nicht darum, Python auszuführen. Das Skript muss Dinge tun, die bestimmte Berechtigungen benötigen. Ich möchte nicht allen Benutzern diese Berechtigungen erteilen. Das Skript verhält sich gewissermaßen wie ein kontrollierter Berechtigungsgeber, aber zuerst benötigt das Skript selbst die Berechtigungen ... – johannix
@johannix Ich bin auch auf das genaue Problem gestoßen. Haben Sie eine Problemumgehung gefunden? – Anubis