===== Autenticación SSH de doble factor con Google Authenticator en Arch GNU/linux =====
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**: [[https://tools.ietf.org/html/rfc4226|HOTP]] y [[https://tools.ietf.org/html/rfc6238|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**.
- Counter-based (HOTP) verification: El token de acceso es válido hasta que se genere el siguiente.
- Time-based (TOTP) verification: El token de acceso es válido solo un determinado tiempo
**Recomendaciones**.
* Instalar [[https://fedorahosted.org/freeotp/|FreeOTP]] en Android o IOS (Aplicación OTP open source).
* Utilizar TOTP (por defecto) en vez de HOTP.
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
===== Usar la misma clave para el doble factor en múltiples servidores =====
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.
===== Acceso mediante llaves SSH y doble factor =====
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
===== Instalar Google Authenticator en la Raspberry (ARM) =====
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