setuid
我已经阅读了许多有关该位如何工作以及如何工作的问题和答案sudo
,并且我想我已经理解了这些内容。
但是,如果该程序本身具有setuid
bit set,我无法找出通过 sudo 执行程序时会发生什么。这个问题最好用一个例子来解释:
在有问题的系统上,有一个名为user1
. 系统已sudo
正确安装和配置,以便root
用户可以按照他想要的任何不同用户执行程序。此外,有一个程序/usr/bin/exampleprog
由root:wheel
and 位拥有setuid
并setgid
设置:
root@morn ~ # dir /usr/bin/exampleprog
-rwsr-sr-x 1 root wheel 92K 2017-11-16 23:42 /usr/bin/exampleprog
现在我以 root身份登录并执行以下命令:
root@morn ~ # sudo -u user1 /usr/bin/exampleprog
那会发生什么?exampleprog
是运行为user1
(正如给定的选项所预期的那样sudo
),还是以 root 运行(因为可执行文件归 root 所有并设置了它的位setuid
)?
为了让事情变得更复杂,还有一个额外的程序/usr/bin/wrapper
,也由 拥有,root:wheel
但没有和位:setuid
setgid
root@morn ~ # dir /usr/bin/wrapper
-rwxr-xr-x 1 root wheel 15K 2017-11-16 23:42 /usr/bin/wrapper
程序在wrapper
执行时,会在某个时候执行(生成)/usr/bin/exampleprog
。
现在我执行:
root@morn ~ # sudo -u user1 /usr/bin/wrapper
wrapper
生成时exampleprog
,后者将作为user1
还是作为root
?
您可以通过将
id
程序复制到某处并更改其权限来进行试验。这将显示exampleprog
以 root 的有效 uid 和对应于 的真实 uid 运行user1
。考虑一下如果您以 as 登录
user1
并运行会发生什么exampleprog
:由于后者是 suid root,因此您希望它以 root 的有效 uid 运行。当您通过sudo
.