如果通过sudo执行setuid程序,其有效权限是多少?

如果通过sudo执行setuid程序,其有效权限是多少?

我读过很多关于该setuid钻头如何工作以及如何sudo工作的问题和答案,我想我已经理解了这些内容。

但是,我无法找出通过 sudo 执行程序时会发生什么如果该程序本身已setuid设置位。这个问题最好用一个例子来解释:

在相关系统上,有一个名为 的用户user1。系统已sudo正确安装和配置,以便root用户可以以他想要的任何不同用户身份执行程序。此外,还有一个程序/usr/bin/exampleprog拥有root:wheel并设置了setuidsetgid位:

root@morn ~ # dir /usr/bin/exampleprog
-rwsr-sr-x 1 root wheel 92K 2017-11-16 23:42 /usr/bin/exampleprog

现在我登录作为根用户并执行以下命令:

root@morn ~ # sudo -u user1 /usr/bin/exampleprog

然后会发生什么?是以exampleprogroot 身份运行user1(正如给定的选项所预期的那样sudo),还是以 root 身份运行(因为可执行文件由 root 拥有并设置了其setuid位)?

为了使事情变得更复杂,还有一个附加程序/usr/bin/wrapper,也属于root:wheel,但是没有setuidsetgid

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

答案1

id您可以通过将程序复制到某处并更改其权限来进行试验。这将显示exampleprog以 root 的有效 uid 和对应于 的真实 uid 运行user1

考虑一下如果您登录user1并运行会发生什么exampleprog:由于后者是 suid root,因此您希望它以 root 的有效 uid 运行。当您通过 运行程序时,这同样适用sudo

相关内容