8

В Unix

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

chmod 777 /

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

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

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

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

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

2 ответа2

10

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

5

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

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

Ответ за 2:

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .