# Agente en las máquinas

> Instala el agente de Ironchip en las máquinas para aprobar sudo, limitar programas en Windows, rotar contraseñas de cuentas locales y ver qué se ejecuta en cada sesión.

URL: https://docs.ironchip.com/pam/administracion/agente/

El agente es un componente opcional que se instala en las máquinas a las que llega Ironchip PAM. Lo usa quien administra el acceso privilegiado para controlar qué se ejecuta dentro de la sesión, no solo quién entra.

## Qué hace

El agente tiene dos partes, que se dan de alta con el mismo secreto:

- **osquery** informa de lo que ocurre en la máquina. Es el osquery estándar, sin modificar: solo cambia su configuración. Funciona en Linux, Windows y macOS.
  - Los procesos que inician las cuentas de las personas, para la [línea de tiempo de cada sesión](https://docs.ironchip.com/pam/conceptos/grabacion/).
  - Las cuentas, quién administra la máquina, las claves SSH, quién tiene sesión iniciada y qué escucha conexiones remotas, para el [inventario de cuentas](https://docs.ironchip.com/pam/administracion/cuentas/#inventario-de-cuentas) y la [exposición](https://docs.ironchip.com/pam/administracion/exposicion/).
  - El sistema, los paquetes instalados, las actualizaciones de Windows y el cifrado de los discos, en la pestaña **Machine** del recurso.
- **Enforcer** aplica en la máquina lo que Ironchip decide, con los mecanismos que ya tiene cada sistema. Funciona en Linux y Windows.
  - **Linux:** `sudo` le pregunta, mediante un plugin de aprobación, si un comando puede ejecutarse. Cualquier respuesta que no sea un permiso explícito es un rechazo.
  - **Windows:** cada pocos segundos pregunta qué programas puede ejecutar cada cuenta con la que entra el broker y lo aplica con AppLocker, antes de que nadie se conecte y mientras hay alguien conectado.
  - **Rotación de cuentas:** cambia las contraseñas de las cuentas locales que gestiona Ironchip. Solo las de las cuentas que nombres en `-rotate-accounts`: las demás nunca se cambian, aunque Ironchip lo pida.

El agente solo abre conexiones salientes por HTTPS hacia Ironchip: nada entra en la máquina.

## Requisitos

| Sistema                          | Paquete del enforcer                       |
| -------------------------------- | ------------------------------------------ |
| Debian y Ubuntu                  | `.deb` (amd64, arm64, armhf, i386 y otras) |
| RHEL, Rocky, Alma, Fedora y SUSE | `.rpm` (x86_64, aarch64 y otras)           |
| Alpine                           | `.apk`                                     |
| Arch Linux                       | `.pkg.tar.zst`                             |
| Cualquier Linux (glibc o musl)   | Archivo `.tar` con `install.sh`            |
| Windows                          | `ironchip-enforcer.exe` (amd64 y arm64)    |

- **Linux:** `sudo` 1.9 o posterior, que admite plugins de aprobación (RHEL 8, Debian 11, Ubuntu 22.04 o posteriores). Acceso de administrador.
- **Windows:** un símbolo del sistema con permisos elevados.
- **osquery 5.23** o posterior, de <https://osquery.io/downloads>.
- Salida HTTPS desde la máquina hacia Ironchip.
- El **secreto de alta** del recurso: en **PAM > Hosts > Targets**, abre **Options > Install agent** en el recurso. El secreto da de alta una máquina, una vez para osquery y otra para el enforcer, y caduca a la hora. No se vuelve a mostrar.

[Imagen: Ventana Install the agent con las pestañas Linux, Windows y macOS y los pasos para osquery]

## Instalar osquery

La ventana **Install agent** muestra los pasos para **Linux**, **Windows** y **macOS** con los valores de tu compañía ya puestos:

1. Instala osquery 5.23 o posterior.
2. Guarda el secreto de alta en el fichero de tu sistema, con permisos `600`.
3. Copia las opciones de la consola en el fichero de flags.
4. Arranca el servicio (`sudo systemctl enable --now osqueryd`, `Restart-Service osqueryd` o `sudo osqueryctl start`).

| Sistema | Secreto                                    | Fichero de flags                         |
| ------- | ------------------------------------------ | ---------------------------------------- |
| Linux   | `/etc/osquery/ironchip.secret`             | `/etc/osquery/osquery.flags`             |
| macOS   | `/var/osquery/ironchip.secret`             | `/var/osquery/osquery.flags`             |
| Windows | `C:\Program Files\osquery\ironchip.secret` | `C:\Program Files\osquery\osquery.flags` |

Para ver cada proceso, y no solo los que encuentra al consultar la lista cada pocos segundos, añade la fuente de eventos del sistema:

- **Linux:** `--disable_events=false --disable_audit=false --audit_allow_config=true --audit_persist=true --audit_allow_process_events=true`. `auditd` no debe estar en marcha.
- **macOS:** `--disable_events=false --disable_endpointsecurity=false`, y acceso total al disco para `osqueryd`.
- **Windows:** `--disable_events=false --enable_process_etw_events=true`. Sin estas opciones, en Windows no se ve ningún proceso.

En menos de un minuto, el recurso muestra el agente **online**, con el nombre y el sistema de la máquina.

## Instalar el enforcer en Linux

1. Instala el paquete:

   ```bash
   sudo apt install ./ironchip-pam-agent_<version>-1_amd64.deb                  # Debian, Ubuntu
   sudo dnf install ./ironchip-pam-agent-<version>-1.x86_64.rpm                 # RHEL, Rocky, Alma, Fedora (SUSE: zypper install)
   sudo apk add --allow-untrusted ./ironchip-pam-agent_<version>-r1_x86_64.apk  # Alpine
   sudo pacman -U ./ironchip-pam-agent-<version>-1-x86_64.pkg.tar.zst           # Arch Linux
   ```

   En cualquier otro Linux, descomprime el archivo `.tar` fuera de `/` y ejecuta su `install.sh` como root.

2. Da de alta el enforcer con el secreto del recurso y borra el fichero. Sustituye `<SECRET>` por el secreto de alta y `<API_HOST>` por la dirección de la API de Ironchip:

   ```bash
   echo '<SECRET>' | sudo tee /etc/ironchip/secret >/dev/null && sudo chmod 600 /etc/ironchip/secret
   sudo ironchip-enforcer enroll -server <API_HOST>:443 -secret-file /etc/ironchip/secret
   sudo rm /etc/ironchip/secret
   ```

3. En `/etc/ironchip/enforcer.env`, indica la dirección de Ironchip (`IRONCHIP_SERVER`) y, si quieres que rote cuentas, añade `-rotate-accounts` con las cuentas separadas por comas en `IRONCHIP_ENFORCER_ARGS`. Después arranca el servicio:

   ```bash
   sudoedit /etc/ironchip/enforcer.env
   sudo systemctl enable --now ironchip-enforcer
   ```

   En Alpine, usa `rc-update add ironchip-enforcer default` y `rc-service ironchip-enforcer start`.

4. Activa el plugin de aprobación de `sudo`. En `/etc/sudo.conf`, después del plugin de política:

   ```ini title="/etc/sudo.conf"
   Plugin sudoers_policy sudoers.so
   Plugin ironchip_approval /usr/libexec/sudo/ironchip_approval.so socket=/run/ironchip/enforcer.sock timeout=30
   ```

:::caution
El paquete nunca edita `sudo.conf`. Una vez añadida la línea, todos los comandos `sudo` de cualquier usuario que no sea root necesitan el sí del enforcer: con el enforcer parado, `sudo` rechaza todo. Mantén una consola de root abierta mientras lo pruebas.
:::

Las actualizaciones del paquete reinician el enforcer si estaba en marcha y conservan `enforcer.env` y su alta. Los paquetes `.deb` y `.rpm` se niegan a desinstalarse mientras `sudo.conf` cargue el plugin: quita antes la línea. Los de Alpine y Arch desactivan la línea al desinstalarse y guardan una copia en `/etc/sudo.conf.ironchip-removed`.

## Instalar el enforcer en Windows

Guarda el secreto de alta en `secret.txt` y, desde un símbolo del sistema con permisos elevados, ejecuta:

```powershell
ironchip-enforcer.exe enroll -server <API_HOST>:443 -secret-file secret.txt
ironchip-enforcer.exe install -server <API_HOST>:443 -rotate-accounts ironchip
```

`-rotate-accounts` es opcional e indica las cuentas locales que el enforcer puede rotar (en el ejemplo, `ironchip`). `install` lo instala como servicio, con sus ficheros en `C:\ProgramData\Ironchip`. `uninstall` lo elimina.

El enforcer arranca el servicio Identidad de aplicación (AppIDSvc) si hace falta. Si la colección de ejecutables de AppLocker está en modo de auditoría, las reglas de Ironchip se registran pero no bloquean nada. En una máquina sin reglas de AppLocker propias, el enforcer añade una regla que permite todo a todos, para que las demás cuentas no se vean afectadas: Ironchip solo restringe las cuentas con las que entra el broker.

## Opciones del enforcer

| Opción                     | Qué hace                                                                                                  |
| -------------------------- | --------------------------------------------------------------------------------------------------------- |
| `-server host:puerto`      | Dirección de Ironchip. Obligatoria.                                                                       |
| `-secret-file fichero`     | El secreto de alta, para `enroll`.                                                                        |
| `-rotate-accounts cuentas` | Cuentas, separadas por comas, cuya contraseña puede cambiar Ironchip: las que usa el broker.              |
| `-ca fichero`              | Certificados de CA en los que confiar en lugar de los del sistema.                                        |
| `-key fichero`             | Dónde guarda su clave. Por defecto `/etc/ironchip/enforcer.key` o `C:\ProgramData\Ironchip\enforcer.key`. |

## Comprobar que funciona

La pestaña **Agent** de la página del recurso muestra el estado de osquery (**Status**, **System**, **Processes**, **Last seen** y los últimos avisos) y del enforcer (**Last heard from**). En Linux, el enforcer se oye cuando alguien usa `sudo` y cada 30 segundos si rota contraseñas; en Windows, cada pocos segundos.

## Cambiar la clave o retirarlo

- Para cambiar la clave del enforcer, abre **Options > Remove enforcer** y vuelve a darlo de alta con un secreto nuevo de **Install agent**. Mientras no esté dado de alta, `sudo` rechaza todo en esa máquina.
- **Options > Remove agent** hace lo mismo con osquery. Desinstalar osquery de la máquina corre de tu cuenta.

## Problemas frecuentes

| Síntoma                               | Qué hacer                                                                                                                                                                                |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sudo` rechaza todos los comandos     | El enforcer está parado o no responde. Arráncalo con `sudo systemctl start ironchip-enforcer` o, si hace falta, quita la línea del plugin en `/etc/sudo.conf` desde una consola de root. |
| El alta falla                         | El secreto vale una vez para cada parte del agente y caduca a la hora. Genera otro con **Install agent** en el recurso correcto.                                                         |
| No aparecen procesos en la sesión     | Revisa que osquery tenga activada la fuente de eventos de tu sistema. En Windows es imprescindible.                                                                                      |
| La contraseña de una cuenta no cambia | Añade la cuenta a `-rotate-accounts` y reinicia el enforcer. Consulta [Rotación de contraseñas](https://docs.ironchip.com/pam/boveda/rotacion/).                                                                  |
