无法在 openvpn 脚本中执行 root 命令

无法在 openvpn 脚本中执行 root 命令

我正在使用 openvpn 选项 client-connect 在客户端连接时运行脚本。

当我使用简单命令时,脚本运行良好,但是当我添加需要 root 权限的命令时,它不起作用并且客户端无法连接到 VPN 服务器。

例如,这里有一些我尝试执行的命令:

bgpctl reload

route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static

这些命令已经过测试,可以正常工作。我使用的是 freeBSD。

知道如何修复这个问题吗?

谢谢你!

更新

实际上不存在权限问题。脚本无法执行命令bgpctlroute因为它无法识别它们。

我可以通过指定命令的完整路径来解决问题:

/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包含要执行的命令所需的目录也很重要。

相关内容