为什么 Unix/Linux 中存在超级用户?

use*_*er8 -2 security root architecture

我知道某些系统任务只允许特权用户/进程执行,但超级用户(通常root在 Unix/Linux 中)或管理员仍然可以在安全方面出现很多问题,并且最常被尝试利用。你们都知道为什么。

我不仅(但主要)对 Unix/Linux 的一般答案感兴趣。这背后的原因是什么?

Gil*_*il' 5

以一种或另一种形式存在的超级用户在逻辑上是必要的。必须有一些允许配置凭据的凭据。那是根。

Root 不必是用户帐户。例如,它可以是一种能力。Unix 历来追求简单的设计,并使用单一概念来实现帐户和功能:用户。每个使用系统的人都会获得一个用户账号,系统服务也被分配一个用户账号。除其他外,系统服务可以控制用户凭据(/etc/passwd以及在现代系统中扮演相同角色的其他功能),可以间接获得任何功能。在 Unix 设计下,root 也可以直接获得任何能力(例如通过运行su,或底层系统调用),但即使不是这样,也很难阻止凭证管理器为自己分配任何凭证¹。

现代系统已演变为更细粒度的安全模型。例如,Unix 早期添加了组的概念以允许用户共享文件,但组只能由 root 管理。大多数现代 Unix 系统都有访问控制列表,允许用户在没有 root 干预的情况下共享文件。越来越多的 Linux 系统使用安全机制,例如SELinux,限制了 root 可以做的事情。

但更复杂的安全模型是一把双刃剑。更细粒度的权限允许更大的控制,并且它们允许以简单的方式实现更多的安全策略(例如用于访问的 ACL 而不是通过 setuid 程序间接访问)。但是更复杂的安全策略更难审查(用更复杂的语言需要审查的东西太多了),并且实现这些策略的代码更复杂,因此出现错误的风险更大。

¹这可以通过双重控制或加密方式来防止,但这会限制功能(如果无法以最终权限运行任意代码)和可用性(如果系统被锁定太多,这会增加被锁定的风险)。