Estoy usando la opción client-connect de openvpn para ejecutar un script cuando un cliente se conecta.
El script funciona bien cuando uso comandos simples, pero cuando agrego comandos que necesitan privilegios de root, no funciona y los clientes no pueden conectarse al servidor VPN.
Por ejemplo, aquí hay algunos comandos que intento ejecutar:
bgpctl reload
y
route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
.
Los comandos están probados y funcionan correctamente. Estoy usando freeBSD.
¿Alguna idea de cómo solucionar el problema?
¡Gracias!
Actualizar
En realidad no hubo ningún problema de privilegios. El script no pudo ejecutar los comandos bgpctl
y route
no pudo reconocerlos.
Podría solucionar el problema especificando la ruta completa a los comandos:
/usr/local/sbin/bgpctl reload
/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
Ahora funciona.
Gracias roaima.
Respuesta1
El --client-connect
script se ejecuta como el usuario OpenVPN sin privilegios especificado por el --user
parámetro.
Puede verificar esto agregando estas líneas en la parte superior de su --client-connect
archivo y revisando el resultado escrito /tmp/ov.log
después de una conexión exitosa.
#!/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
En mi sistema, usando las directivas --user nobody
y --group nogroup
obtengo este resultado:
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
...
Dado que los obtiene como root
usuario y wheel
grupo, probablemente no esté utilizando la directiva --user
or --group
.
También es importante verificar que PATH
contenga los directorios necesarios para los comandos que desea ejecutar.