En Linux, sudo
y su
pertenecen a NEITHER to capability-based security,NOR to Protection Rings
!
La seguridad basada en capacidades es un software o programa específico con un nivel de implementación mínimo (sudo y su no comparten ninguna capacidad y tienen y están muy lejos del principal de privilegios mínimos), ¡mientras que Anillos de protección aplica todo desde el nivel del procesador / CPU (sudo y su no tienen nada que ver con el procesador o la arquitectura jerárquica)!
Sudo se usa para ejecutar un comando en particular con permisos de raíz. Lo interesante es que cuando usa sudo para un comando en particular, el sistema le solicita la contraseña del usuario actual. Una vez que ingrese la contraseña, el comando se ejecuta con privilegios de raíz.
Su se usa para cambiar a cualquier cuenta de usuario. El sistema solicita la contraseña correspondiente al usuario cambiado. Si se usa su sin ninguna opción, se realiza un cambio a la cuenta de usuario root. En este caso, el sistema solicita la contraseña del usuario root.
Por ejemplo, al editar un archivo de sistema, generalmente necesitamos sudo o su para
Cambiar temporalmente al usuario root. ¿Este ejemplo pertenece a
¿Seguridad basada en capacidades, o para anillos de protección?
No cambiamos al usuario root, pero solo aumentamos nuestro acceso / privilegio a ciertas acciones específicas y se ejecutan con privilegios de root. El proceso aún se ejecutaría bajo el mismo espacio de usuario, ¡la única diferencia de que el privilegio ha sido otorgado al de root! En realidad, todas estas cosas de accesibilidad se asignan al archivo /etc/sudoers
, donde el acceso a cada una de las tareas, como la ejecución de ciertas aplicaciones, la modificación de la configuración del sistema, etc., se enumeran para cada sudoer. No todos los usuarios se mantienen en la lista de sudoers, ¡puede que haya varios usuarios excluidos de esto para la seguridad del sistema!
Entonces, cuando ejecutamos sudo
OR su
, implica una llamada del sistema al kernel, es decir, la llamada al sistema setuid()
se invoca al kernel de Linux y luego el uid del usuario se establece en 0 (el de root) y, por lo tanto, aparece el indicador #
, ¡todo se está haciendo en el mismo espacio de usuario y modo de usuario del usuario y no en el espacio de usuario de la raíz!