# 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: - - - - -