是否有一些 Unix 或类 Unix 操作系统仍然将“root”用户视为超级用户?

use*_*202 0 root capabilities

Linux没有把“根”用户为超级用户了,而Linux使用功能,这给进程权限(我认为BSD做了类似的事情)。

因此,例如在较旧的 Linux 版本中,如果进程的EUID(或FSUID不确定)是“root”,Linux 将允许进程创建套接字,但在现代 Linux 版本中,Linux 将允许进程创建套接字仅当进程具有允许进程创建套接字所需的权限。

但我想知道,是否有一些 Unix 或类 Unix 操作系统仍然将“root”用户视为超级用户?

Gil*_*il' 5

这个问题的前提大多是有缺陷的。Linux确实将用户 0 视为超级用户。(它始终是用户 0;调用该用户root只是一种约定。)功能是一种附加机制,它允许非 root 进程接收特定权限。用户 0 通常有效地拥有所有功能,因此 root 仍然是超级用户。

以有效用户 ID 0 运行的进程可能会失去功能,但这不会限制其功能,除非在高度受控的环境中。任何以有效用户 ID 0 运行并且可以创建可执行文件并可以调用的进程execve都可以执行具有所有功能的任意代码,因为execve当有效用户 ID 为 root 时,不会保留进程的功能掩码。(请参阅手册中的“以 root 身份执行程序的能力和执行” 。)

通过SECBIT_NOROOT在登录期间设置标志并确保无法恢复它,或者通过从边界集中删除功能,可以使操作系统完全剥夺对某些功能的访问权,同时仍然使用用户 ID 0 。但这不是 Linux(如 Linux 操作系统)通常的工作方式。这是内核的一个额外功能,可用于受限操作系统(例如在容器内)。

能力可以限制 root 的权力,但以这种方式使用它们并不容易,这也不是它们的主要用途:能力主要用于避免以 root 身份运行进程。Linux 内核确实具有其他限制 root 权限的功能。安全模块如 SELinux 和 AppArmor 的应用与用户 ID 无关,因此可以设置一个用户 ID 0 几乎无所作为的系统(但同样,这不是正常系统的设置方式)。对于用户命名空间,用户 id 0 只是该命名空间内的超级用户,此功能广泛用于容器

FreeBSD 提供Capsicum 功能。我不知道 Capsicum 是否限制了用户 id 0 的权力。同样,能力的主要目标是减少以所有特权运行的代码量,而不是删除全特权进程的概念。

我认为任何其他 BSD 都没有能力机制。OpenBSD 旨在通过最小化特权代码的复杂性和数量来确保安全。增加安全机制的复杂性以减少特权数量,特权代码不是免费的午餐。


归档时间:

查看次数:

112 次

最近记录:

6 年 前