Enforce SGU sign-in and session policies

This commit is contained in:
2026-09-01 15:48:26 -06:00
parent 0391320a3e
commit a166193b66
9 changed files with 227 additions and 29 deletions
+12 -8
View File
@@ -73,16 +73,20 @@ Every synchronized user also receives `Universidad La Salle` in the AD
The generic SGU credential is rendered as a dedicated branded tile instead of
being grouped below the anonymous **Other user** tile. Machine policy assigns
the SGU CLSID as the default provider while retaining the built-in Microsoft
password provider. It enumerates one `CPFT_TILE_IMAGE` and places the
`CPFT_LARGE_TEXT` heading immediately after it with `CPFS_DISPLAY_IN_BOTH`,
matching Microsoft's supported field ordering. LogonUI owns field typography:
on Windows 10 and 11, the account-name title used by **Other user** is shell UI,
not a style that a generic Credential Provider can request. Do not add a second
tile image or a synthetic Windows account to imitate that title.
the SGU CLSID as the default provider, hides the last signed-in identity, and
disables local-user enumeration while retaining the built-in Microsoft password
provider and its **Other user** recovery path. It enumerates one
`CPFT_TILE_IMAGE` and places the `CPFT_LARGE_TEXT` heading immediately after it
with `CPFS_DISPLAY_IN_SELECTED_TILE`. LogonUI owns field typography and vertical
tile order: on Windows 10 and 11, the account-name title used by **Other user**
is shell UI, not a style that a generic Credential Provider can request. Do not
add a second tile image, filter the system password provider, or create a
synthetic Windows account to imitate that title or ordering.
The managed hierarchy is rooted at `OU=Usuarios-SGU`: `Docentes`, `Alumnos`,
and `Administrativos` are direct child OUs beneath it.
and `Administrativos` are direct child OUs beneath it. The domain GPO
`SGU - User session restrictions` is linked to this root and enables the
per-user `DisableLockWorkstation` policy for the complete hierarchy.
Per-user synchronization is serialized inside the broker to prevent concurrent
create/reset races. Production deployments should run the broker as a gMSA with
+38 -10
View File
@@ -57,7 +57,8 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass `
Orden de la transacción:
1. instala .NET y los binarios versionados;
2. registra COM y configura SGU como proveedor predeterminado;
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;
@@ -65,8 +66,25 @@ Orden de la transacción:
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. No se instala ningún filtro: el proveedor de contraseña de
Microsoft permanece disponible para cuentas creadas manualmente y recuperación.
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.
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
@@ -82,21 +100,31 @@ 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 y proveedor de contraseña de
Microsoft preservado. El script de reparación se encuentra en
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 puede mostrar ahora la imagen institucional y
la etiqueta `Universidad La Salle · Acceso SGU`, además del encabezado
`Acceso institucional SGU`. El orden visual exacto de los iconos de opciones lo
decide Windows; lo administrable y exigido es cuál aparece seleccionado por
defecto.
anónimo de **Other user**. Windows muestra la imagen institucional y la etiqueta
`Universidad 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>
+12 -3
View File
@@ -129,9 +129,18 @@ On Windows 10:
-DotNetRuntimeInstallerPath C:\SGUDeploy\prerequisites\dotnet-runtime-10.0.11-win-x64.exe
```
Use Lithnet's `Invoke-CredUI` test utility when available, or lock the VM and
select **Acceso institucional SGU** under sign-in options. Keep the built-in
Windows password tile visible.
Use Lithnet's `Invoke-CredUI` test utility when available, or sign out/restart
the VM and select **Acceso institucional SGU**. Keep the built-in Windows
password provider available through **Other user**.
On the domain controller, apply the SGU user policy once:
```powershell
.\Set-SguDomainUserPolicies.ps1
```
It links `SGU - User session restrictions` to `OU=Usuarios-SGU` and prevents
managed users from manually locking the workstation.
Before testing through Hyper-V Enhanced Session/RDP, enable the dedicated lab
group and Windows PowerShell Remoting:
+6 -5
View File
@@ -90,12 +90,13 @@ contenido. De esta forma se puede preparar una actualización aunque
`LogonUI.exe` todavía tenga cargada la DLL anterior; el reinicio obligatorio
activa la nueva versión.
El instalador también asigna SGU como proveedor predeterminado mediante la
directiva de equipo de Windows. No modifica ni oculta el proveedor de contraseña
de Microsoft.
El instalador también asigna SGU como proveedor predeterminado, oculta el último
usuario que cerró sesión y deshabilita la enumeración de usuarios locales en el
equipo unido al dominio. No modifica ni oculta el proveedor de contraseña de
Microsoft; **Other user** permanece como ruta de recuperación.
Bloquear el equipo, abrir **Sign-in options** y elegir el icono azul con llave
del acceso SGU. El proveedor de contraseña de Microsoft debe permanecer visible.
Cerrar sesión o reiniciar el equipo. El acceso SGU debe quedar seleccionado por
defecto y el proveedor de contraseña de Microsoft debe permanecer disponible.
## 5. Verificación