Linux 权限 UID 0 与 Ring 0

tje*_*sen 4 linux kernel x86

我正在为计算机安全考试而学习,我正在努力理解以下示例问题。

'解释在 x86 上在 ring 0 中运行和在 Linux 中作为 UID 0 运行之间的区别。举一个例子,说明每个人都能实现但另一个不能。'

我目前的理解是 x86 上的 ring 0 是最高特权的操作系统级别,内核代码在 ring 0 中运行。 UID 0 是基本上可以运行任何东西的 linux 超级用户。以我目前对这些概念的理解,我不明白如何回答这个问题。

请注意,这不是作业问题,也不是我要评分的问题,它只是学习材料。

Gil*_*il' 6

你的理解是正确的。“Ring 0”是处理器内核模式的 x86 术语。“在环 0 中运行”意味着“内核代码”。

在安全性方面,一个进程(在任何 UID 下)可以完成的所有事情都可以由内核完成。有些事情从内核代码做起来很不方便,例如打开文件,但它们是可能的。

相反,在正常情况下,如果您可以在 UID 0 下运行代码,那么您可以通过加载内核模块来运行内核代码。因此,在典型配置下,UID 0 和内核级别之间没有安全屏障。然而,在进程中运行的代码仍然受到处理器用户模式的限制:对外围设备(包括磁盘、网络等)的每次访问仍然必须通过系统调用。可以将机器配置为具有并非全部强大的 UID 0,例如:

  • 禁用内核模块的加载。
  • 使用诸如SELinux 之类的安全框架来剥夺进程的特权:UID 0 不一定胜过那些,例如,可以使用 UID 0 创建一个访客帐户,但基本上没有具有正确 SELinux 策略的特权。
  • 用户命名空间中的UID 0仅具有命名空间创建者的权限。