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


8

在Unix中,

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

chmod 777 /

它会失败。

但是,这在硬件内部如何发生?

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

  • 操作系统尝试执行该指令。
  • 有关权限的信息可能位于辅助内存中的某个位置。因此它将发出一条写指令。
  • 在2之前,它将检查用户是否有权限执行此操作。如果不是,那只会发出一条错误消息。

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

Answers:


10

chmod文件系统操作,而不是特权指令。文件系统权限不在硬件级别处理。软件(特别是OS)看到,调用系统调用的进程没有足够的权限来对文件系统对象执行操作,并且系统调用返回了权限错误。


5

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

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

回答2:

chmod从libc内部调用一个函数(通常也称为chmod())。此函数检查调用方是否具有足够的操作特权-如果没有,则返回error EPERM

1的答案更有趣:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.