在搜索如何在 shell 脚本中放弃 root 权限时,我经常看到使用 的答案su
。但是,使用完成后,su
您只需键入logout
并返回原始用户的 shell。我有一个以 root 身份运行的 bash 脚本,我在最后执行以下操作:
exec su -c "external_com" - muser
这将产生以下进程树:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
1 root 20 0 37352 2500 2192 S 0.0 0.0 0:00.02 su -c external_com
5 muser 20 0 85548 6292 5156 S 0.0 0.0 0:00.47 └─ external_com
13 muser 20 0 85548 6292 5156 S 0.0 0.0 0:00.35 ├─ external_com
12 muser 20 0 85548 6292 5156 S 0.0 0.0 0:00.02 ├─ external_com
我无法控制external_com
,它不会在内部调用 setuid。它提供了一个向全世界公开的 Web 界面。如果有人不知何故通过 Web 界面中的安全漏洞获取控制台,他们可以直接调用logout
并成为 root 用户吗?
编辑:如果我没看错的话,更好的方法是直接运行脚本muser
并允许muser
sudo 执行它需要的几个命令。不过,我仍然希望得到这个问题的答案,因为这是值得了解的宝贵信息 :)
答案1
不,这并不是什么值得担心的事情。
如果有人由于 external_com 中的安全漏洞而获得了 shell,那么他们所能做的就是以 muser 身份运行命令。如果他们退出该 shell(使用 logout),那么该 shell 进程就结束了;他们不会以 root 身份返回。当 external_com 结束时,启动它的进程/脚本将退出(因为您执行了“exec”操作)