Improve domain enrollment and desktop personalization

This commit is contained in:
2026-09-07 15:07:04 -06:00
parent c737bd3192
commit 9f32ed2cb1
30 changed files with 1259 additions and 51 deletions
+20 -10
View File
@@ -23,13 +23,15 @@ is forced because NTLM authentication is connection-bound.
The authoritative logical GET is sent to `/psulsa/`, a lightweight route that
returns the NTLM challenge without waiting for the slow application pages. A
`401` or `403` rejects the credential; an allowed `2xx` or `3xx` proves that IIS
accepted it. The broker then makes a separately bounded, best-effort GET to the
administrative incident overview for `AD`, the student information page for
`AL`, or the portal menu for `DO`. After the incident page confirms an `AD`
employee number, two additional GETs in the same in-memory session read the
structured name from `datos/personales.aspx` and the address from
`datos/ubicacion.aspx`. Docentes keep the menu name as a base and attempt those
same two shared staff modules without requiring them to exist. A supplemental
accepted it. The broker then makes separately bounded, best-effort profile GETs.
It uses the administrative incident overview for `AD`, the student information
page for `AL`, and the portal menu as a conservative base for `DO`. After the
incident page confirms an `AD` employee number, two additional GETs in the same
in-memory session read the structured name from `datos/personales.aspx` and the
address from `datos/ubicacion.aspx`. Docentes request
`nomina/consultanomina.aspx` for a matching employee number, email, employee
type and job title, then attempt the same two shared staff modules without
requiring any optional route to exist. A supplemental
404, changed/missing element ID, other failure, or timeout preserves fields
already collected, and a profile timeout does not invalidate an already
authenticated credential. NTLM may still require its normal
@@ -62,9 +64,10 @@ updates the applicable `displayName`, `givenName`, `sn`, `mail`, `title`,
`postalCode` attributes. Administrative and student numbers must match the six
numeric digits of the requested identity before any role-specific metadata is
trusted. Administrative personal and location pages are accepted only after
that incident-page match. A docente's supplemental fields remain tied to the
fresh NTLM-authenticated portal session and are optional; the menu display name
remains usable if neither shared page is available. Student faculty/department
that incident-page match. Docente payroll metadata must match the requested
six-digit number; all docente supplemental fields remain tied to the fresh
NTLM-authenticated portal session and are optional. The menu display name
remains usable if the payroll or shared staff pages are unavailable. Student faculty/department
is deliberately left unset because the verified page does not expose it.
Missing metadata does not clear existing AD values and never changes the
password outcome.
@@ -105,6 +108,13 @@ to `OU=Laboratorio`; it suppresses first-logon/privacy/diagnostic prompts,
disables location, and enforces always-on display, sleep, and hibernation
settings for managed clients.
That computer GPO also owns the base lock-screen image and a per-logon command
for the personalized desktop wallpaper. The client-side renderer reads the
authenticated user's `displayName` plus the computer object's `location` and
immediate parent OU, then composes those values over the bundled dark-blue
background with the bundled Indivisa fonts. Missing directory attributes degrade
to deterministic text and never block the interactive session.
The domain controller is also the source-initiated Windows Event Collector for
managed laboratory computers. Kerberos-authenticated WEF sends only selected
logon/logoff, failed-logon, reconnect/disconnect, and operating-system power
+4 -3
View File
@@ -66,9 +66,10 @@ continúa por la NIC que tenga el gateway predeterminado.
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.
el release se copian al recurso compartido. El paquete siempre incluye
`welcome-wallpaper`: fondo azul, fuentes Indivisa y generador de respaldo para
reparación o actualización de clientes. La GPO de equipos inicia la copia local
del generador en cada sesión; ya no se impone un único fondo estático por usuario.
Estado y diagnóstico:
+3 -2
View File
@@ -51,8 +51,9 @@ Eso es comportamiento esperado, no una caída del servicio.
`/psulsa/`. El enriquecimiento usa el límite total independiente
`ProfileTimeoutSeconds` —**90 segundos** en la configuración del laboratorio—
y conserva los campos que alcance a obtener si una página de personal se
retrasa, no existe o cambia sus IDs. Esto incluye los módulos opcionales de
nombre y ubicación para docentes. El Credential Provider mantiene su propio límite de **90
retrasa, no existe o cambia sus IDs. Para docentes esto incluye consulta de
nómina —clave, nombre, correo, tipo y puesto— más los módulos opcionales de
nombre y ubicación. El Credential Provider mantiene su propio límite de **90
segundos**: si SGU excede ese presupuesto, Windows continúa por el fallback
normal de AD o credenciales de dominio en caché.
- El instalador configura recuperación del servicio con reinicios a los 5, 15
+5
View File
@@ -112,6 +112,11 @@ pantalla, suspensión, hibernación y suspensión híbrida, conectado a corrient
batería. El guard de enrolamiento vuelve a aplicar `powercfg /hibernate off` y
los tiempos en cero al inicio y diariamente.
Esa GPO también ejecuta el generador local del fondo de bienvenida y aplica el
fondo azul base a la pantalla de bloqueo. El fondo individual se crea al abrir la
sesión con el nombre del usuario y `location`/OU del equipo; véase
[welcome-wallpaper.md](welcome-wallpaper.md).
`HideEULAPage` no forma parte de esta GPO: es una opción de archivo Unattend para
la fase OOBE y Microsoft la reserva para pruebas de OEM/System Builder. La GPO
usa las alternativas soportadas `DisablePrivacyExperience=1` y
+29 -3
View File
@@ -21,33 +21,53 @@ sudo bash ./Enroll-SguLinuxDomainClient.sh \
--domain-controller 192.168.50.10 \
--domain-interface eth0 \
--domain-address 192.168.50.12/24 \
--enable-ssh
--enable-ssh \
--enable-hyperv-enhanced-session
```
`--domain-interface` y `--domain-address` son opcionales como pareja. Si ya se aprovisionó la red privada mediante cloud-init, DHCP o gestión de configuración, omítelos y conserva únicamente `--domain-controller`.
El script se niega a reconfigurar una interfaz que posea la ruta predeterminada; así no deja a la máquina sin salida a Internet al agregar AD.
En Ubuntu con GNOME, cierra la sesión gráfica de **Sesión básica** antes de
entrar con el mismo usuario mediante **Sesión mejorada**. GNOME no admite dos
escritorios simultáneos del mismo usuario; intentar conservar ambos produce una
pantalla negra aunque XRDP haya autenticado correctamente. El inicio automático
de sesión de GDM también debe permanecer deshabilitado.
## Qué instala y configura
1. Instala `realmd`, `adcli`, SSSD, Kerberos y los módulos NSS/PAM adecuados para la familia de distribución.
2. Comprueba el registro DNS SRV de Active Directory y sincronización de hora ya existente.
3. Establece el nombre de host `NOMBRE.lci.lasalle.mx` antes de crear la cuenta de equipo.
4. Une el equipo con `adcli` en `OU=Laboratorio`.
5. Activa SSSD, creación de directorio personal mediante PAM y valida la contraseña de la cuenta de equipo con `adcli testjoin`.
5. Activa SSSD, creación de directorio personal mediante PAM y valida la contraseña de la cuenta de equipo con `adcli testjoin`. En distribuciones que habilitan los respondedores NSS/PAM de SSSD tanto en `sssd.conf` como mediante sockets de systemd, desactiva los sockets duplicados para evitar una colisión al arrancar.
6. Cuando se proporcionó la NIC privada, activa actualizaciones DNS dinámicas de SSSD en esa interfaz.
7. Con `--enable-ssh`, instala y habilita OpenSSH y abre únicamente el servicio SSH cuando el firewall local ya está activo.
8. Registra `lightdm` y `cinnamon-screensaver` como inicios interactivos ante las políticas GPO de SSSD. En equipos con LightDM también muestra el ingreso manual, necesario para el primer acceso de un usuario del dominio.
9. Con `--enable-hyperv-enhanced-session`, configura XRDP sobre Hyper-V sockets para que VMConnect pueda usar **Sesión mejorada**, repara certificados incompletos, registra `xrdp-sesman` en el mismo mapa interactivo y valida ambos servicios XRDP.
10. Instala el fondo azul, las fuentes Indivisa y un autoinicio compatible con Cinnamon, GNOME y XFCE. En cada sesión gráfica genera el saludo con el nombre del usuario y la ubicación/OU del equipo obtenidas de AD.
El objeto de equipo aparece como `NOMBRE` en `OU=Laboratorio`. SSSD registra su registro A cuando la actualización DNS dinámica está activada.
## Inicio de sesión de dominio
Después de la unión, el formato explícito es:
Después de la unión se acepta directamente la clave institucional corta:
```text
al201428
```
El formato UPN explícito también permanece disponible:
```text
usuario@lci.lasalle.mx
```
En Linux Mint, selecciona **Iniciar sesión** o el campo manual de usuario en
Slick Greeter y escribe la clave corta. El mosaico con el nombre de una cuenta
local no cambia de identidad al escribir únicamente otra contraseña.
La primera sesión crea `/home/usuario@lci.lasalle.mx`. El valor predeterminado de SSSD conserva credenciales para desconexiones breves de la red; las contraseñas no son administradas ni almacenadas por el Auth Broker.
Para limitar quién puede iniciar sesión, incluye un grupo de AD:
@@ -67,6 +87,8 @@ realm list
sudo adcli testjoin --domain=lci.lasalle.mx
getent passwd 'usuario@lci.lasalle.mx'
sudo sssctl domain-status lci.lasalle.mx
sudo sssctl user-checks usuario -a acct -s lightdm
sudo sssctl user-checks usuario -a acct -s cinnamon-screensaver
```
Para sacar un equipo del dominio de forma explícita:
@@ -76,3 +98,7 @@ sudo realm leave lci.lasalle.mx
```
Esta última acción elimina la relación de confianza local; debe ejecutarse sólo durante baja o reconstrucción del equipo.
La personalización gráfica es deliberadamente opcional: si ImageMagick, LDAP o
la API del escritorio fallan, no revierte la unión ni impide iniciar sesión. Consulta
los detalles y las reglas de degradación en [welcome-wallpaper.md](welcome-wallpaper.md).
+11 -7
View File
@@ -43,16 +43,20 @@
city/municipality, state, and postal code from known element IDs.
- Student CURP, birth date, sex, blood type, marital status, telephone, mobile,
guardian, medical, financial, and academic-history values are ignored.
- Professor enrichment keeps the menu display name as its base and optionally
reads only the same name and postal-address element IDs used by staff pages.
A missing professor route or element never makes authentication fail.
- Incident details, calendars, photographs, manager names, and manager positions
are deliberately ignored.
- Professor enrichment keeps the menu display name as its base. From the payroll
consultation header it reads only a matching employee number, name, email,
employee type/status, job title, and the optional department field. It then
optionally reads the same structured-name and postal-address element IDs used
by staff pages. A missing professor route or element never makes authentication
fail.
- Payroll/receipt contents, incident details, calendars, photographs, manager
names, and manager positions are deliberately ignored.
- The employee or student number must match the authenticated `AD` or `AL` key
before role-specific metadata is synchronized. The two supplemental
administrative pages are never requested unless the incident page supplied
the matching employee number. Professor supplemental data comes from the
same fresh, request-scoped NTLM session as its menu fallback.
the matching employee number. Professor payroll metadata independently
requires the matching six-digit number, and every supplemental request uses
the same fresh, request-scoped NTLM session as its menu fallback.
- If SGU changes its HTML, authentication and exact-password synchronization
continue without enrichment; existing AD metadata is not erased.
- Slow profile pages cannot change an accepted credential into a rejection. The
+62
View File
@@ -0,0 +1,62 @@
# Fondo de bienvenida personalizado
El enrolamiento instala un fondo base azul, las familias `Indivisa Text Sans` y
`Indivisa Text Serif`, y un generador local. La GPO de equipos
`SGU - Windows client experience` ejecuta el generador al abrir cada sesión y
mantiene el fondo base en la pantalla de bloqueo.
Windows no conoce todavía la identidad que se autenticará mientras muestra la
pantalla previa al inicio de sesión. Por ello, esa pantalla utiliza el fondo base
sin datos personales y la composición individual se genera inmediatamente
después de autenticar, antes de que el usuario empiece a trabajar en el escritorio.
## Datos y degradación controlada
El generador consulta Active Directory con la identidad ya autenticada y sin
guardar credenciales. Obtiene:
- `displayName` del usuario; si falta, utiliza `sAMAccountName`.
- `location` del objeto de equipo.
- La OU padre inmediata a partir de `distinguishedName`.
El texto secundario sigue estas reglas:
1. Con `location` y OU: `Estás ubicado en la Sala de Inmersión del Centro de Experiencia Digital.`
2. Con sólo uno de los datos: muestra únicamente el dato disponible.
3. Sin ambos: `Bienvenido al Laboratorio de Cómputo de Ingeniería.`
La ausencia de AD, de un atributo o de una tipografía nunca bloquea la sesión.
Los errores de generación se registran en
`%LOCALAPPDATA%\SGU\Logs\welcome-wallpaper.log`.
## Windows
El paquete de cliente copia los recursos a `C:\ProgramData\SGU\Branding`. La
GPO crea el valor de equipo `SGUWelcomeWallpaper` bajo
`HKLM\Software\Microsoft\Windows\CurrentVersion\Run`; por tanto, se ejecuta en
el contexto de cada usuario y puede leer sus datos de AD. El resultado se guarda
en `%LOCALAPPDATA%\SGU\Wallpapers` y se aplica con la API nativa de Windows.
La antigua directiva estática de escritorio se elimina para que no sobrescriba
el archivo individual. La personalización sigue estando gobernada por dominio:
el comando de inicio y la pantalla de bloqueo pertenecen a la GPO de equipos.
## Linux
El paquete Linux instala el generador en
`/usr/local/lib/sgu-welcome-wallpaper` y registra
`/etc/xdg/autostart/sgu-welcome-wallpaper.desktop`. Utiliza el ticket Kerberos
creado por SSSD para consultar el objeto de equipo mediante LDAP; nunca contiene
una contraseña de enlace.
Se admiten Cinnamon, GNOME y XFCE. La composición requiere ImageMagick; si la
dependencia o la API del escritorio no está disponible, el enrolamiento y el
inicio de sesión continúan normalmente y se escribe un diagnóstico en
`~/.local/state/sgu/welcome-wallpaper.log`.
## Tipografía
Los archivos OTF necesarios viajan dentro de cada paquete y se cargan en memoria
para renderizar el fondo; no se sustituyen fuentes del sistema. Se usa Sans en el
saludo y la ubicación, y Serif Bold Italic en el nombre. Si los archivos no
pueden cargarse, Windows usa Segoe UI/Georgia y Linux usa DejaVu Sans/Serif.
+6
View File
@@ -129,6 +129,12 @@ configuración siempre activa y evita las experiencias iniciales de privacidad,
telemetría, ubicación y **Hi / Preparing Windows** antes de que un usuario SGU
entre por primera vez.
La misma GPO configura el fondo azul de bloqueo y ejecuta el generador local al
abrir cada sesión. El generador usa el `displayName` del usuario, la propiedad
`location` del equipo y su OU padre inmediata para crear el fondo individual.
Consulta [welcome-wallpaper.md](welcome-wallpaper.md) para conocer los fallbacks
y la ubicación de los diagnósticos.
Microsoft documenta este derecho en:
<https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-userrights#allowlogonthroughremotedesktop>
y PowerShell Remoting en: