Basado en parte de la primera respuesta de esta pregunta :
leer desde un archivo (el núcleo debe verificar que los permisos le permitan leer desde dicho archivo, y luego el núcleo lleva a cabo las instrucciones reales en el disco para leer el archivo)
Requiere tener privilegios de root para cambiar el permiso a un archivo. Con el privilegio de root, el usuario puede acceder a cualquier archivo sin preocuparse por el permiso. Entonces, ¿hay alguna relación entre la raíz y el núcleo?
permissions
kernel
root
Ron Vince
fuente
fuente
Respuestas:
Primero, una aclaración:
Desde man 2 chmod podemos ver que la llamada al sistema chmod () devolverá EPERM (un error de permisos) si:
Normalmente, esto significa que o bien tiene que 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.
Como ha señalado el texto que ha citado, el núcleo es responsable de verificar que el UID del proceso que realiza una llamada al sistema (es decir, el usuario con el que se está ejecutando) puede hacer lo que está pidiendo. Por lo tanto, los superpoderes de 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 diversas verificaciones de permisos que ocurren verifican si el UID dado tiene la capacidad necesaria . 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 "raíz", 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 núcleo a través de la interfaz de llamada del sistema.
Por lo tanto, un proceso de espacio de usuario, incluso ejecutándose como root, todavía está limitado en lo que puede hacer, ya que se ejecuta en " modo de usuario " y el kernel se ejecuta en " modo de kernel ", que en realidad son modos de operación distintos para la CPU. En modo kernel, un proceso puede acceder a cualquier memoria o emitir cualquier instrucción. En el modo de usuario (en las CPU x86 en realidad hay varios modos protegidos diferentes), un proceso solo puede acceder a su propia memoria y solo puede emitir algunas instrucciones. Por lo tanto, un proceso de espacio de usuario que se ejecuta como root todavía solo tiene acceso a las funciones del modo kernel que el kernel le expone.
fuente