# 03 - Hebra: Seguridad y Red > Referencia canónica: [`adn/00_indice.md`](00_indice.md) Esta hebra gobierna los protocolos de seguridad de red, gestión de secretos y autorización SSH. ## 1. Protocolo de Seguridad de Red (Hombre Muerto) - **Problemática**: La administración remota del servidor implica el riesgo de desconexión total ante cambios erróneos en la configuración de red. - **Directiva**: **Toda modificación de red debe incluir un mecanismo de reversión automática.** - **Implementación**: - Usar scripts con temporizador ("Dead Man's Switch"). - **Flujo**: 1. Aplicar cambios temporalmente. 2. Esperar confirmación explícita del usuario durante un tiempo prudencial (5 minutos). 3. **Si no hay confirmación**: Revertir cambios inmediatamente y restaurar estado anterior. 4. **Si hay confirmación**: Hacer cambios persistentes. ## 2. Gestión de Secretos — `ns8-candados` Herramienta unificada de seguridad: [`tools/ns8-candados/ns8-candados.rb`](../tools/ns8-candados/ns8-candados.rb) ### 2.1 Prohibición de Texto Plano La Inteligencia Artificial operante tiene **expresamente prohibido** solicitar contraseñas administrativas, tokens o claves privadas al operador, así como también plasmarlas en logs, comandos literales temporales o en la bitácora. ### 2.2 Componentes | Archivo | Ubicación | Git | Descripción | | :--- | :--- | :---: | :--- | | `ns8-candados.rb` | `tools/ns8-candados/` | ✅ | Script Ruby unificado: cifrado, bóveda y autorización SSH. | | `.boveda.json` | `tools/ns8-candados/` | ❌ | Payloads AES-256-GCM cifrados. | | `.master.key` | Raíz del proyecto | ❌ | Clave maestra de la bóveda (nunca en Git). | ### 2.3 Comandos Disponibles ```bash ruby tools/ns8-candados/ns8-candados.rb [args] ``` | Comando | Descripción | | :--- | :--- | | `abrir` | Autorizar SSH (cargar llave con passphrase, sin timeout). | | `encrypt ` | Cifrar texto plano → token. | | `decrypt ` | Descifrar token → texto plano. | | `get ` | Obtener secreto de la bóveda (salida limpia para pipelines). | | `set ` | Guardar secreto (input interactivo sin eco). | | `rm ` | Eliminar secreto de la bóveda. | | `list` | Listar claves disponibles. | ### 2.4 Consumo Efímero (IA) ```bash # Obtener password para uso en comando remoto PASS=$(ruby tools/ns8-candados/ns8-candados.rb get admindasu) sshpass -p "$PASS" ssh -J root@10.0.10.205 admindasu@10.0.100.12 "cmd" ``` ### 2.5 Payloads en la Bóveda | Clave | Propósito | | :--- | :--- | | `sudo` | Contraseña de sudo/root del entorno local. | | `rsa` | Passphrase de la llave SSH (`~/.ssh/id_rsa`). | | `domain_admin` | Credenciales del Administrador del dominio `dasuten.utnlr`. | | `admindasu` | Credenciales del usuario `admindasu` (Domain Admin). | | `win_domain` | Contraseña de `monlaricardo` en dominio UTNLARIOJA (SSH a VMs Windows). | ## 3. Autorización SSH ### 3.1 Problema La llave SSH del operador está protegida con passphrase. El agente SSH no retiene las identidades entre sesiones. ### 3.2 Solución: `ns8-candados.rb abrir` El operador ejecuta el comando **interactivamente** para cargar su identidad SSH: ```bash ruby tools/ns8-candados/ns8-candados.rb abrir ``` Las identidades permanecen activas mientras dure la sesión del agente SSH (sin timeout artificial). ### 3.3 Matriz de Acceso SSH | Tipo | Usuario | Auth | Ejemplo | | :--- | :--- | :--- | :--- | | **Hipervisores** (pmox1/2/3) | `root` | Llave RSA (passphrase `rsa`) | `ssh root@10.0.10.201` | | **VMs/CTs Linux** | `rmonla` | Llave RSA (desplegada) + sudo (`sudo`) | `ssh rmonla@10.0.10.4` | | **VMs Windows** | `monlaricardo` | Password (`win_domain`) + OpenSSH | `ssh monlaricardo@10.0.10.200` | | **XenServer** (xen1) | `rmonla` | Password (`sudo`) | `ssh rmonla@10.0.10.23` | **Despliegue de llaves**: La llave pública de srv-ns8 (`~/.ssh/id_rsa.pub`) fue desplegada a todos los nodos Linux via `ssh-copy-id rmonla@` el 28/02/2026. **Uso programático** (ej: desde ns8-bkps): ```bash # 1. Cargar llave SSH ruby tools/ns8-candados/ns8-candados.rb abrir # 2. Acceder a hipervisor ssh root@10.0.10.201 "qm list" # 3. Acceder a VM Linux (con sudo) ssh rmonla@10.0.10.4 "sudo shutdown -h now" ``` ## 4. Archivos Protegidos (`.gitignore`) Los siguientes artefactos **nunca** deben ser rastreados por Git: - `.master.key` (clave maestra de la bóveda) - `tools/ns8-candados/.boveda.json` (payloads cifrados) - `.agent_token` (token legacy, obsoleto) - `*.key` (claves privadas) - `tmp/` (artefactos transitorios de la IA)