Как операционная система предотвращает выполнение привилегированной команды непривилегированным процессом?

8

В Unix

если вы являетесь гостем и сделали:

chmod 777 /

Это потерпит неудачу.

Но как это происходит внутри на аппаратном уровне?

Пока, я думаю, вот что происходит:

  • ОС пытается выполнить эту инструкцию.
  • Информация о разрешениях, возможно, находится где-то во вторичной памяти. Так что было бы выдать инструкцию по записи.
  • До 2, он будет проверять, имеет ли пользователь право делать это. Если это не так, он просто выдаст сообщение об ошибке.

Так ли это, или возникает прерывание, когда возникает такая ситуация? Есть ли подпрограмма в таблице ISR в основной памяти, соответствующая непривилегированным инструкциям?

ученик
источник

Ответы:

10

chmodявляется операцией файловой системы , а не привилегированной инструкцией. Разрешения файловой системы не обрабатываются на аппаратном уровне. Программное обеспечение (в частности, ОС) видит, что процесс, вызывающий системный вызов, не имеет достаточных разрешений для выполнения операции над объектом файловой системы, и системный вызов возвращается с ошибкой разрешения.

Игнасио Васкес-Абрамс
источник
5

На самом деле, вы задаете два разных вопроса:

  1. Как операционная система предотвращает выполнение привилегированной команды непривилегированным процессом?
  2. Почему непривилегированный процесс не может вызвать chmod 777 /?

Ответ за 2:

chmodвнутренне вызывает функцию из libc (удобно также вызывается chmod()). Эта функция проверяет, имеет ли вызывающая сторона достаточные привилегии для операции - если нет, возвращает ошибку EPERM.

Ответ на 1 более интересен:

Точный механизм зависит от ОС и аппаратной платформы, но в основном это так: все современные процессоры имеют встроенные функции безопасности. Это позволяет ОС сообщать процессору: «запустите эту программу, но не позволяйте ей выполнять эти привилегированные инструкции». Таким образом, сам процессор будет применять ограничение на разрешенные инструкции. Если программа пытается выполнить привилегированную инструкцию, процессор передает управление обратно в ОС, что обычно завершает некорректно работающую программу. Подробности см., Например, https://en.wikipedia.org/wiki/Ring_%28computer_security%29.

sleske
источник