Autenticación de dos factores SSH (2FA) en el servidor Linux versiones centos/RHEL/Almalinux/alamalinux + cpanel/Rocky Linux
Esta guía se mostrará la implementación de autenticación de dos factores al servicio SSH.
Por lo general, solo necesita ingresar una contraseña o usar la clave SSH para iniciar sesión en su servidor CentOS/RHEL remoto. La autenticación de dos factores (2FA) requiere que ingrese dos datos para iniciar sesión, por lo que también deberá ingresar una contraseña de un solo uso basada en el tiempo para iniciar sesión en su servidor SSH. Esta contraseña de un solo uso se calcula utilizando el algoritmo TOTP, que es un estándar del IETF. Hoy en día, muchos sitios web y servicios (Facebook, Google, Twitter, etc.) ofrecen 2FA para que los usuarios protejan sus cuentas y es una buena idea habilitar también 2FA para su servidor SSH.
El software de servidor de código abierto que usaremos en este artículo se llama google-authenticator, que se instala desde el repositorio de EPEL. La empresa Google no participa en el proceso de autenticación de ninguna forma. El software del servidor y la aplicación móvil no necesitan acceso a la red.
Para poder continuar con los siguientes pasos debemos descargar en nuestro celular una App de autentificación, en esta guía utilizaremos “Google Authenticator”.
Link de descarga Google Authenticador para android
Paso 1: Instalar y configurar Google Authenticator en el servidor.
Inicie sesión en su servidor centos/almalinux/rockylinux y ejecute los siguientes comandos:
Instalamos el repositorio epel.
dnf -y install -y epel-release
Instalamos la librería de Google authenticator
dnf install -y google-authenticator qrencode qrencode-libs
Debe crear el directorio .ssh en el usuario root o en el usuario administrador.
Luego ejecute el comando google-authenticator para crear una nueva clave secreta en el ~/.ssh/directorio.
Cuando se le pregunta “¿Quiere que los tokens de autenticación se basen en el tiempo?” Responde “y”.
Luego verá un código QR que deberá escanear usando una aplicación de google en su teléfono.
Tenga en cuenta que debe ampliar la ventana del terminal para escanear el código QR completo.
En caso de no poder escanearlo. Puede agregar la llave secreta que le genera el comando ejecutado. Esto puede agregar en la alternativa “ingresar clave de config” de la aplicación de Google.
Mas abajo deberá ingresar el código de 6 dígitos que le genera la aplicación
Después de ello se genera un código de emergencia. Es importante que guarde esta información en un lugar seguro en caso de que pierda su teléfono.
Luego puede ingresar y para responder todas las preguntas restantes. Esto actualizará su archivo de configuración de Google Authenticator, deshabilitará los usos múltiples del mismo token de autenticación, aumentará la ventana de tiempo y habilitará la limitación de velocidad para proteger contra intentos de inicio de sesión por fuerza bruta.
Paso 2: Configurar el servicio SSH para usar Google Authenticator
Autenticación de contraseña con 2FA. Para ello debe habilitar algunos parámetros del archivo de configuración de ssh. Favor de ejecutar los siguientes comandos:
sed -i ‘s/#PubkeyAuthentication.*/PubkeyAuthentication yes/’ /etc/ssh/sshd_config
sed -i ‘s/^ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/’ /etc/ssh/sshd_config
Si desea permitir que el usuario root use 2FA, busque el PermitRootLoginparámetro y establezca su valor en yes. No puede ser PermitRootLogin no o PermitRootLogin prohibit-password.
sed -i ‘s/^PermitRootLogin.*/PermitRootLogin yes/’ /etc/ssh/sshd_config
Para habilitar 2FA en SSH. Hay que agregar 2 líneas en el archivo /etc/pam.d/sshd. Debe ingresar los siguientes comandos.
Esto es para deshabilitar la autenticación de contraseña
sed -i ‘s/^auth substack password-auth/#auth substack password-auth/’ /etc/pam.d/sshd
habilitar 2FA en SSH
echo “auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator” >> /etc/pam.d/sshd
El archivo /etc/pam.d/sshd debe quedar así.
Luego reinicie el servicio SSH para que el cambio surta efecto.
systemctl restart sshd