Niveles de privilegio
100%

Kernel · Lección 2

Niveles de privilegio

Aprende cómo los privilegios del procesador separan la ejecución de los usuarios de la ejecución de confianza del kernel.

Los procesadores proporcionan modos de privilegio que restringen las instrucciones delicadas y el acceso a la memoria. Linux utiliza este límite del hardware para que los fallos de aplicaciones ordinarias no puedan sobrescribir directamente la memoria del kernel ni reconfigurar dispositivos. El kernel controla las transiciones hacia la ejecución privilegiada.

Modo de usuario

Un proceso normal se ejecuta en modo de usuario dentro de su espacio de direcciones virtuales. Puede realizar cálculos libremente y acceder a las asignaciones de memoria que le haya concedido el kernel, que pueden ser grandes; modo de usuario no significa «solo una pequeña cantidad de memoria». No puede acceder directamente a memoria física arbitraria, a las asignaciones privadas de otro proceso ni a los controles privilegiados del procesador.

Las tablas de páginas y los bits de protección imponen el control de acceso a la memoria. Si un hilo hace referencia a una dirección no válida o no permitida, el procesador transfiere el control al kernel, que puede resolver un fallo de página válido o entregar una señal como SIGSEGV.

¿A qué memoria puede acceder normalmente de forma directa un proceso en modo de usuario?

Modo kernel

El modo kernel permite ejecutar instrucciones privilegiadas y acceder a las asignaciones protegidas del kernel necesarias para gestionar la memoria, planificar, procesar interrupciones y controlar dispositivos. En x86, esta separación de Linux suele describirse como ring 0 para el kernel y ring 3 para los procesos de usuario. Linux normalmente no utiliza los rings 1 y 2 para el aislamiento ordinario de procesos.

Otras arquitecturas emplean nombres y mecanismos distintos, como los niveles de excepción. La virtualización añade relaciones entre hipervisor e invitados que no encajan en un dibujo sencillo de dos anillos. La idea esencial es el privilegio controlado, no los números de los anillos de x86 en sí mismos.

¿Qué anillo de protección de x86 ejecuta normalmente el kernel de Linux?

Transiciones controladas

Varios eventos transfieren el control a un punto de entrada del kernel:

  • una instrucción de llamada al sistema solicita un servicio del kernel
  • una excepción informa de una condición como un fallo de página o una instrucción no válida
  • una interrupción de hardware informa de un evento externo

El procesador guarda el contexto de ejecución, cambia el privilegio según los mecanismos de entrada configurados y comienza a ejecutar código de confianza del kernel. El kernel valida la solicitud y el estado, realiza o rechaza el trabajo y después vuelve al modo de usuario cuando corresponde.

La aplicación no se convierte temporalmente en código del kernel. La CPU ejecuta un manejador del kernel en nombre del hilo, con pilas y asignaciones controladas por el kernel.

¿Qué sucede durante la transición de una llamada al sistema?

El privilegio de la CPU no es la identidad del usuario

Una aplicación que se ejecuta como el usuario root de Linux normalmente sigue haciéndolo en modo de usuario. El UID 0 influye en las comprobaciones de autorización del kernel, pero no permite que sus instrucciones accedan directamente a la memoria del kernel. A la inversa, el código del kernel se ejecuta en modo privilegiado independientemente del usuario cuya llamada al sistema haya provocado su ejecución.

Las capacidades, los espacios de nombres, seccomp, los módulos de seguridad y los cgroups restringen aún más lo que un proceso puede solicitar. Esta política por capas es independiente del límite entre los modos de usuario y kernel impuesto por el hardware.

¿Qué afirmación compara correctamente la identidad root y el modo kernel?

Por qué importa este límite

El límite reduce los daños que pueden causar los errores ordinarios y proporciona un punto para las comprobaciones de acceso, pero las vulnerabilidades del kernel y los módulos maliciosos pueden superarlo. Mantén el kernel y el firmware actualizados mediante canales de confianza, reduce al mínimo el código privilegiado y evita cargar módulos que no sean de confianza.

Los problemas de ejecución especulativa y los canales laterales también demuestran que el aislamiento del hardware requiere mitigaciones continuas; estar en un «anillo distinto» es una base, no una prueba de seguridad completa.

¿Garantiza la separación entre modo de usuario y modo kernel la seguridad completa del sistema?

Lección completada

Has completado Niveles de privilegio

Ahora puedes distinguir los privilegios de ejecución del hardware de la autoridad de una cuenta de Linux.

  • Relaciona el modo de usuario con los espacios de direcciones virtuales protegidos.

  • Relaciona el modo kernel con las instrucciones y asignaciones privilegiadas.

  • Trata las llamadas al sistema, las excepciones y las interrupciones como entradas controladas.

  • Distingue la autorización del UID 0 de la ejecución en ring 0.

  • Considera los modos de privilegio como una capa de un diseño de seguridad más amplio.

Guarda tu progreso

Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.

Crear una cuenta gratuita
Siguiente Lección
Volver a Kernel