Die Option „–up“ in OpenVPN wird normalerweise für das Routing usw. verwendet. Daher wird sie verarbeitet, bevor OpenVPN die Root-Rechte aufgibt, um als „Niemand“ ausgeführt zu werden. Ich rufe jedoch Shell-Skripte auf, die als nicht privilegierter Benutzer ausgeführt werden müssen.
Wie mache ich das? Ich habe Drop Process Privileges studiert, insbesondere die Antworten von Polynomen und Tylerls, aber ich verstehe nicht, wie man sie implementiert. Ich arbeite in Centos 6.5 und suid ist blockiert, sowohl als „chmod u+s“ als auch als „setuid()“.
Es gibt ein OpenVPN-Plugin („openvpn-down-root.so“), das es ermöglicht, dass Skripte, die mit der Option „–down“ aufgerufen werden, als Root ausgeführt werden. Es könnte ein Äquivalent geben, wie „openvpn-up-user.so“, aber ich habe es nicht gefunden.
Bearbeiten0
Laut Nikola Koturs Antwort habe ich Ian Meyers Runit-RPM installiert. Obwohl der chpst-Befehl im Terminal funktioniert, schlägt er im up-Skript mit „Befehl nicht gefunden“ fehl. Was funktioniert, ist „sudo chpst“ plus das Einstellen der richtigen Anzeige und Sprache. Siehe Warum gibt mein Terminal Unicode-Zeichen nicht richtig aus? Angesichts dessen benötigt das up-Skript diese vier Zeilen:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
Bearbeiten1
Laut dem Kommentar von 0xC0000022L finde ich, dass „sudo -u user“ genauso gut funktioniert wie „sudo chpst -u user -U user“:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &
Ich werde Mann-Sudoer studieren und aktualisieren, ob/wenn ich Sudo alleine zum Laufen bekomme.
Akzeptierte Antwort:
Ich verwende runits chpst
Tool für solche Aufgaben. Rufen Sie beispielsweise aus dem up-Skript Ihr unprivilegiertes Skript auf:
chpst -u nobody /path/to/script