操作系统如何阻止非特权进程执行特权指令?

lea*_*ner 8 linux interrupts permissions

在 Unix 中,

如果您是访客用户并且做了:

chmod 777 /

它会失败。

但是这在硬件层面是如何在内部发生的呢?

到目前为止,我认为这就是发生的事情:

  • 操作系统尝试执行该指令。
  • 有关权限的信息可能位于辅助存储器中的某处。所以它会发出写指令。
  • 在 2 之前,它会检查用户是否有权执行此操作。如果他不是,它只会发出错误消息。

这是如何发生的,还是在出现这种情况时会引发中断?主存中的 ISR 表中是否有与非特权指令对应的例程?

Ign*_*ams 10

chmod文件系统操作,而不是特权指令。文件系统权限不在硬件级别处理。软件(特别是OS)看到,该方法调用系统调用不具有足够的权限来在文件系统对象和权限错误的系统调用返回上执行该操作。


sle*_*ske 5

实际上,您在问两个不同的问题:

  1. 操作系统如何阻止非特权进程执行特权指令?
  2. 为什么非特权进程不能调用chmod 777 /

回答2:

chmod在内部调用来自 libc 的函数(方便地也称为chmod())。这个函数检查调用者是否有足够的操作权限——如果没有,它返回 error EPERM

1的答案更有趣:

确切的机制取决于操作系统和硬件平台,但基本上是这样的:所有现代处理器都具有内置的安全功能。这允许操作系统告诉处理器:“运行这个程序,但不要让它执行这些特权指令”。因此处理器本身将对允许的指令实施限制。如果程序尝试执行特权指令,处理器会将控制权交还给操作系统,操作系统通常会终止行为不端的程序。有关详细信息,请参见例如https://en.wikipedia.org/wiki/Ring_%28computer_security%29