OpenVPN chroot und auth-user-pass-verify

capt_bluebaer

Neuer User
Mitglied seit
10 Mai 2007
Beiträge
76
Punkte für Reaktionen
0
Punkte
6
Hallo,

mit der jetzigen Version aus dem SVN (3307) und einer zusätzlichen Option "auth-user-pass-verify" bekomme ich mit OpenVPN keine Verbindung.
Im Log sehe ich immer so etwas:
Code:
Wed May  6 16:46:20 2009 us=509874 192.168.100.5:1884 TLS Auth Error: user-pass-verify script failed to execute: /var/tmp/flash/auth-script.sh
Wed May  6 16:46:20 2009 us=510537 192.168.100.5:1884 TLS Auth Error: Auth Username/Password verification failed for peer
Wed May  6 16:46:20 2009 us=513545 192.168.100.5:1884 SIGTERM[soft,auth-control-exit] received, client-instance exiting
Mit der alten Version klappte (freetz-devel-2329) klappte das problemlos.
Da die chroot-Umgebung in /var/tmp/openvpn läuft habe ich das Authentifizierungs-Script auch nach /var/tmp/openvpn/var/tmp/flash/ kopiert, um es dort auch sichtbar zu haben. Ein Rechte-Problem an dieser Stelle scheidet auch aus, habe sowohl das Script als auch die Directories (openvpn:eek:penvpn) entsprechend ausgestattet.
Die einzige Möglichkeit, wie ich OpenVPN dazu überreden konnte ist der komplette Verzicht auf chroot und owner oder group müssen root sein. In diesem Falle liegt das auth-script natürlich im realen Verzeichnis /var/tmp/flash.
Mich wundert die Fehlermeldung "failed to execute", d.h. nicht gefunden oder keine ausreichenden Rechte, aber was mache ich falsch?
Selbst mit "verb 11" bekomme ich keine weiteren Informationen.
Irgendwie komme ich jetzt nicht mehr weiter, hat einer von Euch noch 'ne Idee?
 
Hatte ich nicht, aber ein "mount -o bind /bin /var/tmp/openvpn/bin" sowie ein "/bin/sh" statt "/bin/false" als shell in der /etc/passwd für den Benutzer openvpn zeigt die selbe Meldung und bringt mich nicht weiter.
Kleiner Denkanstoß: Man muß 'mal überlegen ob das auch nicht ein Widerspruch ist: Mit chroot soll ja gerade die Ausführung von Dateien verhindert werden.
 
Hast Du auch alle Libraries, um die Shell auszuführen?

Chroot ist nicht grundsätzlich, damit nichts ausgeführt werden kann, sondern um im Fall einer Sicherheitslücke den Einbruch einzudämmen. Inwieweit es sinnvoll ist, ein "vollständiges" chroot zu erstellen, ist eine andere Frage.
 
Im Fall von busybox als Shell-Interpreter fehlen vermutlich nur ein paar Bibliotheken:
Code:
[[email protected] freetz-trunk]$ pwd
/home/foo/src/freetz-trunk
[[email protected] freetz-trunk]$ strings build/modified/filesystem/bin/busybox | grep lib
[B]/lib/ld-uClibc.so.0[/B]
[B]libc.so.0[/B]
__uClibc_main
/usr/lib/freetz
/lib/modules
[[email protected] freetz-trunk]$

Das hier sollte reichen:
Code:
root@fritz:/var/mod/root# ROOT_DIR=/var/tmp/openvpn
root@fritz:/var/mod/root# mkdir -m 755 ${ROOT_DIR}/bin
[B]root@fritz:/var/mod/root# mkdir -m 755 ${ROOT_DIR}/lib[/B]
root@fritz:/var/mod/root# cp -a /bin/busybox ${ROOT_DIR}/bin/sh
[B]root@fritz:/var/mod/root# cp /lib/ld-uClibc.so.0 ${ROOT_DIR}/lib/
root@fritz:/var/mod/root# cp /lib/libc.so.0 ${ROOT_DIR}/lib/[/B]
root@fritz:/var/mod/root# chroot $ROOT_DIR


BusyBox v1.19.4 (2012-03-02 21:59:41 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.

@fritz:/#

Hier noch eine komplette Lösung:

Code:
mkdir -m 0755 /var/tmp/openvpn/bin
mkdir -m 0755 /var/tmp/openvpn/lib
mkdir -m 1777 /var/tmp/openvpn/tmp
cp -a /bin/busybox /var/tmp/openvpn/bin/sh
ln /tmp/openvpn/bin/sh /tmp/openvpn/bin/md5sum
cp /lib/ld-uClibc.so.0 /var/tmp/openvpn/lib/
cp /lib/libc.so.0 /var/tmp/openvpn/lib/
touch /var/tmp/openvpn/bin/auth.sh
chmod 0755 /var/tmp/openvpn/bin/auth.sh

cat > /var/tmp/openvpn/bin/auth.sh << 'EOF'
#!/bin/sh

case $(/bin/md5sum < $1) in
  ( "f47c75614087a8dd938ba4acff252494  -" ) return 0 ;;
esac

return 1
EOF
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.