Google Authenticator (Español)

Google Authenticator provee un procedimiento de autenticación de dos pasos que utiliza contraseñas de un sólo uso (OTP). La aplicación generadora de OTP está disponible para iOS, Android y Blackberry. Semejante a S/KEY Authentication el mecanismo de autenticación se integra en el sistema PAM de Linux. Ésta guía muestra la instalación y configuración de éste mecanismo.

Installación

Instalar el paquete libpam-google-authenticatorAUR desde AUR. La versión de desarrollo también está disponible cómo google-authenticator-libpam-gitAUR.

Configurando PAM

Warning: Si haces toda la configuración via SSH no cierres la sesión antes de comprobar que todo funciona correctamente, si no puedes bloquearte a ti mismo. A demás considera crear una llave SSH (véase SSH keys (Español)) antes de activar PAM.

Por lo general, se quiere una autenticación de dos pasos sólo para el inicio de sesión remoto. El correspondiente fichero de configuración de PAM es /etc/pam.d/sshd. En caso de que quieras usar Google Authenticator de manera global Tendrías que cambiar /etc/pam.d/system-auth, sin embargo, en éste caso procede con extremo cuidado para no bloquearse a si mismo. En ésta guía procedemos a editar /etc/pam.d/sshd con ésta configuración que es más segura (pero no necesariamente) en una sesión local.

Para ingresar ambos, tu contraseña Unix y tu contraseña OTP, agrega pam_google_authenticator.so encima de las lineas 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

Ésto le preguntará por la contraseña OTP antes de mostrar el prompt para introducir tu contraseña Unix. Cambiar el orden de los dos módulos invertirá el orden.

Warning: Sólo usuarios que hayan generado un fichero de clave secreta (vea abajo) tendrán permitido logearse usando SSH.

Para permitir el inicio de sesión con la contraseña de OTP o de Unix usar:

 auth            sufficient      pam_google_authenticator.so

Activar challenge-response authentication en /etc/ssh/sshd_config:

 ChallengeResponseAuthentication yes

Finalmente, reload el servicio sshd.

Warning: OpenSSH ignorará todo esto si se está autenticando con un par de claves SSH y tiene disabled password logins. A demás, a partir de OpenSSH 6.2, puedes añadir AuthenticationMethods permitir ambos: two-factor and key-based authentication. See Secure Shell#Two-factor authentication and public keys.

Generar un fichero de clave secreta

Tip: Instalar qrencode para generar un código QR escaneable. Escanea el código QR con la app Google Authenticator (u otra a su elección, p.e. FreeOTP) para configurar automáticamente la clave.

Todos los usuarios que quieran usar autenticación en dos pasos necesitarán generar un fichero de clave secreta en su directorio personal. Ésto se puede hacer muy fácilmente usando 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

Es recomendable store the emergency scratch codes safely (imprimirlos y mantenerlos en un lugar seguro) ya que son la única manera de iniciar sesión (via SSH) cuándo pierdes tu smartphone (p.e. tu generador-OTP). También se almacenan en ~/.google_authenticator, por lo que puedes mirarlos en cualquier momento, siempre y cuándo ya estés conectado. No elimines (o sí) los códigos de ése fichero, ya que es de ahí de donde lee los códigos de emergencia, también puedes agregar códigos nuevos.

Configurando tu generador de OTP

Instala el generador de OTP en tu móvil desde Android market (e.g. FreeOTP) o desde F-Droid. Clickea en el menú de la aplicación el botón correspondiente para crear una nueva cuenta y ya sea escaneando el código QR desde la URL donde se generó la clave secreta, o introduciendo la clave secreta (en el ejemplo 'ZVZG5UZU4D7MY4DH') manualmente.

Ahora deberías ver un nuevo token de código de acceso generado cada 30 segundos en tu teléfono.

Probando

Conéctate por SSH al equipo:

 $ ssh hostname
 login as: <username>
 Verification code: <generated/backup-code>
 Password: <password>
 $

Inicio de sesión en escritorio

EL plugin de PAM Google Authenticator también puede ser usado para inicios de sesión en la consola y con GDM. Solo añada lo siguiente en el fichero /etc/pam.d/login o en /etc/pam.d/gdm-password:

   auth required pam_google_authenticator.so