# 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, autorización SSH y contingencia ante fallos críticos de conectividad. ## 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 (Bóveda Operativa) Todos los artefactos de seguridad residen en `scripts/seguridad/`. ### 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 de la Bóveda | Archivo | Ubicación | Git | Descripción | | :--- | :--- | :---: | :--- | | `secret_box.rb` | `scripts/seguridad/` | ✅ | Motor de cifrado AES-256-GCM. Encripta/desencripta payloads. | | `.agent_secrets.json` | `scripts/seguridad/` | ❌ | Payloads cifrados (sudo, rsa, domain_admin). | | `.master.key` | Raíz del proyecto | ❌ | Clave maestra de la bóveda (nunca en Git). | ### 2.3 Consumo Efímero de Bóveda Ante requerimientos de escalada de privilegios (`sudo`, `root`, `sshpass`), la IA accederá de forma autónoma a la bóveda: ```bash # Ejemplo: ejecutar comando con privilegios en un nodo remoto CMD_PASS=$(ruby scripts/seguridad/secret_box.rb decrypt "$PAYLOAD") sshpass -p "$CMD_PASS" ssh root@10.0.10.205 "comando" ``` **Payloads disponibles** (en `.agent_secrets.json`): - `sudo`: Contraseña de sudo/root del entorno local. - `rsa`: Passphrase de la llave SSH (`~/.ssh/id_rsa`). - `domain_admin`: Credenciales de administrador del dominio `dasuten.utnlr`. ## 3. Autorización SSH (Candado) ### 3.1 Problema La llave SSH del operador está protegida con passphrase. El agente SSH no retiene las identidades entre sesiones. La IA no puede inyectar la passphrase de forma no interactiva sin `expect`. ### 3.2 Solución: `candado.rb` El operador ejecuta el script **interactivamente** para autorizar a la IA durante una ventana de tiempo: ```bash ruby scripts/seguridad/candado.rb [minutos] ``` **Flujo:** 1. 🧹 Limpia identidades previas del agente SSH (`ssh-add -D`). 2. 🔑 Pide la passphrase al operador (`ssh-add`). 3. ✅ Verifica que la llave se cargó correctamente. 4. 🔓 Genera un token temporal (`.agent_token`, 5 min por defecto). 5. La IA puede ahora ejecutar comandos SSH sin intervención. ### 3.3 Flujo Operativo Completo ``` OPERADOR IA (Agente) │ │ │ ruby candado.rb 10 │ │ → Ingresa passphrase │ │ → Token activo 10 min │ │ │ │ "Listo, el candado está abierto"│ │─────────────────────────────────→│ │ │ ssh root@srv-dasu "qm create..." │ │ (usa llave cargada en agente) │ │ │ ⏳ Token expira │ │ │ ssh → ❌ (sin identidad) ``` ## 4. Archivos Protegidos (`.gitignore`) Los siguientes artefactos **nunca** deben ser rastreados por Git: - `.master.key` (clave maestra de la bóveda) - `scripts/seguridad/.agent_secrets.json` (payloads cifrados) - `.agent_token` (token temporal de autorización) - `*.key` (claves privadas) - `tmp/` (artefactos transitorios de la IA)