Cómo usar Run0 en Linux

Una fotografía que muestra un primer plano de la pantalla de un portátil.

Run0 es un programa innovador de escalada de privilegios para distribuciones de Linux basadas en Systemd. Proporciona una alternativa ligera y “sin configuración” a las aplicaciones de escalada tradicionales como sudo y doas. Aquí, te mostramos lo básico sobre cómo usar Run0 para escalar comandos en tu sistema Linux.

Tabla de Contenidos

  • Cómo ejecutar programas como un usuario diferente
  • Cómo cambiar a la shell de un usuario diferente
  • Cómo personalizar la sesión actual de Run0
  • Cómo agrupar sesiones de Run0
  • Cómo ejecutar comandos en contenedores Systemd usando Run0

Antes de eso, puede que quieras averiguar qué es Run0 y cómo se diferencia de sudo.

Cómo ejecutar programas como un usuario diferente

Uno de los usos más comunes de las aplicaciones de escalada de privilegios es ejecutar comandos como el usuario root. En este sentido, acceder al usuario root en Run0 requiere agregar run0 delante del comando que deseas ejecutar. Por ejemplo, lo siguiente crea una nueva carpeta en un directorio que solo es accesible por root:

run0 mkdir/etc/maketecheasier

Esto mostrará un aviso de contraseña en la CLI o una pequeña ventana GUI pidiendo la contraseña de tu usuario actual.

Una captura de pantalla que muestra el aviso de contraseña para Run0.

Al igual que sudo y doas, Run0 también puede cambiar a un usuario no root al ejecutar comandos. Para hacer esto, agrega la bandera --user seguida del nombre del usuario con el que deseas ejecutar el comando:

run0 --user=alice /home/alice/alice-program.sh

Proporciona la contraseña para el usuario al que estás cambiando, luego presiona Enter.

Cómo cambiar a la shell de un usuario diferente

Otra parte clave de una aplicación de escalada de privilegios es su capacidad para llevar al usuario a una shell root. Esto te da la capacidad de interactuar con tu sistema como el usuario root y ejecutar comandos más complejos desde la CLI.

En Run0, puedes hacer esto ejecutando el programa sin argumentos adicionales.

Al igual que con la ejecución de programas como root, también es posible usar Run0 con la bandera --user para iniciar una sesión de shell como un usuario específico:

run0 --user=alice

Además, run0 te permite crear sesiones de shell con permisos de grupo temporales para usuarios no root. Esto es útil si deseas acceder a carpetas que están bloqueadas detrás de un cierto usuario y grupo sin cambiar a root.

Por ejemplo, el siguiente comando otorga al usuario “alice” acceso temporal al grupo “www-data”:

run0 --user=alice --group=www-data

También puedes usar la bandera --chdir para forzar un cambio de directorio al cambiar a una nueva sesión de shell:

run0 --user=alice --chdir=/home/alice/Documents

Bueno saber: aprende más sobre tu máquina Linux explorando cómo cambiar recursivamente los permisos de archivos en tu sistema de archivos.

Cómo personalizar la sesión actual de Run0

El mayor punto de venta de Run0 es que no utiliza setuid (SUID) para manejar acciones de superusuario. En cambio, se basa en systemd-run, que crea TTYs pseudo-aislados para ejecutar comandos como root.

Una consecuencia de este enfoque es que Systemd trata cada shell de Run0 como una unidad discreta que se ejecuta bajo el administrador de servicios. Esto te permite personalizar tu proceso de shell root, a diferencia de las aplicaciones de escalada de privilegios tradicionales.

Para agregar una etiqueta a tu shell root, usa la bandera --unit seguida del nombre que deseas usar:

run0 --unit=maketecheasier

También puedes agregar una descripción personalizada a tu shell root agregando la bandera --description:

run0 --unit=maketecheasier --description="¡hola, mundo!"

Verifica que hayas aplicado correctamente tus detalles listando el nombre personalizado de tu shell root usando systemctl:

systemctl list-units maketecheasier.service

Una terminal que muestra los detalles de la unidad personalizada de Systemd.

Por defecto, Run0 cambia el color de fondo de tu shell root a rojo. Si bien esto es un indicador visual útil, puede ser distractor si estás usando un tema claro en tu sistema.

Para cambiar esto, usa la bandera --background seguida de un valor entre 40-49:

run0 --unit=maketecheasier --background=42

Por último, también puedes ajustar el “nivel de amabilidad” de tu shell root. Este es un valor entre -20 y 19 que determina si tu kernel priorizará tu proceso sobre otros.

Para darle a tu shell root la máxima prioridad, usa la bandera --nice con el valor “-20”:

run0 --nice=-20

Nota: la bandera --nice también funciona para comandos individuales de Run0. Por ejemplo, puedes usar run0 --nice=-20 vim para ejecutar Vim con una mayor prioridad de CPU.

Cómo agrupar sesiones de Run0

Además de poder personalizar cada shell root de Linux, también puedes usar Run0 para agruparlas en un slice de Systemd. Este es un constructo especial que permite a tu máquina ajustar la demanda de recursos para procesos sin afectar el resto de tu sistema.

Para crear una shell root en un slice diferente, ejecuta la bandera --slice seguida del nombre del slice al que deseas mover:

run0 --slice=maketecheasier

Nota: puedes proporcionar un nuevo nombre en la bandera --slice para crear un nuevo slice de Systemd.

Confirma que tu nueva sesión se está ejecutando bajo tu nuevo slice listando los procesos dentro de él:

systemctl status maketecheasier.slice

Una terminal que muestra los detalles del slice personalizado de Systemd.

También puedes usar la bandera --slice-inherit para agrupar tu nuevo slice junto con el slice del que provino Run0. Esto es útil si ya has agrupado tus shells en sus respectivos slices y solo deseas agregar una nueva shell:

run0 --slice=maketecheasier --slice-inherit

Cómo ejecutar comandos en contenedores Systemd usando Run0

Systemd-nspawn es un programa especial que puede crear y gestionar contenedores ligeros de Linux similares a Docker. Siendo parte del conjunto de Systemd, también puedes usar Run0 para ejecutar comandos en tus contenedores nspawn desde tu máquina host.

Comienza listando los contenedores disponibles de Systemd-nspawn en tu sistema:

machinectl list

Una terminal que muestra una lista de los contenedores disponibles de Systemd-nspawn.

Ejecuta el siguiente comando para crear una carpeta dentro del directorio raíz de tu contenedor:

run0 run0 --machine=maketecheasier --user=root mkdir/hello-world

Nota: actualmente hay un error en Run0 donde no logra elevar privilegios al ejecutarse con la bandera --machine. Puedes solucionar esto agregando un segundo comando run0 para forzar una escalada de privilegios.

También es posible cambiar a la shell root de tu contenedor usando Run0:

run0 run0 --machine=maketecheasier --user=root

Confirma que ahora estás ejecutando dentro de tu contenedor imprimiendo el nombre de host de tu sesión de terminal:

echo$HOSTNAME

Una terminal que muestra el proceso de cambio del sistema local al contenedor Systemd-nspawn.

Aprender a usar Run0 para ejecutar y gestionar comandos root en Linux es solo la punta del iceberg cuando se trata de aplicaciones de escalada de privilegios. Profundiza en el complejo mundo observando las diferencias entre su, sudo y sudo -s.

Crédito de la imagen: Xavier Cee a través de Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.