Estou usando a opção openvpn client-connect para executar um script quando um cliente se conecta.
O script funciona bem quando uso comandos simples, mas quando adiciono comandos que precisam de privilégios de root, ele não funciona e os clientes não conseguem se conectar ao servidor VPN.
Por exemplo, aqui estão alguns comandos que tento executar:
bgpctl reload
e
route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
.
Os comandos são testados e funcionam corretamente. Estou usando o freeBSD.
Alguma ideia de como resolver o problema?
Obrigado!
Atualizar
Na verdade não houve problema de privilégios. O script não conseguiu executar os comandos bgpctl
porque route
não conseguiu reconhecê-los.
Eu poderia resolver o problema especificando o caminho completo para os comandos:
/usr/local/sbin/bgpctl reload
/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
Agora funciona.
Obrigado Roaima.
Responder1
O --client-connect
script é executado como o usuário OpenVPN não privilegiado especificado pelo --user
parâmetro.
Você pode verificar isso adicionando estas linhas ao topo do seu --client-connect
arquivo e revisando a saída gravada /tmp/ov.log
após uma conexão bem-sucedida
#!/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
No meu sistema, usando as --user nobody
diretivas --group nogroup
e recebo esta saída:
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
...
Como você os obtém como root
usuário e wheel
grupo, provavelmente não está usando a diretiva --user
ou --group
.
Também é importante verificar se PATH
contém os diretórios necessários para os comandos que deseja executar.