在search如何删除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。 它提供了一个世界公开的networking界面。 如果某人以某种方式通过Web界面中的安全漏洞获取了控制台,他们是否可以仅仅呼叫logout并成为root用户?
编辑:如果我正确阅读,更好的方法是运行脚本作为muser并允许muser sudo它需要的几个命令。 我仍然喜欢这个问题的答案,因为它是有价值的信息知道:)
不,这不是一件值得关注的事情。
如果有人因external_com中的安全漏洞而获得shell,那么他们所能做的只是运行命令。 如果他们退出该shell(通过注销),那么这是shell进程的结束; 他们不会最终回到根源。 当external_com结束时,启动它的进程/脚本将会退出(因为你执行了一个'exec')