Primero, una aclaración:
Requiere tener privilegios de root para cambiar el permiso a un archivo.
Desde man 2 chmod podemos 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).
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.
Entonces, ¿hay alguna relación entre la raíz y el núcleo?
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.