使用seteuid临时删除root权限是否有缺陷?

时间:2012-01-23 07:32:09

标签: security unix

我从一些书中读到,seteuid和euid以及已保存的UID可用于临时删除root权限。案例是:

  1. 将euid设置为非root用户。
  2. 做一些不需要root权限的事情。
  3. 再次将euid设置为root(这是有效的,因为root仍然是已保存的UID)。
  4. 我认为这是有缺陷的。在第2步中,一些恶意代码也可以调用seteuid到root,因此这种删除root权限的方法不会阻止劫持代码获得root权限。我的分析是否正确?如果是这样,那么可以使用seteuid-on-saved-UID?

2 个答案:

答案 0 :(得分:3)

您担心恶意代码也可能会将有效UID恢复为已保存的UID是合法的。如果你担心这一点,也许你不应该首先使用setuid root程序。 (LD_PRELOAD和其他类似的东西一般都令人担忧;当程序以setuid权限运行时,它们也受到限制。)

但是,通常情况下,该机制在forked子节点中使用,其中子节点将在没有提升权限的情况下执行其他进程,因为执行的进程不会保留已保存的UID。如果恶意代码设法在exec()之前接管,那么您仍然会遇到问题。在exec()之后,恶意代码仅具有真实UID的权限,并且用户可以完成恶意代码所做的任何事情。

答案 1 :(得分:0)

Setuid一般都存在缺陷,因为没有身份验证就可能出现权限提升。甚至root权限的概念也有点陈旧。大多数平台都有更新的方法来获得额外的权限,例如,它来自unix上的“sudo”和Solaris上的“pfexec”。

此外,他们通常还有更细粒度的控件,他们需要升级这些控件。使用setuid,全部或全部,但在Solaris上使用RBAC,框架提供了指定所需的确切权限的方法,通常是打开文件,读取目录等较低级别的东西。

一般来说,我认为现在你应该避免使用setuid,而是使用更新的API。