![Какова связь между корнем и ядром?](https://rvso.com/image/52099/%D0%9A%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D0%BA%D0%BE%D1%80%D0%BD%D0%B5%D0%BC%20%D0%B8%20%D1%8F%D0%B4%D1%80%D0%BE%D0%BC%3F%20.png)
На основании части первого ответаэто вопросы:
чтение из файла (ядро должно проверить, что разрешения позволяют вам читать из указанного файла, а затем ядро выполняет фактические инструкции для диска, чтобы прочитать файл)
Для изменения разрешения на файл требуются привилегии root. С привилегиями root пользователь может получить доступ к любым файлам, не беспокоясь о разрешениях. Итак, есть ли связь между root и ядром?
решение1
Сначала пояснение:
Для изменения разрешения на доступ к файлу требуются права root.
Отчеловек 2 chmodмы видим, что системный вызов chmod() вернет EPERM (ошибку прав доступа), если:
Эффективный UID не соответствует владельцу файла, а процесс не является привилегированным (Linux: у него нет возможности CAP_FOWNER).
Обычно это означает, что выилинужно быть владельцем файла или пользователем root. Но мы видим, что ситуация в Linux может быть немного сложнее.
Итак, есть ли какая-либо связь между корнем и ядром?
Как указано в процитированном вами тексте, ядро отвечает за проверку того, что UID процесса, выполняющего системный вызов (то есть пользователя, от имени которого он запущен), разрешено делать то, что он просит. Таким образом, суперсилы root исходят из того факта, что ядро запрограммировано всегда разрешать операцию, запрошенную пользователем root (UID=0).
В случае Linux большинство различных проверок разрешений проверяют, имеет ли данный UID необходимыеспособностьСистема полномочий позволяет более точно контролировать, кому и что разрешено делать.
Однако для сохранения традиционного значения пользователя «root» в UNIX процесс, выполняемый с UID 0, имеет все возможности.
Обратите внимание, что хотя процессы, работающие с UID=0, имеют привилегии суперпользователя, им все равно приходится делать запросы к ядру через интерфейс системных вызовов.
Таким образом, процесс пользовательского пространства, даже запущенный как root, все еще ограничен в своих возможностях, поскольку он запущен в "пользовательский режим" и ядро работает в "режим ядра" которые на самом деле являются различными режимами работы самого ЦП. В режиме ядра процесс может получить доступ к любой памяти или выдать любую инструкцию. В пользовательском режиме (на процессорах x86 на самом деле существует несколько различных защищенных режимов) процесс может получить доступ только к своей собственной памяти и может выдать только некоторые инструкции. Таким образом, процесс пользовательского пространства, работающий как root, по-прежнему имеет доступ только к функциям режима ядра, которые ядро ему предоставляет.