Anteriormente demostré cómo era posible implementar un acceso SSH como root, a pesar de que estuviera deshabilitada la opción PermitRootLogin en la configuración del demonio. Ahora voy a demostrar cómo es posible lograr el mismo comportamiento en sistemas FreeBSD y OpenBSD utilizando doas en vez de sudo.

OpenBSD utiliza un reemplazo para sudo llamado doas, el cual es más pequeño y simple.

Instalación de doas en FreeBSD

Esta herramienta está incluida por defecto en los sistemas OpenBSD, y puede instalarse en sistemas FreeBSD desde el port security/doas:

# portsnap fetch update
# portmaster security/doas

Luego es necesario crear el archivo de configuración:

# touch /usr/local/etc/doas.conf 
# chown root:wheel /usr/local/etc/doas.conf
# chmod 0640 /usr/local/etc/doas.conf

Creación del usuario "backdoor"

El primer paso en la configuración de este esquema consiste en crear el usuario "backdoor".

En FreeBSD a través del comando pw:

# pw useradd backdoor -c "Backdoor" -g operator -m -M 0750 -s /bin/tcsh

En OpenBSD se hace igual que en GNU/Linux, pues utiliza useradd, aunque la shell por defecto es ksh (KornShell):

# useradd -c "Backdoor" -m -d /home/backdoor -s /bin/ksh backdoor

Luego se genera la contraseña, en ambos sistemas con la herramienta passwd, como en cualquier sistema Unix:

# passwd backdoor

Configuración de doas

Editar el archivo de configuración de doas (/usr/local/etc/doas.conf en FreeBSD):

# vi /etc/doas.conf

En ambos sistemas, la ruta al binario del servidor SFTP es la misma:

permit nopass backdoor cmd /usr/bin/su
permit nopass backdoor cmd /usr/libexec/sftp-server

Se observa que la configuración de doas es muy simple, básicamente se indica qué usuario puede ejecutar qué comando.

Configuración del perfil de login de "backdoor"

Cambiar al usuario "backdoor":

# su - backdoor

En FreeBSD, la shell tcsh levanta la configuración de login desde el archivo ~/.login:

# vi .login

Agregar la siguiente línea al final del archivo:

exec /usr/local/bin/doas /usr/bin/su - root

La ruta a doas está bajo /usr/local, pues es instalado desde los ports.

En OpenBSD se debe editar el archivo ~/.profile (man ksh):

$ vi .profile

La ruta cambia pues doas es parte del sistema base:

exec /usr/bin/doas /usr/bin/su - root

Guardar y cerrar la sesión como "backdoor":

$ exit

Creación del script para el servicio SFTP:

A continuación es necesario crear el script para correr el servicio SFTP como root:

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

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

exec \${DOAS} /usr/libexec/sftp-server "\$@"
EOT

El contenido es idéntico para ambos sistemas, a excepción de la ruta a doas, que en sistemas FreeBSD debe ser cambiada a /usr/local/bin/doas:

   DOAS="/usr/local/bin/doas"

Luego, dar permisos de ejecución la script:

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

Configuración del servicio SSH

En la configuración del subsistema SFTP, hacer que apunte al script anteriormente creado:

# sed 's/\(Subsystem.*sftp.*\)\(\/usr\/libexec\/sftp-server\)/#\1\2\
\1\/usr\/local\/bin\/sftp-server.sh/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new
# mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old
# mv /etc/ssh/sshd_config.new /etc/ssh/sshd_config

Reiniciar el servicio SSH. En FreeBSD:

# service sshd restart

En OpenBSD:

# rcctl restart sshd

Referencias

man tcsh
man ksh
man doas

tcsh(1) - FreeBSD Man Pages

ksh(1) - OpenBSD manual pages

doas(1) - OpenBSD manual pages


Tal vez pueda interesarte


Compartí este artículo