Да, огромная разница между 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.
Это режим администратора, а не режим ядра. –
Нет, процесс пользовательского пространства, запущенный как суперпользователь, по-прежнему является процессом пользовательского пространства, а не чем-то запущенным в контексте ядра. Однако суперпользователь может иметь возможность изменять код ядра, например, попросив ядро загрузить модуль или изменив хранилище, из которого загружается ядро при загрузке. Наконец, в некоторых случаях суперпользователь может выполнять вызовы, которые предоставляют доступ к исходному оборудованию или памяти для доступа к пользовательскому пространству, а затем, возможно, делать некоторые вещи из пользовательского пространства, которые обычно могут выполняться только из пространства ядра. –
Каждый процесс пользовательского пространства выполняется под определенной учетной записью пользователя. 'root' - это просто еще одна учетная запись пользователя; он имеет больше разрешений, чем другие учетные записи пользователей. Корневые процессы все еще выполняются в пространстве пользователя (или в пространстве ядра при выполнении системного вызова). –