Die Option "--up" in OpenVPN wird normalerweise für das Routing usw. verwendet. Daher wird sie verarbeitet, bevor OpenVPN die Root-Rechte verliert, um als "nobody" 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 TylerLer, 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"), mit dem von der Option "--down" aufgerufene Skripts als Root ausgeführt werden können. Es könnte ein Äquivalent geben, wie "openvpn-up-user.so", aber ich habe es nicht gefunden.
Edit0
Per Nikola Koturs Antwort habe ich Ian Meyers Runit-RPM installiert . Obwohl der Befehl chpst im Terminal funktioniert, schlägt er im Skript up mit "Befehl nicht gefunden" fehl. Was funktioniert, ist "sudo chpst" und das Einstellen der richtigen Anzeige und Sprache. Weitere Informationen finden Sie unter Warum gibt mein Terminal Unicode-Zeichen nicht ordnungsgemäß aus? Vorausgesetzt, das up-Skript benötigt 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 &
Edit1
Per 0xC0000022L's Kommentar stelle ich fest, dass "sudo -u user" genauso 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 Man Sudoer studieren und aktualisieren, wenn ich Sudo alleine zum Arbeiten bringe.
quelle
Antworten:
Ich benutze runit ‚s
chpst
Werkzeug für Aufgaben wie diese. Rufen Sie beispielsweise über das Skript up Ihr nichtprivilegiertes Skript auf:quelle
Nur runit und sudo abzudecken, vermisst viel. Tatsächlich gibt es eine ganze Familie von Werkzeugsätzen wie runit und eine große Auswahl an Werkzeugen, um genau das zu tun, genau für die Aufgabe, für die sie entwickelt wurden:
setuidgid
:setuidgid
:setuidgid
:chpst
:runuid
:s6-setuidgid
:setuidgid
:Sie mischen sich nicht in die unterschiedliche Aufgabe des Hinzufügens von Berechtigungen und fallen niemals in einen interaktiven Modus.
Ihr gehefteten-on - Probleme sind nicht viel mehr als Ihr Vergessen zu haben
sbin
sowiebin
in denPATH
, nebenbei bemerkt .Weitere Lektüre
quelle
Skript, das Privilegien verwirft und ein anderes Skript ausführt (aber hier habe ich es gerade so gemacht, dass es sich selbst ausführt):
Beispiel:
quelle
/etc/sudoers
erlaubt es sehr genau zu bestimmen, welche Umgebungsvariablen an das Programm übermittelt werden können, das vonsudo
und so weiter ausgeführt wird.man sudoers
. Ehrlich gesagt, wersudo
nur fürsudo su -
oder zum Wechseln des Benutzerkontexts verwendet, hat keine Ahnung, was hinter diesem großartigen Programm steckt und wie viel Sie für einzelne Programme, Benutzer, Hosts usw.$0
; Der Aufrufer kann ein Skript$0
auf buchstäblich alles einstellen , was er möchte. Und verwenden Sie mehr Anführungszeichen.$0
ist/directory/name with spaces/script
(und denken Sie daran, Benutzer beliebige Symlinks an Standorten erstellen können sie besitzen, auch wenn sie nicht verwenden ,exec -a somename yourscript
rufenyourscript
mit einem$0
vonsomename
), dann bekommen Sie würdensudo -u nobody /directory/name with spaces
, mitwith
undspaces
als separate Argumente auf Ihren Befehl übergeben .Wie wäre es mit:
Sie haben sich in einem vorherigen Kommentar über die Umgebung beschwert, sodass Sie möglicherweise auch die Unterschiede zwischen den Ausgaben vergleichen:
quelle
Unter Linux können Sie verwenden
runuser
odersetpriv
wenn eine PAM-Sitzung nicht erforderlich ist (beides vonutil-linux
):Von der
su
Manpage:quelle