Google Authenticator (Español)
Google Authenticator proporciona un procedimiento de autenticación de dos pasos que utiliza códigos de acceso de un solo uso (OTP). La aplicación generadora de OTP está disponible para iOS, Android y Blackberry. El mecanismo de autenticación se integra en el sistema PAM de Linux. Esta guía muestra la instalación y configuración de este mecanismo.
Para la operación inversa (generar códigos compatibles con Google Authenticator en Linux), véase #Generación de código a continuación.
Instalación
Instale el paquete libpam-google-authenticator, que proporciona el programa cliente google-authenticator
y el módulo PAM pam_google_authenticator.so
. La versión de desarrollo también está disponible con google-authenticator-libpam-gitAUR.
Configurando PAM
Por lo general, se requiere una autenticación de dos pasos solo para el inicio de sesión remoto. El archivo de configuración de PAM correspondiente es /etc/pam.d/sshd
. En caso de que desee utilizar Google Authenticator globalmente, tendría que cambiar /etc/pam.d/system-auth
, sin embargo, en este caso, proceda con extrema precaución para no bloquearse.
En esta guía, procedemos con la edición de /etc/pam.d/sshd
que se realiza de forma más segura (pero no necesariamente) en una sesión local.
Para introducir la contraseña de Unix y su OTP, añada pam_google_authenticator.so
por encima de las líneas system-remote-login en /etc/pam.d/sshd
:
auth required pam_google_authenticator.so auth include system-remote-login account include system-remote-login password include system-remote-login session include system-remote-login
Esto le solicitará la OTP antes de su contraseña de Unix. Cambiar el orden de los dos módulos invertirá este orden.
Para permitir el inicio de sesión con OTP o su contraseña de Unix, utilice:
auth sufficient pam_google_authenticator.so
Activar la autenticación desafío-respuesta (challenge-response) en /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
Finalmente, reinicie el servicio sshd
.
AuthenticationMethods
para permitir ambas: la autenticación basada en dos factores y por clave. Véase Autenticación de dos factores y claves públicas
Solicitar OTP solo cuando se conecte desde fuera de su red local
A veces, solo queremos activar la capacidad 2FA solo cuando nos conectamos desde fuera de nuestra red local.
Para lograr esto, cree un archivo (por ejemplo, /etc/security/access-local.conf
) y añada las redes desde las que desea omitir el 2FA:
# Permitir solo desde el rango de IP local + : ALL : 192.168.20.0/24 # Red adicional: VPN en el túnel IP (en caso de que tenga uno) + : ALL : 10.8.0.0/24 + : ALL : LOCAL - : ALL : ALL
Luego edite su /etc/pam.d/sshd
y añada la línea:
#%PAM-1.0 #auth required pam_securetty.so #disable remote root auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf auth required pam_google_authenticator.so auth include system-remote-login account include system-remote-login password include system-remote-login session include system-remote-login
Generar un archivo de clave secreta
Todo usuario que quiera usar la autenticación de dos pasos necesita generar un archivo de clave secreta en su carpeta de inicio. Esto se puede hacer muy fácilmente utilizando google-authenticator:
$ google-authenticator Do you want authentication tokens to be time-based (y/n) y <Here you will see generated QR code> Your new secret key is: ZVZG5UZU4D7MY4DH Your verification code is 269371 Your emergency scratch codes are: 70058954 97277505 99684896 56514332 82717798 Do you want me to update your "/home/username/.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 is not 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) y
Se recomienda guardar los códigos de emergencia de manera segura (imprimirlos y guardarlos en un lugar seguro) ya que son su única forma de iniciar sesión (a través de SSH) cuando pierda su teléfono móvil (es decir, su generador de OTP). También se almacenan en ~/.google_authenticator
, por lo que puede buscarlos en cualquier momento siempre y cuando haya iniciado sesión.
Configurando su generador de OTP
Instale una aplicación generadora en su teléfono móvil (por ejemplo):
En la aplicación móvil, cree una nueva cuenta y, o bien escanee el código QR de la URL que le indicaron al generar el archivo de clave secreta, o introduzca manualmente la clave secreta (en el ejemplo anterior 'ZVZG5UZU4D7MY4DH').
Ahora debería ver un nuevo token de código de acceso que se genera cada 30 segundos en su teléfono.
Probando
Conecte por SSH a su host desde otra máquina y/o desde otra ventana de terminal:
$ ssh hostname login as: <usuario> Verification code: <generado/emergencia> Password: <contraseña> $
Ubicación de almacenamiento
Si desea cambiar la ruta de almacenamiento de los archivos de clave secreta, puede utilizar la opción --secret
:
$ google-authenticator --secret="/RUTA_CARPETA/USUARIO"
Entonces, no olvide cambiar la ruta de ubicación de PAM, en /etc/pam.d/sshd
:
/etc/pam.d/sshd
auth required pam_google_authenticator.so user=root secret=/RUTA_CARPETA/${USER}
user=root
se utiliza para forzar a PAM a buscar el archivo utilizando un superusuario.
Además, tenga cuidado con los permisos del archivo de clave secreta. De hecho, el archivo debe ser solo legible por el propietario (chmod: 400
). Aquí, el propietario es el superusuario (root).
$ chown root.root /RUTA_ARCHIVO/ARCHIVOS_CLAVE_SECRETA chmod 400 /RUTA_ARCHIVO/ARCHIVOS_CLAVE_SECRETA
Inicios de sesión del escritorio
El complemento PAM de Google Authenticator también se puede utilizar para inicios de sesión de consola y con GDM. Simplemente añada lo siguiente a /etc/pam.d/login
o al archivo /etc/pam.d/gdm-password
:
auth required pam_google_authenticator.so
Generación de código
Si tiene Google Authenticator configurado con otros sistemas, perder su dispositivo puede impedirle iniciar sesión en estos. Tener formas adicionales de generar los códigos puede ser útil.
Gestores de código
Una script que permite la visualización, generación, almacenamiento y gestión de códigos de autenticación de Google está disponible en AUR (gashellAUR). Alternativamente, también está auther (auther-gitAUR).
KeePassXC
El gestor de contraseñas GUI keepassxc permite asociar a sus entradas códigos de Google Authenticator, y luego puede generar códigos OTP y exportar sus claves vía código QR.
Línea de órdenes
La forma más fácil de generar códigos es con oath-tool
. Está disponible en el paquete oath-toolkit, y se puede utilizar de la siguiente manera:
oathtool --totp -b ABC123
Donde ABC123
es la clave secreta.
En la mayoría de los sistemas Android con acceso de usuario suficiente, la base de datos de Google Authenticator se puede copiar del dispositivo y acceder directamente, ya que es una base de datos sqlite3. Este script de shell leerá una base de datos de Google Authenticator y generará códigos en vivo para cada clave encontrada:
google-authenticator.sh
#!/bin/sh # Esta es la ruta al archivo de la aplicación Google Authenticator. Se suele ubicar # en /data bajo Android. Cópielo en su PC en un lugar seguro y especifique la # ruta aquí. DB="/ruta/a/com.google.android.apps.authenticator/databases/databases" sqlite3 "$DB" 'SELECT email,secret FROM accounts;' | while read A do NAME=`echo "$A" | cut -d '|' -f 1` KEY=`echo "$A" | cut -d '|' -f 2` CODE=`oathtool --totp -b "$KEY"` echo -e "\e[1;32m$CODE\e[0m - \e[1;33m$NAME\e[0m" done