Openvpn在客户端执行脚本-与受限用户连接

Openvpn在客户端执行脚本-与受限用户连接

每次客户端连接时,我都会尝试在 openvpn 服务器上执行命令。我有一个使用以下方式创建的用户 openvpn

adduser --system --shell /usr/sbin/nologin --no-create-home openvpn
groupadd openvpn
usermod -g openvpn openvpn

该用户用于我的服务器配置(并且您还会看到我想要在每个客户端连接时执行的命令):

... <parts omitted>
user openvpn
group openvpn

client-connect '/bin/bash -c "sudo /usr/local/psa/bin/dns -a my.domain -a $common_name -ip $ifconfig_pool_remote_ip"'
script-security 2

我还通过 visudo (openvpn ALL=NOPASSWD: /usr/local/psa/bin/dns) 添加了一条条目,以便使用 sudo 使该脚本可供 openvpn 执行。服务器启动时没有错误,但如果客户端(在此日志中名为 server03)连接,则脚本会失败并显示以下日志:

sudo[31369]:  openvpn : TTY=unknown ; PWD=/etc/openvpn ; USER=root ; COMMAND=/usr/local/psa/bin/dns -a my.domain -a server03 -ip 10.9.0.2
sudo[31369]: pam_unix(sudo:session): session opened for user root by (uid=0)
sudo[31369]: pam_unix(sudo:session): session closed for user root
ovpn-user-server[31357]: server03/87.XXX.XXX.4:40594 WARNING: Failed running command (--client-connect): external program exited with error status: 1

正如您在日志中看到的那样,该命令使用正确的变量执行,但不知何故失败了。但如果我从 CMD 执行该命令(以 root 身份),它会成功终止,如果我通过以下方式登录 openvpn-user

su -s /bin/bash openvpn

脚本也成功终止。日志:

openvpn@...:/etc/openvpn$ sudo /usr/local/psa/bin/dns -a my.domain -a server03 -ip 10.9.0.2
SUCCESS: Creation of DNS record in Domain 'my.domain' complete.

我究竟做错了什么?

答案1

Sudo 默认需要 TTY。手动运行脚本后,TTY 可用。在 cron 中或(我猜也是)通过 openvpn 作为调用脚本运行后,没有可用的 TTY。

我看到两个选项:

相关内容