Inicia sesión con tu cuenta de para monitorear tus comments, sus respuestas y estatus desde tu dashboard personal ツ

Xenode Systems




Proteger acceso SSH con Google Authenticator en Linux

Por: [email protected] (Manuel Escudero)

Hace tiempo en mi artículo sobre los 6 pasos fundamentales para montar un VPS  les hablaba de la autenticación SSH sin contraseña vía llave RSA como método de seguridad para nuestros servidores. Aunque esta suele ser una muy buena medida de seguridad en contra de atacantes externos y otras amenazas, he aquí una más que les puede resultar interesante para combinarla con la ya antes mencionada: Autenticación SSH a 2 pasos con el Google Authenticator.

El otro día les hablé ya del Google Authenticator y cómo implementarlo en su sitio web y/o app. Básicamente se trata de una aplicación móvil OpenSource que nos facilita la implementación de autenticación a 2 pasos (two factor auth) en una variedad de appliances que queramos lanzar. Para implementarla en nuestro servidor SSH entonces, necesitaremos:


  • Un smartphone: Android, iOS y/o Blackberry
  • El Google Authenticator instalado en dicho smartphone (está en las app stores)
  • libpam-google-authenticator en el servidor


El proceso de autenticación y/o generación de claves (totp tokens) se mantiene en sandbox privado entre tu teléfono y tu servidor sin pasar por servidores externos o algo parecido. Es por esto que a continuación veremos cómo libpam-google-authenticator nos proveerá incluso códigos de rescate en caso de perder acceso a nuestro teléfono para acceder a nuestro servidor.

NOTA: Para este tutorial, usaré Fedora/CentOS/RHEL y Ubuntu como distro(s) de referencia. Para cualquier otra distro el proceso debería ser el mismo mientras se instalen los paquetes equivalentes con el gestor de paquetes correcto según el caso. Los comandos que verán a continuación se deben ejecutar (obviamente) en el servidor deseado.

1) Instalando dependencias

Fedora/CentOS/RHEL

sudo yum install pam-devel make gcc-c++ wget

Ubuntu y Derivados

sudo apt-get install libpam0g-dev make gcc-c++ wget

2) Instalar el Módulo PAM para Google Authenticator

1. cd ~
2. wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2
3. tar -xvf libpam-google-authenticator-1.0-source.tar.bz2
4. cd libpam-google-authenticator-1.0
5. make
6. sudo make install

3) Configuración TOTP

Esta es la parte un tanto más compleja de la situación porque debe hacerse en base a cómo esté configurado tu servidor SSH (más que nada con qué usuario piensas acceder). En mi tutorial de los 6 tips fundamentales para lanzar un VPS les enseñé que el acceso SSH de root siempre debe mantenerse deshabilitado y únicamente debemos permitir el acceso remoto a un usuario estándar específico. Siguiendo esa lógica de seguridad, nos basaremos en la idea de que ese usuario se llama user en nuestro ejemplo para continuar con este paso... Corremos entonces:

su - 'user' -c '/usr/local/bin/google-authenticator'

Este comando nos pedirá una contraseña (la del usuario en cuestión), preguntará si queremos que los tokens se basen en tiempo (respondemos que sí), nos mostrará un QR o bien, un enlace HTTPS a un QR (que debemos escanear con el Google Authenticator para añadir la computadora) dándonos también acceso a una serie de códigos de rescate que debemos anotar (preferentemente en papel) y almacenar en algún lugar seguro. Finalmente hará varias preguntas de seguridad importantes... Responder a todas ellas con un y (Sí) nos dejará el setup más confiable posible:


4) Configuración SSH

Ahora necesitamos que la computadora haga uso de nuestro módulo PAM para autorizar/verificar el acceso SSH. Para habilitar dicho comportamiento corremos:

sudo nano /etc/pam.d/sshd

Y en el archivo que nos saldrá añadimos la siguiente línea como primer parámetro:

auth       required     pam_google_authenticator.so

He aquí un ejemplo:


Guardamos con Ctrl+O y luego Ctrl+X para después correr:

sudo nano /etc/ssh/sshd_config

Y en el archivo que nos saldrá, cambiamos la variable ChallengeResponseAuthentication de no a yes. Ejemplo:


Guardamos, salimos y finalmente reiniciamos nuestro servicio de SSH con:

sudo service sshd restart y/o sudo /etc/init.d/sshd restart

Y a partir de hoy cada que queramos loguearnos vía SSH a esta máquina, se nos pedirá nuestro token generado por el Google Authenticator (aparte de cualquier otro elemento de autorización que hayamos establecido previamente):


Comentarios...

Selecciona tu Meme

Insertar Code Snippet
Gist it!