147 lines
6.0 KiB
Markdown
147 lines
6.0 KiB
Markdown
# Recuperación desde cero y alta en una sola ejecución
|
|
|
|
Los releases entregan dos ZIP independientes. Cada uno contiene sus binarios,
|
|
scripts, instalador offline requerido y un manifiesto SHA-256 interno. No contienen
|
|
contraseñas, claves privadas ni certificados reutilizables.
|
|
|
|
> Importante: reconstruir un bosque con el mismo nombre DNS **no** restaura el
|
|
> bosque anterior. Cambia el SID del dominio. Los equipos unidos al bosque viejo
|
|
> deberán borrarse/reinstalarse o salir de aquel dominio y unirse al nuevo. Para
|
|
> conservar cuentas, SID, contraseñas y relaciones de confianza se necesita una
|
|
> copia de estado del sistema de Active Directory y un procedimiento de
|
|
> recuperación de bosque, no este bootstrap.
|
|
|
|
## Windows Server nuevo
|
|
|
|
Compatible con Windows Server con Windows PowerShell 5.1. El servidor necesita
|
|
una interfaz privada para el dominio y, para autenticar contra SGU, salida HTTPS
|
|
por esa u otra interfaz.
|
|
|
|
1. Descargar y extraer `sgu-server-bootstrap-VERSION.zip`.
|
|
2. Abrir el directorio extraído.
|
|
3. Ejecutar, indicando la IP fija que tendrá el controlador:
|
|
|
|
```bat
|
|
Start-SguServerBootstrap.cmd 192.168.50.10
|
|
```
|
|
|
|
El iniciador solicita elevación UAC. El script pide una contraseña de Directory
|
|
Services Restore Mode sin guardarla, instala AD DS/DNS/GPMC, crea el bosque y
|
|
reinicia una vez. Un trabajo local bajo `SYSTEM` continúa automáticamente un
|
|
minuto después del arranque; no hace falta ejecutar un segundo comando.
|
|
|
|
Cuando hay más de una interfaz candidata, o se necesita gateway/prefijo/forwarders
|
|
explícitos, usar Windows PowerShell elevado:
|
|
|
|
```powershell
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass `
|
|
-File .\Initialize-SguDomainController.ps1 `
|
|
-ServerIPv4Address 192.168.50.10 `
|
|
-PrefixLength 24 `
|
|
-NetworkInterfaceAlias 'Ethernet' `
|
|
-DnsForwarders 172.21.80.1,1.1.1.1
|
|
```
|
|
|
|
El proceso crea o configura de forma idempotente:
|
|
|
|
- bosque y DNS `lci.lasalle.mx` / `LCI`;
|
|
- registro `sgu-auth.lci.lasalle.mx` apuntando a la IP proporcionada;
|
|
- `OU=Laboratorio`, `OU=Usuarios-SGU` y sus OU `Docentes`, `Alumnos` y
|
|
`Administrativos`;
|
|
- grupo de seguridad `SG-Laboratorio-Usuarios-RDP`;
|
|
- GPO de experiencia del equipo y restricciones de sesión SGU;
|
|
- certificado de servidor no exportable y broker mTLS en TCP 8443;
|
|
- recurso `\\SERVIDOR\Packages`, con lectura para Domain Computers;
|
|
- RDP con NLA, WinRM/PowerShell Remoting y reglas administrativas sólo en el
|
|
perfil Domain;
|
|
- pantalla, suspensión e hibernación en Nunca.
|
|
|
|
El broker arranca con una lista de clientes vacía. Eso no abre el servicio: mTLS
|
|
rechaza todos los certificados hasta que el primer cliente registra el suyo.
|
|
Los archivos opcionales colocados en `payload\server-content\Packages` al crear
|
|
el release se copian al recurso compartido. Si allí existe `wallpaper.jpg`,
|
|
`wallpaper.jpeg`, `wallpaper.png` o `wallpaper.bmp`, la GPO de usuarios lo aplica
|
|
automáticamente como fondo con ajuste Fill.
|
|
|
|
Estado y diagnóstico:
|
|
|
|
```powershell
|
|
Get-Content C:\ProgramData\SGU\Bootstrap\Server\bootstrap.log
|
|
Get-Content C:\ProgramData\SGU\Bootstrap\Server\bootstrap-complete.json
|
|
Get-ScheduledTask SGU-Complete-Domain-Controller-Bootstrap -ErrorAction SilentlyContinue
|
|
```
|
|
|
|
La tarea programada se elimina únicamente cuando todas las verificaciones
|
|
finales concluyen. Si algo externo falla, corregirlo y volver a ejecutar el mismo
|
|
script; las operaciones terminadas se reutilizan.
|
|
|
|
## Windows 10/11 nuevo
|
|
|
|
Se admiten Pro, Enterprise y Education. Windows Home no puede unirse a Active
|
|
Directory local ni actuar como host RDP; el bootstrap lo detecta antes de cambiar
|
|
el equipo y explica que se debe actualizar la edición.
|
|
|
|
1. Descargar y extraer `sgu-client-bootstrap-VERSION.zip`.
|
|
2. Ejecutar con la IP fija actual del controlador de dominio:
|
|
|
|
```bat
|
|
Start-SguClientEnrollment.cmd 192.168.50.10
|
|
```
|
|
|
|
Después de UAC, se solicita interactivamente la credencial autorizada para unir
|
|
equipos. La contraseña existe sólo en memoria. El bootstrap:
|
|
|
|
1. apunta el DNS del adaptador al IP proporcionado;
|
|
2. abre una sesión WinRM autenticada con el DC y verifica que pertenece al
|
|
dominio esperado;
|
|
3. crea en el cliente un certificado mTLS RSA-3072 no exportable y envía sólo su
|
|
parte pública al broker;
|
|
4. recupera por esa sesión autenticada el certificado público del broker;
|
|
5. instala el runtime .NET 10 offline y el Credential Provider;
|
|
6. valida binarios, registro COM, certificados y salud del broker;
|
|
7. instala el guardián de reparación al arranque;
|
|
8. sólo entonces ejecuta `Add-Computer` dentro de `OU=Laboratorio` y reinicia;
|
|
9. al arrancar, activa RDP/NLA, WinRM y las reglas Domain, y vuelve a validar el
|
|
enrolamiento.
|
|
|
|
Para elegir adaptador o nombre del equipo explícitamente:
|
|
|
|
```powershell
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass `
|
|
-File .\Invoke-SguClientBootstrap.ps1 `
|
|
-DomainControllerIPv4Address 192.168.50.10 `
|
|
-NetworkInterfaceAlias 'Ethernet' `
|
|
-NewComputerName 'LCI-101'
|
|
```
|
|
|
|
La IP del argumento es siempre la IP fija **actual del servidor**, no una IP que
|
|
queda compilada en el Credential Provider. El proveedor usa después el nombre
|
|
DNS `sgu-auth.lci.lasalle.mx`, que el bootstrap del servidor actualiza.
|
|
|
|
Un administrador del dominio todavía puede ignorar deliberadamente este flujo y
|
|
ejecutar `Add-Computer` a mano; ninguna GPO puede impedir a un administrador del
|
|
bosque modificar el dominio. Para la operación soportada, el script aplica una
|
|
transacción proveedor-primero y se niega a unir un equipo que no haya pasado las
|
|
validaciones.
|
|
|
|
## Crear y publicar un release
|
|
|
|
Desde el repositorio y con el SDK fijado en `global.json`:
|
|
|
|
```powershell
|
|
.\scripts\New-SguBootstrapPackages.ps1 -Version 0.1.0
|
|
.\scripts\Publish-GiteaRelease.ps1 -Version 0.1.0
|
|
```
|
|
|
|
El segundo comando usa `GITEA_TOKEN` sólo en memoria o, si no está definido,
|
|
solicita la credencial existente a Git Credential Manager. No coloca el token en
|
|
la línea de comandos. Para empaquetar recursos institucionales adicionales:
|
|
|
|
```powershell
|
|
.\scripts\New-SguBootstrapPackages.ps1 `
|
|
-Version 0.1.0 `
|
|
-ServerContentPath C:\Preparacion\Packages
|
|
```
|
|
|
|
`SHA256SUMS-VERSION.txt` permite comprobar ambos ZIP antes de usarlos.
|