El doble factor de autenticación es una medida de seguridad que solicita un código de acceso, además de nuestra password habitual, a la hora de acceder a un determinado servicio. Vendría a ser como la hoja de coordenadas que algunos bancos emiten para que sus clientes utilicen banca online. Habitualmente los códigos son generados mediante un programa en el teléfono móvil del usuario.
A nivel técnico, la autenticación de doble factor estándar, usa una llave / token / hash que queda instalado en el servidor y de la cual se derivan después esos códigos de verificación que debe introducir el usuario. Las únicas partes que pueden derivar esos códigos son las que tengan conocimiento de esa llave. La llave (se le puede llamar de mil maneras, llave, token, hash, código,..) es generada a la hora de instalar el software de doble autenticación en el servidor y posteriormente también instalada en el/los dispositivo/s móvil/es (de forma escrita o mediante un código QR).
Lo explicado en esta guía sobre es perfectamente aplicable a cualquier distribución de GNU/Linux, no solo a Arch GNU/Linux.
Estándares de doble factor de autenticación: HOTP y TOTP.
Instalar libpam-google-authenticator (Arch).
yaourt -S libpam-google-authenticator
Editar modulo PAM del servidor SSH: /etc/pam.d/sshd (Se deben agregar las lineas al principio).
#%PAM-1.0 #auth required pam_securetty.so #disable remote root ###### Autenticacion de doble factor SSH (google authenticator) auth required pam_google_authenticator.so auth required pam_unix.so auth required pam_env.so ###### auth include system-remote-login account include system-remote-login password include system-remote-login session include system-remote-login
Editar la configuración del servidor SSHD (/etc/ssh/sshd_config) para que se pueda utilizar el doble factor.
# ChallengeResponseAuthentication no ChallengeResponseAuthentication yes
Generar la clave para google-authenticator en la cuenta del usuario que se desea acceso mediante doble factor. Se mostrará un código QR para facilitar la configuración del Token.
google-authenticator Do you want authentication tokens to be time-based (y/n) y https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/superman@cacotas.com%3Fsecret%3XBUIMTJF7QXH2TEGC [CODIGO QR] Your new secret key is: XBUIMTJF7QXH2TEGC Your verification code is 126102 Your emergency scratch codes are: 91190032 19049720 45080968 77125674 15290405 Do you want me to update your "/home/XXXX/.google_authenticator" file (y/n) y Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) n If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) n
Bases de HTOP y TOTP.
Recomendaciones.
Escanear el código QR con FreeOTP o bien introducir manualmente el “secret key” con FreeOTP u otra aplicación que siga los estándares. A partir de este momento se pueden generar ya desde el móvil los token de acceso que nos solicitará el servicio sshd al querer abrir una sesión SSH.
Reiniciar o recargar el servicio sshd y probar su funcionamiento.
systemctl reload sshd ssh superman@cacotas.com Verification code: Password: Last login: Tue Apr 14 23:51:13 2010 from ::1
Si se tiene configurado un servidor sshd con doble factor y no se desea tener que utilizar otros tokens en otras implementaciones, se puede utilizar fácilmente el mismo token en múltiples cuentas / servidores copiando $HOME/.google_authenticator.
Actualmente no se puede tener el acceso configurado mediante llaves SSH y que además se solicite el código de verificación de doble factor. Si se quiere tener acceso mediante llave ssh y cuando no se disponga de la misma, utilizar el doble factor, se debe configurar de esta manera el servidor sshd (/etc/ssh/sshd_config).
ChallengeResponseAuthentication yes
AuthenticationMethods publickey keyboard-interactive:pam
Descargar código fuente: https://github.com/google/google-authenticator/
Compilar e instalar google-authenticator
unzip google-authenticator-master.zip cd google-authenticator-master cd libpam/ ./bootstrap.sh ./configure --prefix=/usr make make install