我正在使用 openvpn 选项 client-connect 在客户端连接时运行脚本。
当我使用简单命令时,脚本运行良好,但是当我添加需要 root 权限的命令时,它不起作用并且客户端无法连接到 VPN 服务器。
例如,这里有一些我尝试执行的命令:
bgpctl reload
和
route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
。
这些命令已经过测试,可以正常工作。我使用的是 freeBSD。
知道如何修复这个问题吗?
谢谢你!
更新
实际上不存在权限问题。脚本无法执行命令bgpctl
,route
因为它无法识别它们。
我可以通过指定命令的完整路径来解决问题:
/usr/local/sbin/bgpctl reload
/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
现在它可以工作了。
谢谢 roaima。
答案1
该--client-connect
脚本以参数指定的非特权 OpenVPN 用户身份运行--user
。
您可以通过将这些行添加到文件顶部并查看成功连接后--client-connect
写入的输出来验证这一点/tmp/ov.log
#!/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
在我的系统上,使用--user nobody
和--group nogroup
指令我得到以下输出:
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
...
由于您以root
用户和wheel
组的身份获得这些,因此您可能不会使用--user
或--group
指令。
验证是否PATH
包含要执行的命令所需的目录也很重要。