OpenVPN 中的“--up”选项通常用于路由等。因此它会在 OpenVPN 放弃 root 权限以作为 nobody 运行之前进行处理。但是,我正在调用需要以非特权用户身份运行的 shell 脚本。
我怎么做?我研究了Drop Process Privileges,尤其是多项式和泰勒尔的答案,但我不明白如何实现。我在 Centos 6.5 中工作,并且 suid 被阻止,作为“chmod u+s”和“setuid()”。
有一个 OpenVPN 插件(“openvpn-down-root.so”),它使“--down”选项调用的脚本能够以 root 身份运行。可能有一个等效的,例如“openvpn-up-user.so”,但我还没有找到。
编辑0
根据 Nikola Kotur 的回答,我已经安装了Ian Meyer 的 runit-rpm。尽管 chpst 命令在终端中工作,但在 up 脚本中它失败并显示“找不到命令”。有效的是“sudo chpst”加上设置正确的显示和语言。请参阅为什么我的终端不能正确输出 unicode 字符?鉴于此,up 脚本需要以下四行:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
Run Code Online (Sandbox Code Playgroud)
编辑1
根据 0xC0000022L 的评论,我发现“sudo -u user”和“sudo chpst -u user -U user”一样有效:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG …
Run Code Online (Sandbox Code Playgroud)