Auf Edge-Geräten gilt wie auf vielen anderen Geräten auch: Ein Nutzer sollte nur so viele Rechte haben, wie er wirklich benötigt. Systeme, bei denen alles als Administrator ausgeführt wird, stellen ein erhöhtes Sicherheitsrisiko dar. Aus diesem Grund werden auf den Images häufig zusätzliche Nutzer eingerichtet. Anpassungen am System, die für diese Nutzer gemacht werden sollen, benötigen im Deployment-Prozess besondere Aufmerksamkeit.
In unserem Szenario gibt es zwei Benutzerkonten. Das erste Benutzerkonto bezeichnen wir als Administratoren-Konto. Dieses Konto wird von MDT erstellt und während des Deployments benutzt. Anpassungen an diesem Konto können somit direkt von MDT ausgeführt werden.
Das zweite Konto soll ein einfaches Benutzerkonto sein. Zur Erstellung des Kontos kann eine Answer-Datei, wie im Bild unten gezeigt, benutzt werden. Alternativ kann ein neuer Nutzer während des Deployments durch Nutzung des Befehls “Net user {Username} {Password} /ADD” angelegt werden.
Während der Ausführung des Deployments soll nun die Registry dieses Nutzers angepasst werden und dies bringt uns zu einer weiteren Hürde: Der Registry Hive, den wir manipulieren wollen, existiert noch nicht. Dieser existiert erst ab dem Zeitpunkt, zu dem sich der Nutzer das erste Mal am System anmeldet. Da wir uns mitten im Deployment befinden, bedienen wir uns folgenden kleinen Workarounds:
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process cmd.exe -Credential $credential -ArgumentList “/c” -Wait
In Schritt 1 erzeugen wir einen Secure-String des Benutzerpassworts. Dieser wird benötigt, damit im nächsten Schritt ein Credential Objekt erzeugt werden kann, welches den zweiten Nutzer repräsentiert. Im dritten Schritt wird daraufhin ein neuer Prozess im Kontext dieses Nutzers ausgeführt.
Der Einfachheit halber starten wir eine Kommandozeile und lassen diese durch den Schalter “/C” direkt wieder schließen. Das Argument “Wait” lässt PowerShell auf die Beendigung des Prozesses warten. Nach Durchführung dieser drei Schritte ist die Registry des zweiten Nutzers verfügbar und wir können sie manipulieren. Hierzu laden wir die Registry des Nutzers in einen neuen Knoten:
reg load HKLM\{Benutzername} C:\Users\{Benutzername}\ntuser.dat
Sobald die Registry angepasst wurde, kann die Registry wieder entladen werden. Sonst ist diese Registry für den Benutzer gesperrt.
Hierfür wird folgender Befehl eingesetzt:
reg unload HKLM\{Benutzername}
Hierbei kann es allerdings zu Zugriffsfehlern kommen. Diese sind darin begründet, dass der Garbage Collector von PowerShell noch nicht alle Zugriffe wieder freigegeben hat. Um die Freigabe zu forcieren, kann der Garbage Collector direkt zum Aufräumen aufgefordert und bis zum Abschluss der Aufräumarbeiten gewartet werden. Hierzu sind folgende Befehle notwendig:
[gc]::Collect()
[gc]::WaitForPendingFinalizers()
Spätestens jetzt sollte das Entladen ohne Fehler funktionieren. Es sei an dieser Stelle nochmals darauf verwiesen, dass zum Ausführen des PowerShell-Skripts die ExecutionPolicy entsprechend gesetzt sein muss. Ein Beispiel hierzu haben wir im vorangegangene Blogpost gezeigt.
Hinweis: Ist die SID des zweiten Nutzers bekannt, so muss der gezeigte Workaround nicht genutzt werden, sondern die Registry des Nutzers kann direkt unter HKEY_USER\{SID} angesprochen werden. Um die SID zu ermitteln, sei auf folgenden Artikel verwiesen: Wie kann ich die SID eines Windows-Benutzers auslesen?
Im letzten Teil unserer Serie schauen wir uns an, wieso das Setzen des Autologins nach dem MDT Durchlauf nicht funktioniert hat.
Haben Sie Ideen für IoT Lösungen auf der Edge oder in der Cloud? Wir unterstützen Sie gerne bei der Planung und der Umsetzung Ihrer Lösung. Mit unserem Baukastensystem AIT Smart Edge (aitgmbh.de) ermöglichen wir es Ihnen, schneller zu einem ersten Produkt zu gelangen, damit Sie möglichst schnell einen Mehrwert für Ihre Kunden schaffen können.