我正在准备计算机安全考试,我正在努力理解以下示例问题。
'解释一下在 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,例如: