你能用这个想法实现一个 sudo 等效项吗?

你能用这个想法实现一个 sudo 等效项吗?

我们的 sudo 可执行文件将由 root 拥有 setuid 位。可执行文件会做两件事:

  1. 检查用户是否被允许
  2. execve argv[1](伪代码)

通常这将允许普通用户以 root 身份运行程序。问题是如何检查用户是否被允许,因为由于setuid,我们在启动时是root,因此不知道用户是谁?

答案1

问题是如何检查用户是否被允许,因为由于setuid,我们在启动时是root,因此不知道用户是谁?

这就是 uid 和 effective uid 概念的用武之地。当您运行 setuid 程序时,getuid仍然返回“真实”用户的 uid; setuid 位会导致有效 uid 发生变化。看man getuid以及相关文档的详细信息。

答案2

您所建议的正是 sudo 的工作原理...至少,这是开始。

要使事情真正发挥作用,还需要做很多事情,并且 sudo 做了一些相当复杂的事情以确保它的安全并记录事件。编写一个幼稚的版本很容易,即使在不应该运行的情况下,以及当用户无权使用它时,也很容易被欺骗运行。

相关内容