2014-02-13 5 views
11

В подобной системе UNIX у нас есть режим пользователя и режим ядра. Есть некоторые инструкции, которые невозможно получить в пользовательском режиме. Однако, когда мы делаем sudo, мы можем получить доступ ко многим критическим разделам нашей ОС, выполнять критические действия.Есть ли разница между режимом sudo и режимом ядра?

Мой вопрос: когда программа выполняется в режиме sudo, работает ли вся программа в режиме ядра? Или это так, что режим sudo - это просто административный пользователь, полномочия которого являются простым подмножеством операций, которые могут выполняться ядром?

+3

Это режим администратора, а не режим ядра. –

+1

Нет, процесс пользовательского пространства, запущенный как суперпользователь, по-прежнему является процессом пользовательского пространства, а не чем-то запущенным в контексте ядра. Однако суперпользователь может иметь возможность изменять код ядра, например, попросив ядро ​​загрузить модуль или изменив хранилище, из которого загружается ядро ​​при загрузке. Наконец, в некоторых случаях суперпользователь может выполнять вызовы, которые предоставляют доступ к исходному оборудованию или памяти для доступа к пользовательскому пространству, а затем, возможно, делать некоторые вещи из пользовательского пространства, которые обычно могут выполняться только из пространства ядра. –

+0

Каждый процесс пользовательского пространства выполняется под определенной учетной записью пользователя. 'root' - это просто еще одна учетная запись пользователя; он имеет больше разрешений, чем другие учетные записи пользователей. Корневые процессы все еще выполняются в пространстве пользователя (или в пространстве ядра при выполнении системного вызова). –

ответ

12

Нет такой вещи, как sudo режим. Существует только пространство пользователя и пространство ядра.

Как вы сказали, режим ядра может выполнять любую инструкцию, предлагаемую процессором, и делать что-либо с оборудованием. Программы пользовательского режима могут обращаться только к памяти, которая сопоставлена ​​с запущенным процессом, и блокируются от прямого доступа к аппаратным средствам. Через механизм системного вызова программа пользовательского режима может вызывать код ядра, который будет выполнять доступ к аппаратным средствам от своего имени и возвращать результат обратно в пространство пользователя.

В пользовательском пространстве существуют дополнительные ограничения для пользователей, которые не являются root (root - это идентификационный номер пользователя 0). Например, они могут получить доступ только к определенным файлам, и они могут прослушивать только порты TCP с номером выше 1024. Запуск sudo начнет процесс как пользователь root, у которого нет этих ограничений.

Но процессы, выполняемые как пользователь root (через sudo), все еще работают в пользовательском пространстве и по-прежнему подвергаются тем же ограничениям, что и подразумевается.

11

Да, огромная разница между sudo и kernel режима.

Kernel mode относится к CPU modes. Большинство процессоров (в частности, все работает под общим ядром Linux, а не µCLinux), например. ваш процессор Intel внутри вашего ноутбука имеет несколько режимов работы, по крайней мере два: режим привилегированных (или supervisor), где возможны все команды (включая самые небезопасные, такие как конфигурирование MMU, отключение interrupts, остановка машины , делая физическое ввода-вывода, то есть отправки байтов в сети или на принтер или диск) и user mode, где запрещены некоторые машинные инструкции (в частности, инструкции физического ввода-вывода, конфигурация MMU, отключение прерывания и т. д.))

В Linux в режиме ядра работает только код ядра (включая модули ядра). Все остальное находится в пользовательском режиме.

Приложения (даже команды, выполняемые как пользователь root) выполняются в пользовательском режиме и взаимодействуют с ядром Linux через system calls (и это единственный способ взаимодействия приложения с ядром), перечисленные в syscalls(2). Таким образом, код приложения видит «virtual machine», способный выполнять системные вызовы и выполнять инструкции пользовательского режима. Ядро управления аутентификации и учетные данные (см credentials(7) & capabilities(7) ...)

sudo просто дает команду (используя setuid методы) разрешения для корня (т.е. идентификатор пользователя 0). Тогда возможны и другие системные вызовы ... Но команда (т. Е. process, выполняющая эту команду) все еще работает в пользовательском режиме и использует virtual memory и имеет свой address space.

Смежные вопросы