Linux 权限 UID 0 与 Ring 0

Linux 权限 UID 0 与 Ring 0

我正在准备计算机安全考试,我正在努力理解以下示例问题。

'解释一下在 x86 上的 Ring 0 中运行和在 Linux 中以 UID 0 运行之间的区别。举一个例子,说明其中一个可以实现,但另一个不能实现的功能。'

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

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

答案1

你的理解是正确的。 “Ring 0”是 x86 术语,表示处理器的内核模式。 “运行在ring 0”的意思是“内核代码”。

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

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

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

相关内容