![¿Cuál es la relación entre raíz y kernel?](https://rvso.com/image/52099/%C2%BFCu%C3%A1l%20es%20la%20relaci%C3%B3n%20entre%20ra%C3%ADz%20y%20kernel%3F%20.png)
Basado en parte de la primera respuesta deestas preguntas:
leer desde un archivo (el kernel debe verificar que los permisos le permitan leer desde dicho archivo, y luego el kernel lleva a cabo las instrucciones reales al disco para leer el archivo)
Se requiere tener privilegios de root para cambiar el permiso de un archivo. Con privilegios de root, el usuario puede acceder a cualquier archivo sin preocuparse por el permiso. Entonces, ¿existen relaciones entre la raíz y el kernel?
Respuesta1
Primero, una aclaración:
Se requiere tener privilegios de root para cambiar el permiso de un archivo.
Dehombre 2 chmodpodemos ver que la llamada al sistema chmod() devolverá EPERM (un error de permisos) si:
El UID efectivo no coincide con el propietario del archivo y el proceso no tiene privilegios (Linux: no tiene la capacidad CAP_FOWNER).
Esto generalmente significa que ustedcualquieradebe ser el propietario del archivo o el usuario root. Pero podemos ver que la situación en Linux podría ser un poco más complicada.
Entonces, ¿existen relaciones entre la raíz y el kernel?
Como señala el texto que citó, el kernel es responsable de verificar que el UID del proceso que realiza una llamada al sistema (es decir, el usuario con el que se ejecuta) puede hacer lo que solicita. Así, los superpoderes del root provienen del hecho de que el kernel ha sido programado para permitir siempre una operación solicitada por el usuario root (UID=0).
En el caso de Linux, la mayoría de las comprobaciones de permisos que se realizan verifican si el UID dado tiene los requisitos necesarios.capacidad. El sistema de capacidades permite un control más detallado sobre quién puede hacer qué.
Sin embargo, para preservar el significado tradicional de UNIX del usuario "root", un proceso ejecutado con el UID de 0 tiene todas las capacidades.
Tenga en cuenta que, si bien los procesos que se ejecutan como UID=0 tienen privilegios de superusuario, aún deben realizar solicitudes al kernel a través de la interfaz de llamada del sistema.
Por lo tanto, un proceso en el espacio de usuario, incluso ejecutándose como root, todavía está limitado en lo que puede hacer mientras se ejecuta en "modo de usuario" y el kernel se está ejecutando en "modo kernel" que en realidad son modos distintos de operación para la propia CPU. En el modo kernel, un proceso puede acceder a cualquier memoria o emitir cualquier instrucción. En el modo usuario (en las CPU x86, en realidad hay varios modos protegidos diferentes), un proceso solo puede acceder su propia memoria y solo puede emitir algunas instrucciones. Por lo tanto, un proceso de espacio de usuario que se ejecuta como root solo tiene acceso a las características del modo kernel que el kernel le expone.