LAPS Deployment auf non-persistent VDI Images

Wie man LAPS auf normalen Windows Betriebssystemen verwendet, habe ich schon mal in diesem Artikel beschrieben. Was aber passiert mit LAPS in VDI Umgebungen mit non-persistent Images? Ein Beispiel hierfür sind XenDesktop Windows Client-OS Desktops oder XenDesktop Windows Server-OS Desktops, die über Citrix Provisioning Server aus einem Golden Image heraus gebootet werden und entweder nach jedem User Logoff neu gestartet werden (i.d.R. bei Windows Client-OS Desktops) oder z.B. nach einem Schedule jede Nacht oder einmal die Woche (i.d.R. bei Windows Server-OS Desktops).

  1. Der Computer bootet zum ersten Mal nach der LAPS Installation und der Konfiguration per GPO vom Golden Image
  2. Die LAPS Client Side Extension prüft den Wert des ms-Mcs-AdmPwdExpirationTime Attributes nach dem nächsten Group Policy Update. Der Wert steht auf „0“, da bisher noch kein Passwort für den Computer vergeben wurde.
  3. Ein neues Passwort wird auf dem Computer vergeben, ins AD geschrieben und das ms-Mcs-AdmPwdExpirationTime Attribut wird mit einem Ablaufdatum gemäß den Group Policy Einstellungen aktualisiert.
  4. Der Computer wird neu gestartet und bootet vom Golden Image mit dem alten Passwort.
  5. Die LAPS Client Side Extension prüft wieder den Wert des ms-Mcs-AdmPwdExpirationTime Attributes nach dem nächsten Group Policy Update. Der Wert steht nun auf dem Wert, der in Punkt 3 gesetzt wurde, ist also nicht „0“. Die LAPS Client Side Extension geht davon aus, dass das Passwort nicht geändert werden muss und behält den falschen Wert aus dem Golden Image.

Daraus folgt, dass im Prinzip das lokale Admin-Passwort auf VDI Hosts, die non-persistent sind, bei jedem Reboot gesetzt werden muss um mit dem AD konsistent zu sein. Da das Attribut ms-Mcs-AdmPwdExpirationTime dafür ausschlaggebende ist, müssen wir es also vor oder bei jedem Shutdown/Reboot des VDI Hosts zurücksetzen auf „0“.

Hierfür gibt es verschiedene Möglichkeiten, um dies z.B. per Shutdown Script oder per Shutdown-triggered Scheduled Tasks zu bewerkstelligen.

Option 1: VB Script

Die erste Möglichkeit ist es, sich per VB Script über LDAP mit dem AD zu verbinden und darüber das Attribut zurückzusetzen.

Set objSysInfo = CreateObject("ADSystemInfo")
Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)
objComputer.Put "ms-Mcs-AdmPwdExpirationTime", "0"
objComputer.SetInfo

Option 2: PowerShell Script Variante 1

Die Option per PowerShell Script Variante 1 hat den Nachteil, dass auf dem VDI Image das Active Directory PowerShell Modul installiert sein muss. Das ist  sicherheitstechnisch natürlich nicht optimal oder wünschenswert und sollte mit dem IT-Sicherheitsbeauftragten des Unternehmens unbedingt vorher abgesprochen werden.

Import-Module ActiveDirectory
$VDIHost = Get-ADComputer -Identity $env:COMPUTERNAME
$VDIHost.ms-Mcs-AdmPwdExpirationTime = "0"
Set-ADComputer -Instance $VDIHost

Option 3: PowerShell Script Variante 2, bereitgestellt von Citrix

Citrix stellt für LAPS in einer VDI ein eigenes PowerShell Script bereit (siehe Quellen-Angabe), welches wohl ohne die AD Module auskommt.

Write-Host "Retrieve current machine account"
$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
$Object = ([adsisearcher]$filter).FindOne().GetDirectoryEntry()
Write-Host "Reset the password expiration timer to 0"
$Object.psbase.InvokeSet("ms-Mcs-AdmPwdExpirationTime", 0)
Write-Host "Save changes to Active Directory object"
$Object.SetInfo()

Quellen:
https://www.citrix.com/blogs/2017/12/12/password-wars-randomizing-local-admin-passwords-in-non-persistent-environments/
https://blog.thesysadmins.co.uk/deploying-microsoft-laps-non-persistent-vdi.html

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.