Files
SGU-CredentialProvider/docs/client-enrollment.md
T

139 lines
6.1 KiB
Markdown

# Enrolamiento obligatorio de clientes SGU
El flujo administrado instala y valida el Credential Provider **antes** de
ejecutar `Add-Computer`. La pertenencia al dominio es el último cambio; si falta
el runtime, un certificado, el registro COM, la directiva predeterminada o la
salud mTLS del broker, el script rechaza la unión.
Una cuenta administrativa todavía puede modificar Windows fuera de este flujo.
Por eso el enrolamiento también instala la tarea
`SGU-CredentialProvider-EnrollmentGuard`, ejecutada como `SYSTEM` al iniciar y
diariamente. La tarea conserva un paquete local protegido, repara el registro o
los binarios y vuelve a habilitar RDP/WinRM en equipos unidos al dominio. No
guarda contraseñas.
## 1. Preparar el nuevo Windows Enterprise
En la VM nueva, antes de unirla al dominio:
1. copiar `artifacts\credential-provider` y todos los scripts de `scripts`;
2. copiar el instalador offline más reciente de .NET 10 x64;
3. crear el certificado cliente no exportable:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\New-LabCertificate.ps1 `
-Role CredentialProviderClient
```
Copiar únicamente el `.cer` público al broker y registrarlo:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\Register-SguClientCertificate.ps1 `
-CertificatePath C:\SGUDeploy\new-client.cer
```
Exportar únicamente el certificado público actual del broker e importarlo en
el cliente con `Import-LabPeerCertificate.ps1`. Nunca copiar claves privadas.
## 2. Instalar, comprobar y unir en una sola operación
Ejecutar como administrador local dentro de la VM nueva. La credencial del
dominio se solicita de forma segura si no se proporciona como objeto
`PSCredential`:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\Enroll-SguDomainClient.ps1 `
-PublishPath C:\SGUDeploy\credential-provider `
-BrokerEndpoint https://sgu-auth.lci.lasalle.mx:8443/v1/authenticate `
-ClientCertificateThumbprint CLIENT_CERT_THUMBPRINT `
-ServerCertificateThumbprint SERVER_CERT_THUMBPRINT `
-DotNetRuntimeInstallerPath C:\SGUDeploy\dotnet-runtime-10-win-x64.exe `
-ComputerOuDn 'OU=Laboratorio,DC=lci,DC=lasalle,DC=mx' `
-NewComputerName LAB-W11-001
```
Orden de la transacción:
1. instala .NET y los binarios versionados;
2. registra COM, configura SGU como proveedor predeterminado y oculta el
último usuario que cerró sesión;
3. instala el guard de autorreparación;
4. exige health mTLS del broker y ejecuta las comprobaciones locales;
5. configura DNS del dominio;
6. sólo entonces ejecuta `Add-Computer` en `OU=Laboratorio` y reinicia;
7. al arrancar, el guard habilita RDP, NLA y WinRM y comprueba el estado final.
La directiva de Windows **Assign a default credential provider** selecciona SGU
por defecto. El instalador también habilita **Interactive logon: Don't display
last signed-in** y deshabilita **Enumerate local users on domain-joined
computers**. De este modo un usuario SGU desaparece después de cerrar sesión y
permanece el mosaico genérico **Other user**. No se instala ningún filtro: el
proveedor de contraseña de Microsoft permanece disponible para cuentas creadas
manualmente y recuperación.
La GPO existente **Deploy VSCodium** debe estar vinculada una vez a
`OU=Laboratorio` (configuración de equipo) y a `OU=Usuarios-SGU` (configuración
de usuario: fondo institucional). El parámetro `ComputerOuDn` coloca los
equipos nuevos directamente en `Laboratorio`; VSCodium se instala en el
siguiente arranque síncrono y el fondo se aplica al siguiente inicio de sesión
del usuario SGU.
En el controlador de dominio, aplicar una vez la directiva de usuario al árbol
completo `Usuarios-SGU`:
```powershell
.\Set-SguDomainUserPolicies.ps1
```
El script crea y vincula de forma idempotente el GPO
`SGU - User session restrictions` y configura `DisableLockWorkstation=1` para
Administrativos, Alumnos y Docentes. La directiva elimina la acción manual de
bloqueo; no sustituye otras directivas independientes de protector de pantalla,
inactividad o desconexión de RDP.
## 3. Verificación y reparación
```powershell
.\Test-SguClientEnrollment.ps1 `
-RequireDomainJoined `
-RequireRemoteAccess `
-RequireBrokerHealth `
-Enforce
Get-ScheduledTask -TaskName SGU-CredentialProvider-EnrollmentGuard
Start-ScheduledTask -TaskName SGU-CredentialProvider-EnrollmentGuard
```
Un resultado válido exige simultáneamente binario y registro COM, configuración,
certificados, .NET 10, proveedor SGU predeterminado, último usuario oculto,
enumeración local deshabilitada y proveedor de contraseña de Microsoft
preservado. El script de reparación se encuentra en
`C:\ProgramData\SGU\Enrollment` con ACL exclusiva para `SYSTEM` y
administradores.
## 4. Experiencia de LogonUI
El proveedor usa un mosaico genérico dedicado, no una credencial asociada al SID
anónimo de **Other user**. Windows muestra la imagen institucional y la etiqueta
`La Salle · Acceso SGU`; el encabezado `Acceso institucional SGU`
se publica como `CPFT_LARGE_TEXT` solamente en el mosaico seleccionado. LogonUI
elige la familia, el peso y el tamaño final y no expone opciones de tipografía a
un Credential Provider.
La configuración soportada garantiza que SGU queda seleccionado por defecto y
que no se conserva el último usuario. El orden vertical exacto de mosaicos lo
decide LogonUI y no tiene una directiva pública. Por seguridad no se filtra ni
se elimina **Other user**: Microsoft recomienda conservar al menos un proveedor
del sistema como ruta de recuperación.
Referencias de Microsoft:
- <https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-credentialproviders#defaultcredentialprovider>
- <https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon#enumeratelocalusersondomainjoinedcomputers>
- <https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-ctrlaltdel#disablelockcomputer>
- <https://learn.microsoft.com/en-us/windows/win32/api/credentialprovider/ne-credentialprovider-credential_provider_field_type>
- <https://learn.microsoft.com/en-us/windows/win32/api/credentialprovider/nf-credentialprovider-icredentialprovidercredential2-getusersid>