# Inicio de sesión en Linux

> Añade Ironchip como segundo factor en Linux con el módulo PAM: crea la aplicación, instala pam_ironchip_auth.so y protege sudo, SSH o el inicio de sesión local.

URL: https://docs.ironchip.com/identidad/integraciones/puestos/linux-logon/

Ironchip se integra en Linux mediante PAM (Pluggable Authentication Modules) y añade el segundo factor a servicios como `sudo`, SSH o el inicio de sesión local. Usa esta página para crear la aplicación, instalar el módulo y configurar PAM.

## Requisitos

- Acceso a la consola de administración de Ironchip.
- Un usuario con permisos de administrador (`root` o `sudo`) en el equipo Linux.
- Conectividad desde el equipo con la API de Ironchip (`https://api.ironchip.com`).
- Un sistema Linux con PAM. Para macOS, consulta [Inicio de sesión en macOS](https://docs.ironchip.com/identidad/integraciones/puestos/macos-logon/).

:::caution[Puede bloquear el sistema]
Una configuración de PAM incorrecta puede dejarte sin acceso al equipo. Mantén abierta una sesión de `root` mientras pruebas y empieza por `sudo` antes de proteger SSH o el inicio de sesión.
:::

## Configuración en Ironchip

### Crear la aplicación

1. Ve a **Applications > New application**.

   [Imagen: Sección Aplicaciones de la consola con el botón para crear una nueva aplicación]

2. Selecciona el tipo de integración **Linux Logon**.

   [Imagen: Selección del tipo de integración Linux Logon]

3. Escribe un nombre descriptivo para la aplicación y haz clic en **Add**.

   [Imagen: Nombre de la aplicación y botón Add]

4. Guarda la **API key** que se muestra al crear la aplicación: la necesitarás más tarde.

   [Imagen: Ventana con la API key de la aplicación]

### Dar acceso a los usuarios

1. Abre la aplicación recién creada y haz clic en el botón para añadir un nuevo acceso.

   [Imagen: Ficha de la aplicación con el botón para añadir un acceso]

2. Selecciona los usuarios que van a utilizar el servicio.

   [Imagen: Selección de los usuarios del acceso]

3. Configura el nombre de usuario para que coincida con el del sistema Linux.

   [Imagen: Nombre de usuario igual al del sistema Linux]

4. Configura las condiciones de acceso que tiene que cumplir el usuario para acceder al equipo.

   [Imagen: Condiciones de acceso del usuario]

5. Guarda el acceso.

   [Imagen: Resumen del acceso antes de guardarlo]

## Configuración en Linux

### Instalar el módulo PAM

1. Opcional: instala estas dependencias, que solo hacen falta en algunos casos.

   ```bash
   # Debian y Ubuntu
   sudo apt-get install libcurl4-openssl-dev libpam-dev uuid-dev

   # RHEL, AlmaLinux y CentOS
   sudo yum install curl-devel pam-devel libuuid libuuid-devel
   ```

2. Crea una carpeta en una ubicación segura.

   ```bash
   mkdir /usr/local/lib/security
   ```

3. Guarda en ella el archivo `pam_ironchip_auth.so`, que encontrarás en el apartado **Plugins** de la consola de Ironchip.

   ```bash
   mv pam_ironchip_auth.so /usr/local/lib/security/
   ```

   [Imagen: Archivo pam_ironchip_auth.so copiado en la carpeta segura]

### Configurar PAM

Ve a `/etc/pam.d` y abre con un editor de texto uno de estos archivos, según las necesidades de la compañía. Los nombres pueden cambiar según la arquitectura del sistema.

| Archivo        | Protege                                |
| -------------- | -------------------------------------- |
| `sudo`         | La autenticación en el comando `sudo`. |
| `sshd`         | La autenticación en el servicio SSH.   |
| `gdm-password` | El inicio de sesión en el equipo.      |
| `common-auth`  | Todos los servicios anteriores.        |

`gdm-password` gestiona el inicio de sesión gráfico (GNOME Display Manager). `common-auth` centraliza la autenticación que importan servicios como `sudo`, `login` o `sshd` con la línea `@include common-auth`.

Añade esta línea con tus datos:

```text
auth required <ruta absoluta de pam_ironchip_auth.so> host=https://api.ironchip.com api_key=<API_KEY>
```

La API key es la que guardaste al crear la aplicación.

### Parámetros del módulo

| Parámetro           | Obligatorio | Descripción                                                                                             |
| ------------------- | ----------- | ------------------------------------------------------------------------------------------------------- |
| `host`              | Sí          | URL del servidor de identidad de Ironchip, por ejemplo `https://api.ironchip.com`.                      |
| `api_key`           | Sí          | API key de la aplicación, usada en la autenticación.                                                    |
| `offline_skip`      | No          | Con `offline_skip=true`, si no hay conectividad con Ironchip el módulo se omite y PAM lo da por válido. |
| `whitelisted_users` | No          | Usuarios separados por `;` que omiten el módulo, por ejemplo `whitelisted_users=root;ubuntu`.           |

:::caution
`offline_skip` y `whitelisted_users` hacen que esos casos no pidan el segundo factor. Úsalos solo cuando sea imprescindible.
:::

### Exigir el segundo factor o aceptarlo como suficiente

El verbo que uses en la línea `auth` decide cómo se combina Ironchip con el resto de módulos PAM:

- `required`: el usuario debe superar este módulo **como mínimo**. Es la opción para que el segundo factor sea obligatorio.
- `sufficient`: si el módulo se supera, PAM termina la autenticación con éxito de inmediato e ignora el resto de módulos.

```text
auth required pam_ironchip_auth.so <opciones>
auth sufficient pam_ironchip_auth.so <opciones>
```

## SSH con clave pública e Ironchip

Esta configuración exige a la vez la clave pública y Ironchip como autenticación interactiva (`keyboard-interactive`).

### Configurar sshd_config

1. Abre el archivo de configuración principal de SSH con privilegios de administrador.

   ```bash
   sudo nano /etc/ssh/sshd_config
   ```

2. Localiza y ajusta estos parámetros, o añádelos al final del archivo.

   ```text title="/etc/ssh/sshd_config"
   # Habilitar llaves y desactivar contraseñas simples
   PubkeyAuthentication yes
   PasswordAuthentication no

   # Forzar AMBOS: llave pública + Ironchip (keyboard-interactive)
   AuthenticationMethods publickey,keyboard-interactive

   # Configuración necesaria para que PAM (Ironchip) funcione
   UsePAM yes
   KbdInteractiveAuthentication yes   # Ubuntu/Debian modernos
   ```

3. Si tu sistema Linux no es Ubuntu o Debian, añade además esta línea.

   ```text
   ChallengeResponseAuthentication yes
   ```

### Autenticar en SSH sin contraseña

Para que el servidor SSH reconozca a Ironchip como método de autenticación interactiva, modifica la configuración de PAM. Así el sistema valida la identidad con Ironchip sin pedir además la contraseña tradicional de Linux.

1. Abre el archivo que gestiona la autenticación del servicio SSH.

   ```bash
   sudo nano /etc/pam.d/sshd
   ```

2. Añade esta línea al **principio** del archivo, para que sea el primer método que se evalúa en la fase interactiva.

   ```text title="/etc/pam.d/sshd"
   auth sufficient pam_ironchip_auth.so host=https://api.ironchip.com api_key=<API_KEY>
   ```

### Permitir la conexión con SELinux

El servidor debe hacer peticiones salientes a `api.ironchip.com` para validar la identidad. En sistemas con SELinux habilitado, como RHEL, AlmaLinux o CentOS, el servicio SSH tiene restringido el acceso a la red por defecto, y eso bloquearía la comunicación con Ironchip.

Importa el módulo de política que permite al proceso de SSH establecer conexiones de red.

```bash
semodule -i mi-sshdsession.pp
```

### Aplicar los cambios

Guarda los archivos y reinicia el servicio SSH.

```bash
# Sistemas con systemd (Ubuntu, Debian, RHEL 7+)
sudo systemctl restart sshd

# Verificar el estado del servicio
sudo systemctl status sshd
```

Con `sufficient`, el cliente SSH sigue mostrando el aviso de contraseña. El usuario puede escribir cualquier valor: no se valida si Ironchip ya ha aceptado la autenticación. Para que no se pregunte, añade `PermitEmptyPasswords yes` en `/etc/ssh/sshd_config` y reinicia `sshd`. Hazlo solo si usas el módulo como método `sufficient`. Si esperas un segundo factor (MFA), no cambies este parámetro.

## Comprobación

1. Mantén abierta una sesión de `root` y abre otra terminal.
2. Ejecuta un comando que pase por PAM, por ejemplo `sudo -k && sudo ls`.
3. Autoriza el acceso en Ironchip cuando te lo pida.
4. Si protegiste SSH, abre una conexión nueva con el usuario configurado en Ironchip y autoriza el acceso.

Si algo falla, restaura la línea de PAM desde la sesión de `root`, que sigue abierta.

Vídeo: [Protección del inicio de sesión en Linux con Ironchip](https://play.hubspotvideo.com/v/7745202/id/145633784588)

## Registros

El módulo escribe sus registros en `syslog`. Consúltalos así:

```bash
tail -f /var/log/auth.log
```

Para filtrar el inicio de sesión gráfico:

```bash
tail -f /var/log/syslog | grep gdm-password
```

## Problemas frecuentes

**SSH sigue pidiendo la contraseña de Linux.** Comprueba que `UsePAM yes` está en `/etc/ssh/sshd_config` y reinicia el servicio. Si quieres evitar el aviso con el método `sufficient`, consulta [Aplicar los cambios](#aplicar-los-cambios).

**En RHEL, AlmaLinux o CentOS, SSH no valida con Ironchip.** Importa el módulo de política de SELinux de la sección [Permitir la conexión con SELinux](#permitir-la-conexión-con-selinux).
