出于安全原因,我尝试在 Ubuntu 20.04 中以其他用户身份运行我的 Web 浏览器。整个过程正常,但我注意到 root 拥有的带有“sudo -u browseruser”的进程仍保留在进程列表中。
这是如何复制行为(我使用相同的用户而不是浏览器用户作为示例以避免与 xhost 授权等相关的详细信息,但您可以理解我的意思):
marco@portatilinux:~$ sudo -u marco firefox &
marco@portatilinux:~$ exit
浏览器窗口仍然以用户 marco 的身份打开...在另一个终端上:
marco@portatilinux:~$ ps -aux |grep marco |grep root
root 5056 0.0 0.0 22880 4756 ? S 13:34 0:00 sudo -u marco firefox
如您所见,启动 Firefox 的过程一直以 root 用户身份处于活动状态,直到我关闭浏览器窗口。这可能是预期的行为,没问题,但为了确定,我有几个问题:
问题:
- 这会不会成为整个系统的一个潜在安全漏洞(如果有人利用浏览器漏洞,如果我以这种方式运行浏览器,他是否更容易将权限提升到 root?)
- 有什么办法可以让这个 sudo -u 进程终止但保持浏览器进程存活?(如果我终止该进程,浏览器窗口也会随之终止)
我问这个问题只是因为我不想在尝试为我的系统做一些更好的事情时造成更严重的安全漏洞。
我希望一切都清楚。
谢谢
马可
答案1
1:sudo
是 setuid root,否则它将无法完成其工作。因此它始终以 root 身份启动,并且在进程列表中显示为由 root 拥有也没有什么奇怪的。sudo
在您的情况下,在生成子进程之前放弃特权firefox
。因此 root 特权完全保留在父进程中,实际上只是在等待firefox
完成。我认为在子进程中没有利用它的可能性。
sudo
一直都是这样运作的,并且会进行广泛的检查以避免滥用 root 权限的可能性。当然,你永远不能排除软件中存在错误和潜在漏洞的可能性,但这种情况极不可能。考虑到 的流行程度sudo
,潜在的漏洞可能已经被发现了。
2:当你输入时sudo -u marco firefox &
,你实际上是sudo
在后台运行,并且sudo
它本身运行firefox
在前景中sudo
(从它的角度来看)并等待它完成。如果您导致实际在后台运行,则可以摆脱父进程firefox
- 然后父sudo
进程将立即完成。
不要运行,sudo -u marco firefox &
编写如下脚本:
#!/bin/sh
exec firefox &
例如,调用脚本run_firefox
并将其放在/home/marco
目录中。然后运行:(末尾sudo -u marco /home/marco/run_firefox
不带)。如果您使用 进行检查,则该进程将不存在。&
ps
sudo