Ich verwende die OpenVPN-Option „Client-Connect“, um ein Skript auszuführen, wenn ein Client eine Verbindung herstellt.
Das Skript funktioniert einwandfrei, wenn ich einfache Befehle verwende, aber wenn ich Befehle hinzufüge, die Root-Berechtigungen erfordern, funktioniert es nicht und Clients können keine Verbindung zum VPN-Server herstellen.
Hier sind beispielsweise einige Befehle, die ich auszuführen versuche:
bgpctl reload
Und
route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
.
Die Befehle sind getestet und funktionieren einwandfrei. Ich verwende FreeBSD.
Irgendeine Idee, wie man das Problem beheben kann?
Danke schön!
Aktualisieren
Eigentlich gab es kein Problem mit den Berechtigungen. Das Skript konnte die Befehle nicht ausführen bgpctl
, route
weil es sie nicht erkannte.
Ich konnte das Problem beheben, indem ich den vollständigen Pfad zu den Befehlen angegeben habe:
/usr/local/sbin/bgpctl reload
/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
Jetzt funktioniert es.
Danke, Roaima.
Antwort1
Das --client-connect
Skript wird als der durch den Parameter angegebene nicht privilegierte OpenVPN-Benutzer ausgeführt --user
.
Sie können dies überprüfen, indem Sie diese Zeilen am Anfang Ihrer --client-connect
Datei hinzufügen und die Ausgabe überprüfen, die /tmp/ov.log
nach einer erfolgreichen Verbindung geschrieben wird
#!/bin/bash
exec >>/tmp/ov.log 2>&1
chmod 666 /tmp/ov.log 2>/dev/null
echo
date
id
echo "PATH=$PATH"
# Payload
bgpctl reload
route add -net "$ifconfig_pool_remote_ip/30" -interface "$dev" -static
# All done
true
Auf meinem System erhalte ich mit den Anweisungen --user nobody
und --group nogroup
diese Ausgabe:
Tue Jun 9 15:00:45 BST 2015
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
...
Da Sie diese als root
Benutzer und wheel
Gruppe erhalten, verwenden Sie vermutlich nicht die --user
oder --group
-Direktive.
Es ist auch wichtig zu überprüfen, ob PATH
die erforderlichen Verzeichnisse für die Befehle enthalten sind, die Sie ausführen möchten.