Los permisos de root y el modo kernel no son lo mismo. Los programas con acceso Root pueden acceder a parte del kernel, pero Root no es el kernel en sí.
El modelo de usuario de Android (y Linux) tiene un conjunto de usuarios, cada uno de los cuales forma parte de un conjunto de grupos. Estos grupos se utilizan para gestionar qué usuarios tienen acceso a qué. Por ejemplo, en Linux puedes configurar todos los dispositivos de impresión para que sean propiedad del grupo de impresión, de modo que sólo los usuarios que forman parte del grupo de impresión puedan acceder a las impresoras.
En Android cada aplicación tiene su propia cuenta de usuario para evitar que las aplicaciones accedan a los datos de las demás.
Entre todos estos usuarios, hay uno especial: Root. Este es el usuario con el mayor conjunto de permisos, también llamado "superusuario". Básicamente, todas las comprobaciones de permisos están deshabilitadas para este usuario. Root puede hacer cosas como cambiar la propiedad de los archivos, añadir usuarios a los grupos, gestionar los componentes del sistema y mucho más.
El modo Kernel es ligeramente diferente. Cuando un sistema basado en Linux arranca, el kernel es lo primero que carga el gestor de arranque. El kernel se encarga de procesar los comandos del sistema ("escribir byte x en el archivo y", "listar todos los dispositivos conectados al bus USB"). También es donde residen muchos controladores, que ayudan al sistema a entender cómo comunicarse con un dispositivo.
Tras la inicialización, el kernel inicia un programa en modo usuario. Los programas que se ejecutan en este modo no pueden acceder directamente a la memoria de los dispositivos, no pueden modificar las tablas de páginas, básicamente no pueden hacer nada de lo que se supone que hace el núcleo. La única manera de ejecutar un comando del sistema es pasando por el kernel, y el kernel decide si un programa puede hacerlo o no.
En Android, el núcleo inicia un programa de inicialización que, a su vez, pone en marcha algunos procesos de fondo y el sistema Android con el que se puede interactuar.
El núcleo decide a qué usuario se le permite ejecutar ciertas funciones del sistema. Muchas funciones del sistema, como montar una partición para hacerla escribible, sólo son accesibles para los programas que se ejecutan como Root. Root puede contactar y controlar el kernel, pero al final el kernel decide lo que Root puede y no puede hacer.
Así que: generalmente el modo kernel se refiere al código que se ejecuta dentro del kernel, mientras que Root se refiere a los permisos que tiene un programa.
En aras de la claridad, estoy ignorando herramientas como SELinux, que está diseñado para limitar los archivos a los que pueden acceder los programas que se ejecutan como Root. Esta es una medida de seguridad para que incluso si un programa del sistema que se ejecuta como Root es explotado y comienza a ejecutar código de los hackers, no puede comprometer el sistema. Esto se hace utilizando un módulo especial en el kernel.
0 votos
Un usuario Root puede utilizar todas las llamadas del sistema proporcionadas por el kernel (API) sin ninguna restricción, mientras que al ejecutarse en modo kernel, el kernel puede literalmente, hacer cualquier cosa Desde las operaciones a nivel de bits hasta el control directo del hardware y la memoria.