Ich versuche, die sichere Sache zu tun, und habe ein Programm, das als root laufen muss, um seine Privilegien fallenzulassen, wenn es sie nicht braucht. Dies funktioniert gut, wenn ich meine binäre bin mit dem SUID-Bit chmod
und machen Sie es zu root gehören, wie jetzt habe ich UID = einige Benutzer und EUID = root, so kann ich seteuid(0)
und seteuid(getuid())
verwenden, um jeweils Admin-Rechte zu erhöhen und zu löschen.Wie benutze ich setuid() von root um Benutzer zu werden, mit der Möglichkeit, später wieder root zu werden?
Aber wenn ich sudo
anstelle der SUID verwenden, dann UID == EUID == 0, und so seteuid(getuid())
aufrufen wird keine Wirkung haben. Und ich kann UID
nicht auf irgendeinen Wert von irgendeinem gelegentlichen Benutzer ändern, da die setuid()
Mannseite klar besagt, dass, wenn es von einem Programm aufgerufen wird, das als root läuft, man die Vorzüge für gutes verliert, ohne Hoffnung, sie zurückzubekommen.
Also, wie mache ich mein Programm zeitweilig seine Privilegien verlieren, wenn es mit sudo
ausgeführt wird?
Müssen Sie zur UID des Benutzers zurückkehren, der 'sudo' ausgeführt hat, oder nur zu einem zufälligen, weniger privilegierten Benutzer? –
Ich werde mich mit 'niemand' zufrieden geben. Aber wenn Sie einen einfachen Weg kennen, um den Sudo-Aufrufer zu bekommen, bin ich interessiert. – Florian
meh, es ist einfach, muss nur 'getenv (" SUDO_UID ")'. – Florian