Cómo instalar sudo 1.9 y usar la nueva herramienta de políticas


El sistema sudo está a punto de sufrir algunos cambios radicales. Descubra cómo comenzar a trabajar con el nuevo sistema de políticas, para hacer que el sudo sea aún más poderoso.

<a href = "https://tr1.cbsistatic.com/hub/i/r/2016/06/27/e58d25a2-c851-4976-833e-babc6df94616/resize/770x/5b924c310205d40304d06230943dbe63/linuxadminhero.jpg" target = " _blank "data-component =" modalEnlargeImage "data-headline ="

"data-credit =" Imagen: Jack Wallen "rel =" noopener noreferrer nofollow ">linuxadminhero.jpg

Imagen: Jack Wallen

El sistema sudo en Linux es una forma increíble de controlar quién puede asumir tareas administrativas y esta herramienta ha funcionado bien durante mucho tiempo. Sin embargo, como es, sudo ha sufrido bajo el peso de muchas críticas. Uno de los mayores problemas es el control granular. Por ejemplo, si le otorga a un usuario el derecho de usar sudo en un sistema, siempre puede emitir el comando:

sudo rm -rf /

El comando anterior eliminará todo en su sistema. Cada. Cosa.

Ejecuté este comando en los sistemas solo para ver qué sucede y es algo sorprendente de ver: ver todo desaparecer en una computadora.

Por supuesto, en las distribuciones modernas de Linux, ejecutar el comando anterior generará una advertencia, indicando que es peligroso operar el comando recursivamente en /. Sin embargo, también le indica cómo evitar la seguridad, utilizando la opción –no-preserve-root.

Entonces, incluso con la advertencia, sudo permitirá la destrucción total de una máquina.

Hasta sudo 1.9.

Con sudo 1.9, el sistema recibe una serie de mejoras. Una de esas mejoras es la aprobación del comando justo a tiempo, que permite que los complementos de terceros ayuden a mejorar la seguridad, a través de políticas.

Quiero demostrar cómo usar el nuevo sistema de políticas, lo que hace que sea bastante fácil controlar qué comandos pueden ejecutar los usuarios con sudo.

VER: Conciencia de seguridad y política de capacitación (TechRepublic Premium)

Lo que necesitarás

Lo demostraré en Ubuntu 18.04. Por el momento, sudo 1.9 puede instalarse en Ubuntu 20.04, pero el sistema de complemento no funciona. Por eso, nos quedaremos con la versión anterior de LTS.

Sudo 1.9 es instalable en otras distribuciones, pero el único en el que he probado esto es Ubuntu 18.04.

Cómo instalar sudo 1.9

Lo primero que debes hacer es instalar sudo 1.9. Sin embargo, antes de hacerlo, le recomiendo que se asegure de tener acceso a la cuenta raíz. Si no haces esto, podrías terminar con un sistema de sudo roto. Lo más probable es que lo haga en un entorno de prueba, por lo que debería estar bien darle una contraseña al usuario root en Ubuntu. Para hacer esto, abra una ventana de terminal y emita el comando:

sudo passwd root

Se le pedirá que ingrese y verifique la nueva contraseña.

Ahora, de vuelta en la ventana de terminal, descargue los archivos .deb necesarios con los siguientes comandos:

wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo_1.9.0-1_ubu1804_amd64.deb
wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo-ldap_1.9.0-1_ubu1804_amd64.deb
wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo-logsrvd_1.9.0-1_ubu1804_amd64.deb
wget https://www.sudo.ws/sudo/dist/packages/1.9.0/sudo-python_1.9.0-1_ubu1804_amd64.deb

Instale estos paquetes con el comando:

sudo dpkg -i *.deb

Una vez que se complete la instalación, estará listo para realizar la prueba.

Cómo probar el complemento de Python

Lo que vamos a hacer es probar el nuevo módulo de Python que evitará que todos los usuarios (no root) ejecuten cualquier comando que no sea id. Esto es increíblemente limitante, pero le muestra el poder del nuevo sistema.

Para hacer esto, primero cambie al usuario root con el comando:

su

Cree una nueva política con el comando:

nano /root/policy.py

En ese archivo, pegue lo siguiente:

import sudo
class SudoPolicyPlugin(sudo.Plugin):
    def check_policy(self, argv, env_add):
        cmd = argv(0)        # the first argument is the command name
        if cmd != "id":      # Example for a simple reject:
            sudo.log_error("You are not allowed to run this command!")
            return sudo.RC.REJECT
        command_info_out = ( # setup command to execute
            "command=/usr/bin/id",  # Absolute path of command
            "runas_uid=0",          # The user id
            "runas_gid=0")          # The group id
        return(sudo.RC.ACCEPT, command_info_out, argv, env_add)

Guarde y cierre el archivo.

La parte importante del código anterior es:

if cmd != "id":      # Example for a simple reject:
sudo.log_error("You are not allowed to run this command!")
return sudo.RC.REJECT

Eso efectivamente dice que si un comando no es id, imprime el error "¡No tienes permiso para ejecutar este comando!" Finalmente, usa RC.REJECT para rechazar cualquier comando que no sea id.

Ahora necesitamos habilitar esta política. Abra el archivo de configuración de sudo con el comando:

nano /etc/sudo.conf

En ese archivo, busque esta sección:

Plugin sudoers_policy sudoers.so
Plugin sudoers_io sudoers.so

Comente la primera línea y agregue la nueva línea, para que se vea así:

#Plugin sudoers_policy sudoers.so
Plugin sudoers_io sudoers.so
Plugin python_policy python_plugin.so ModulePath=/root/policy.py ClassName=SudoPolicyPlugin

Guarde y cierre el archivo.

Cómo probar la nueva política

Ahora debe abrir una nueva terminal o SSH en la máquina con una nueva instancia. Una vez que hayas hecho eso, ejecuta el comando:

sudo ls

Luego verá que ya no puede ejecutar el comando (Figura A)

Figura A

<a href = "https://tr4.cbsistatic.com/hub/i/r/2020/05/20/b1ee38fa-8736-4a4b-b257-430a0480cbd0/resize/770x/0b364a9a5c38ea954a146a9f3660cc4c/sudo19a.jpg" target = " _blank "data-component =" modalEnlargeImage "data-headline ="

Ejecutar cualquier comando pero id está prohibido con sudo 1.9.

"data-credit =" "rel =" noopener noreferrer nofollow ">sudo19a.jpg "src =" https://tr4.cbsistatic.com/hub/i/r/2020/05/20/b1ee38fa-8736-4a4b-b257-430a0480cbd0/resize/770x/0b364a9a5c38ea954a146a9f3660cc4c/sudo19a.jpg

Ejecutar cualquier comando pero id está prohibido con sudo 1.9.

Sin embargo, si emite el comando id, verá que funciona (Figura B)

Figura B

<a href = "https://tr2.cbsistatic.com/hub/i/r/2020/05/20/fe807000-83aa-4733-9db9-49922b5bd092/resize/770x/fb3a5d771aaed4826d3c981a2108a668/sudo19b.jpg" target = " _blank "data-component =" modalEnlargeImage "data-headline ="

El comando id todavía funciona.

"data-credit =" "rel =" noopener noreferrer nofollow ">sudo19b.jpg "src =" https://tr2.cbsistatic.com/hub/i/r/2020/05/20/fe807000-83aa-4733-9db9-49922b5bd092/resize/770x/fb3a5d771aaed4826d3c981a2108a668/sudo19b.jpg

El comando id todavía funciona.

La advertencia a esto (y por qué tenía que darle una contraseña al usuario root) es que es increíblemente limitante. Esta política se basa en example_policy_plugin.py, donde notarás esta línea:

_allowed_commands = ("id", "whoami")

Siempre puede emplear el script example_policy_plugin.py y agregar cualquier comando que desee permitir allí (para que esto sea menos restrictivo). Si usa example_policy_plugin.py, asegúrese de cambiar la entrada de política en /etc/sudo.conf.

Y así es como hace uso del nuevo sistema de políticas en sudo 1.9. Este cambio está llegando a un sudo cerca de usted, así que asegúrese de ponerse al día antes de que se desate en la distribución de Linux que elija.

Ver también



Enlace a la noticia original