Windows 10 Kioskmodus mit DSM Boardmitteln

By | 28. März 2018

Es gibt viele gute Gründe, PCs im Kioskmodus einzusetzen wie zum Anzeigen von Bildern verschiedener Überwachungskameras, zur Steuerung von Anlagen mit Touchpanel PCs und viele mehr. Sie haben alle eins gemeinsam: Sie zeigen etwas an und der Benutzer kann keine oder nur wenige vordefinierte Aktionen durchführen. Windows 10 bietet da die Funktion „zugewiesener Zugriff“ an. Das funktioniert mit den „Modern Apps“ recht gut, mit klassischen .exe Dateien oder sogar .bat Dateien inzwischen bei Windows 10 auch. Die ursprüngliche Anforderung kam jedoch unter Windows 8.1 x64, wo nur „Modern Apps“ funktioniert haben. Mir blieb also nichts anderes übrig, als einen Workaround zu finden, den ich hier vorstellen möchte.

Voraus möchte ich noch schicken, dass ich versuche, alles sehr modular aufzubauen, sodass sich die einzelnen Module möglichst beliebig austauschen lassen, was die Wartung, Administration und Übersichtlichkeit sehr vereinfacht:

In meinem Fall ist nur die Funktion entscheidend, die verwendete Windows-Version ist dieselbe, welche wir für klassische Desktops oder Notebooks verwenden – und diese wird auch so installiert.

Die Überlegung war also, ein „Standard Windows“ so zu härten, dass ein Anwender nur die vorgesehene Funktion nutzen und aus dem Kioskmodus nicht ausbrechen kann. Die Wahl fiel auf einen lokalen Benutzer (keine Rechte im AD und Netzwerk), welcher bei jedem Start des Rechners automatisch eingeloggt wird, dessen Passwort nicht abläuft und der sein Passwort nicht ändern kann:

 

in der Script.inc sieht dies folgendermaßen aus:

!Anlegen des lokalen Benutzers, Autologin und Passwort
LocalUserCreate(‚kiosk_v‘,’kiosk_v‘,’Kioskbenutzer fuer V-Image‘,’k2EF61E329670485FDA4366755682G7EAEDB82′,ufDontExpirePassword+ufPasswordCantChange)/TS
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’AutoAdminLogon‘,’1′,reUseX64Hive+mrReplace)/TS
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’DefaultUserName‘,’kiosk_v‘,reUseX64Hive+mrReplace)/TS
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’DefaultPassword‘,'<hier steht das Passwort im Klartext>‘,reUseX64Hive+mrReplace)/TS

Danach soll die Shell so umgebogen werden, dass nur noch das gewünschte Programm ausgeführt wird, anstatt die Explorer Shell zu starten. Wer sich nicht ganz sicher ist, was die Shell alles ist, kann dies gerne hier nachlesen.  Der Registry Key dazu befindet sich hier:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

Dies würde jedoch die Shell für alle Benutzer des Rechners umbiegen, was unter Sicherheitsaspekten gut, aber unter dem Aspekt der Wartbarkeit des Rechners eher suboptimal ist. Bei Recherchen fand ich dann die Möglichkeit, die Shell von computerbasiert auf userbasiert umzustellen. So kann der Kiosk-Benutzer seine Arbeitsapplikation starten, während für andere Benutzer (wie z. B. im Helpdesk) die normale Explorer Shell gestartet wird. Für den Remote-Support ein großer Vorteil. Für die Umsetzung sind 2 Regkeys nötig:

Als Script sieht dies folgendermaßen aus:

!Umbiegen der Windows Shell von eine Shell für alle auf eine Shell pro Benutzer
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot‘,’Shell‘,’USR:Software\Microsoft\Windows NT\CurrentVersion\Winlogon‘,reUseX64Hive+mrReplace)/TS
!…dazu muss auch der allgemeine Shell link gelöscht werden
RegDeleteKey(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’Shell‘,reUseX64Hive)/X/TS

Zusammengefasst haben wir jetzt einen lokalen Benutzer, der sein Passwort nicht ändern kann (und das nicht abläuft), mit einer individuellen Shell.

Um das System weiter zu härten, soll dem lokalen Benutzer noch das Aufrufen des Taskmanagers, das Ändern des Passworts und das Sperren der Arbeitsstation verboten werden. Er soll sich nur abmelden können, um dann bei Bedarf den Account einen Supportmitarbeiters einloggen zu können. Dies erfolgt über folgende Regkeys:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System

Darin sollen folgende DWord Werte angelegt werden:

DisableLockWorkstation=1

DisableTaskMgr=1

DisableChangePassword=1

Um in diesen Teil der Kiosk-Benutzer Registry schreiben zu können, muss der Computer mindestens einmal mit dem Kiosk-Benutzer eingeloggt werden. Es ist also ein Neustart nötig und das Skript muss danach fortgesetzt werden.

Als Script sieht dies folgendermaßen aus:

System_Reset/TW
EndInstallerSession/TW
ExitProc(Undone)

Jetzt können die Registry-Werte gesetzt werden (wichtig ist, die Befehle als benutzerbezogen zu flaggen, damit diese in den richtigen Benutzerschlüssel eingetragen werden):

Als Script sieht dies folgendermaßen aus:

!Setzen der Benutzereinstellungen
If IsUser(‚kiosk_v‘)
RegModifyDWord(‚HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System‘,’DisableLockWorkstation‘,’1′,mrdwSet)/TU
RegModifyDWord(‚HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System‘,’DisableTaskMgr‘,’1′,mrdwSet)/TU
RegModifyDWord(‚HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System‘,’DisableChangePassword‘,’1′,mrdwSet)/TU
System_Reset/TW
EndInstallerSession/TW
ExitProc(Done)
!

Anschließend habe ich noch einen Neustart eingebaut (diesmal aber mit erfolgreicher Beendigung des Paketes), damit die Einstellungen wirksam werden:

Als Script sieht dies folgendermaßen aus:

System_Reset/TW
EndInstallerSession/TW
ExitProc(Done)

Damit ergibt sich zusammengefasst folgendes Skript:

Als Script sieht dies folgendermaßen aus:

!Anlegen des lokalen Benutzers, Autologin und Passwort
LocalUserCreate(‚kiosk_v‘,’kiosk_v‘,’Kioskbenutzer fuer V-Image‘,’k2EF61E329670485FDA4366755682G7EAEDB82′,ufDontExpirePassword+ufPasswordCantChange)/TS
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’AutoAdminLogon‘,’1′,reUseX64Hive+mrReplace)/TS
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’DefaultUserName‘,’kiosk_v‘,reUseX64Hive+mrReplace)/TS
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’DefaultPassword‘,'<hier steht das Passwort im Klartext>‘,reUseX64Hive+mrReplace)/TS
!
!Umbiegen der Windows Shell von eine Shell für alle auf eine Shell pro Benutzer
RegModify(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot‘,’Shell‘,’USR:Software\Microsoft\Windows NT\CurrentVersion\Winlogon‘,reUseX64Hive+mrReplace)/TS
!…dazu muss auch der allgemeine Shell link gelöscht werden
RegDeleteKey(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’Shell‘,reUseX64Hive)/X/TS
!
System_Reset/TW
EndInstallerSession/TW
ExitProc(Undone)
!
!Setzen der Benutzereinstellungen
If IsUser(‚kiosk_v‘)
RegModifyDWord(‚HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System‘,’DisableLockWorkstation‘,’1′,mrdwSet)/TU
RegModifyDWord(‚HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System‘,’DisableTaskMgr‘,’1′,mrdwSet)/TU
RegModifyDWord(‚HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System‘,’DisableChangePassword‘,’1′,mrdwSet)/TU
System_Reset/TW
EndInstallerSession/TW
ExitProc(Done)
!

Der Kiosk-Benutzer ist nun soweit fertig, es fehlt nur noch das „Kiosk-Programm“, das die Standard-Windows-Shell des Benutzers ersetzt. Wir nutzen viele verschiedene Kiosk-Systeme, daher bietet sich auch hier eine Modularisierung an: Ein Paket für die „Basiseinstellungen Kiosk PC“ (das Script oberhalb des Textes) und ein Paket für die eventuell zu installierende Kiosk-Software und das Umstellen der User-Shell. In diesem Beispiel ist dies der Internet Explorer:

Als Script sieht dies folgendermaßen aus:

If IsUser(‚kiosk_v‘)
RegModify(‚HKEY_USERS\%var_usersid%\Software\Microsoft\Windows NT\CurrentVersion\Winlogon‘,’Shell‘,'“C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE“‚,mrReplace)/TW
System_Reset/?/TW
EndInstallerSession/TW

Die If-Abfrage dient auch hier dazu zu verhindern, dass eventuell andere Benutzer (wie der Helpdesk-Mitarbeiter) auch die neue Shell bekommen.