Files
dtic-DIIAA/adn/03_seguridad.md
T

113 lines
4.5 KiB
Markdown

# 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: [`adn/tools/seguridad/ns8-candados.rb`](../adn/tools/seguridad/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` | `adn/tools/seguridad/` | ✅ | Script Ruby unificado: cifrado, bóveda y autorización SSH. |
| `.boveda.json` | `adn/tools/seguridad/` | ❌ | 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 adn/tools/seguridad/ns8-candados.rb <comando> [args]
```
| Comando | Descripción |
| :--- | :--- |
| `abrir` | Autorizar SSH (cargar llave con passphrase, sin timeout). |
| `encrypt <texto>` | Cifrar texto plano → token. |
| `decrypt <token>` | Descifrar token → texto plano. |
| `get <clave>` | Obtener secreto de la bóveda (salida limpia para pipelines). |
| `set <clave>` | Guardar secreto (input interactivo sin eco). |
| `rm <clave>` | 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 adn/tools/seguridad/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 adn/tools/seguridad/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 **port 7022** | `ssh -p 7022 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@<ip>` el 28/02/2026.
**Uso programático** (ej: desde ns8-bkps):
```bash
# 1. Cargar llave SSH
ruby adn/tools/seguridad/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)
- `adn/tools/seguridad/.boveda.json` (payloads cifrados)
- `.agent_token` (token legacy, obsoleto)
- `*.key` (claves privadas)
- `tmp/` (artefactos transitorios de la IA)