En este artículo voy a explicar cómo implementar un acceso como root (superusuario) a través de SSH cuando el servidor sshd no lo permite (está deshabilitada la opción PermitRootLogin):

PermitRootLogin no

Por seguridad, es lógico que todo servidor SSH impida el acceso como root. Sin embargo, es posible lograr implementar un acceso como root, lo cual puede simplificar el acceso para tareas administrativas o la copia de archivos a través de SFTP hacia directorios donde un usuario común no tiene acceso (por ejemplo, directorios de aplicaciones y servicios).

Claro está que el mecanismo propuesto en este artículo es una configuración insegura, pero sirve a fines didácticos, para comprender que no basta con un simple PermitRootLogin no para impedir un acceso como root, sino que es posible evitar esta restrición con una simple configuración de sudo. Un ejemplo de cómo utilizar sudo con fines maliciosos.



Configuración

Para implementar este mecanismo de acceso como root es necesario crear un usuario ("backdoor" a modo de ejemplo) con una configuración específica de bash que le permita pasar inmediatamente a root al momento de iniciar sesión.

Crear el usuario "backdoor" y establecer una contraseña:

# useradd -c "Backdoor" -d /home/backdoor -m -s /bin/bash backdoor && passwd backdoor

Configurar sudo para que "backdoor" sólo (jaja) pueda cambiar a root y utilizar el servidor SFTP:

# echo "backdoor ALL = NOPASSWD: /bin/su - root" > /etc/sudoers.d/backdoor
# echo "backdoor ALL = NOPASSWD: /usr/lib/openssh/sftp-server" >> /etc/sudoers.d/backdoor
# chmod 0440 /etc/sudoers.d/backdoor

NOTA: en CentOS y derivados el binario del servidor sftp se encuentra en la ruta: /usr/libexec/openssh/sftp-server.

Luego hay que configurar el perfil de bash del usuario "backdoor" para que pase inmediatamente a ruperusuario.

En Debian y derivados:

# su - backdoor
$ echo >> .bashrc
$ echo "exec /usr/bin/sudo /bin/su - root" >> .bashrc
$ exit

En CentOS:

# su - backdoor
$ echo >> .bashrc
$ echo "/usr/bin/tty -s && exec /usr/bin/sudo /bin/su - root" >> .bashrc
$ exit

Finalmente es necesario crear un pequeño script para que corra el servidor SFTP como root para el usuario "backdoor".

En Debian y derivados:

# cat > /usr/local/bin/sftp-server.sh <<EOT 
#!/bin/bash

SUDO=""
if [ "\${USER}" == "backdoor" ] ; then
    SUDO="/usr/bin/sudo"
fi 

exec \${SUDO} /usr/lib/openssh/sftp-server "\$@"

EOT

En CentOS:

cat > /usr/local/bin/sftp-server.sh <<EOT 
#!/bin/bash

SUDO=""
if [ "\${USER}" == "backdoor" ] ; then
    SUDO="/usr/bin/sudo"
fi 

exec \${SUDO} /usr/libexec/openssh/sftp-server "\$@"

EOT

Una vez creado el script, otorgar permisos de ejecución:

# chmod +x /usr/local/bin/sftp-server.sh

Finalmente, configurar el subsistema SFTP en la configuración de SSH, para que utilice el script anterior:

# sed -i 's/Subsystem\(.*\)/#Subsystem\1\nSubsystem\tsftp\t\/usr\/local\/bin\/sftp-server.sh/' /etc/ssh/sshd_config

Verificación del acceso

emi@hal9000:~ % ssh -p 2222 backdoor@linuxito.com
backdoor@linuxito.com's password: 
Linux linuxito 3.2.0-4-amd64 #1 SMP Debian 3.2.81-1 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Sep  8 11:37:20 2016 from hal9000
root@linuxito:~# id
uid=0(root) gid=0(root) grupos=0(root)
root@linuxito:~# exit
logout
Connection to linuxito.com closed.
emi@hal9000:~ %

Al utilizar exec en la configuración del perfil bash se evita abrir una subshell, por lo que al ejecutar exit se cierra no sólo la sesión como root sino también la sesión SSH como "backdoor".


Tal vez pueda interesarte


Compartí este artículo