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) 我有一个Crunchbang VM具有两个接口,eth0并且eth1,其中的每一个连接到的OpenWRT VM(eth0为10.232.64.20和
eth1是10.232.65.20)。我正在使用网络管理器和 DHCP。我的总体目标是拥有多个ssh连接,并将它们与ifenslave.
默认情况下,eth1(出于某种原因)是默认网关:
user@crunchbang:~$ ip ro
default via 10.232.65.1 dev eth1 proto static
10.232.64.0/24 dev eth0 proto kernel scope link src 10.232.64.20
10.232.65.0/24 dev eth1 proto kernel scope link src 10.232.65.20
Run Code Online (Sandbox Code Playgroud)
我添加了一条路线eth0:
user@crunchbang:~$ sudo ip route add default via 10.232.64.1 dev eth0 proto static metric 1
Run Code Online (Sandbox Code Playgroud)
然后我有两条路线:
user@crunchbang:~$ ip ro
default via 10.232.65.1 dev eth1 proto static
default …Run Code Online (Sandbox Code Playgroud) bonding ×1
centos ×1
crunchbang ×1
interface ×1
privileges ×1
root ×1
setuid ×1
shell-script ×1
ssh ×1