/RunAsLoggedOnAdmin hat weniger Rechte als /RunAsLoggedOnUser?

Antworten
lukas.e
Beiträge: 14
Registriert: 18 Sep 2019, 14:29

/RunAsLoggedOnAdmin hat weniger Rechte als /RunAsLoggedOnUser?

Beitrag von lukas.e »

Um das Problem zu illustrieren habe ich folgenden opsi-script-Schnipsel:

Code: Alles auswählen

  Set $TempFile$ = "%opsiTmpDir%\test.ps1"
  Set $StringList$ = createStringList("whoami", "echo test")
  if not(saveTextFile($StringList$, $TempFile$))
    LogError("Could not save file to " + $TempFile$)
    isFatalError
  endif

  WinBatch_simulate_execwith /RunAsLoggedOnAdmin

  WinBatch_simulate_execwith /RunAsLoggedOnUser
Diesen Schnipsel habe ich in einem installierten Userlogin-Skript integriert.
Das Bizarre ist nun, dass das PowerShell-Skript mit /RunAsLoggedOnUser funktioniert,
aber mit /RunAsLoggedOnAdmin nicht.

Um das Problem zu debuggen, habe ich winst32.exe gepatcht, sodass der output von WinBatch-Sektionen angezeigt wird.
Dabei ergibt sich folgendes Bild.

Code: Alles auswählen

(32103)   [6] [Nov 11 16:09:10:319] [lukas-winst-test]   Set  $TempFile$ = "c:\opsi.org\tmp\test.ps1"
(32104)   [6] [Nov 11 16:09:10:319] [lukas-winst-test]     The value of the variable "$TempFile$" is now: "c:\opsi.org\tmp\test.ps1"
(32105)   [6] [Nov 11 16:09:10:320] [lukas-winst-test]   Set  $StringList$ = createStringList("whoami", "echo test")
(32106)   [7] [Nov 11 16:09:10:320] [lukas-winst-test]     The value of the variable "$StringList$" is now:
(32107)   [7] [Nov 11 16:09:10:320] [lukas-winst-test]     (string   0)whoami
(32108)   [7] [Nov 11 16:09:10:320] [lukas-winst-test]     (string   1)echo test
(32109)   [6] [Nov 11 16:09:10:320] [lukas-winst-test]   If
(32110)   [7] [Nov 11 16:09:10:320] [lukas-winst-test]     Save to file with encoding: system
(32111)   [7] [Nov 11 16:09:10:323] [lukas-winst-test]     saveTextFile($StringList$, $TempFile$)   <<< result true
(32112)   [6] [Nov 11 16:09:10:324] [lukas-winst-test]     not(saveTextFile($StringList$, $TempFile$))   <<< result false
(32113)   [6] [Nov 11 16:09:10:324] [lukas-winst-test]   Then
(32114)   [6] [Nov 11 16:09:10:324] [lukas-winst-test]   EndIf
(32115)   [5] [Nov 11 16:09:10:325] [lukas-winst-test]   Execution of: Actions /RunAsLoggedOnAdmin
(32116)   [5] [Nov 11 16:09:10:325] [lukas-winst-test]   
(32117)   [6] [Nov 11 16:09:10:325] [lukas-winst-test]     Call ""powershell.exe" -ExecutionPolicy Bypass "c:\opsi.org\tmp\test.ps1""
(32118)   [6] [Nov 11 16:09:10:325] [lukas-winst-test]        Waiting until the called process is finished
(32119)   [7] [Nov 11 16:09:10:332] [lukas-winst-test]     Created process as temporary Admin opsiSetupAdmin
(32120)   [6] [Nov 11 16:09:11:338] [lukas-winst-test]     ExitCode 1    Executed process ""powershell.exe" -ExecutionPolicy Bypass "c:\opsi.org\tmp\test.ps1""
(32121)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       output:
(32122)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       --------------
(32123)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       c:\opsi.org\tmp\test.ps1 : Die Benennung "c:\opsi.org\tmp\test.ps1" wurde nicht als Name eines Cmdlet, einer Funktion,
(32124)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der
(32125)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
(32126)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       In Zeile:1 Zeichen:1
(32127)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       + c:\opsi.org\tmp\test.ps1
(32128)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       + ~~~~~~~~~~~~~~~~~~~~~~~~
(32129)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]           + CategoryInfo          : ObjectNotFound: (c:\opsi.org\tmp\test.ps1:String) [], CommandNotFoundException
(32130)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]           + FullyQualifiedErrorId : CommandNotFoundException
(32131)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       
(32132)   [7] [Nov 11 16:09:11:338] [lukas-winst-test]       --------------
(32133)   [5] [Nov 11 16:09:11:343] [lukas-winst-test]   Execution of: Actions /RunAsLoggedOnUser
(32134)   [5] [Nov 11 16:09:11:343] [lukas-winst-test]   
(32135)   [6] [Nov 11 16:09:11:344] [lukas-winst-test]     Call ""powershell.exe" -ExecutionPolicy Bypass "c:\opsi.org\tmp\test.ps1""
(32136)   [6] [Nov 11 16:09:11:344] [lukas-winst-test]        Waiting until the called process is finished
(32137)   [6] [Nov 11 16:09:11:344] [lukas-winst-test]     Start process as LoggedOnUser: UNI-AUGSBURG\epplluka
(32138)   [6] [Nov 11 16:09:11:344] [lukas-winst-test]     we will work with the logged on user with profile
(32139)   [7] [Nov 11 16:09:11:369] [lukas-winst-test]     Loaded profile for logged on user
(32140)   [6] [Nov 11 16:09:14:394] [lukas-winst-test]     ExitCode 0    Executed process ""powershell.exe" -ExecutionPolicy Bypass "c:\opsi.org\tmp\test.ps1""
(32141)   [7] [Nov 11 16:09:14:394] [lukas-winst-test]       output:
(32142)   [7] [Nov 11 16:09:14:394] [lukas-winst-test]       --------------
(32143)   [7] [Nov 11 16:09:14:394] [lukas-winst-test]       <Domäne>\epplluka
(32144)   [7] [Nov 11 16:09:14:394] [lukas-winst-test]       test
(32145)   [7] [Nov 11 16:09:14:395] [lukas-winst-test]       --------------
Es handelt sich dabei um Berechtigungsprobleme, denn, wenn man das gleiche mit einem Batch-Skript und cmd.exe versucht
erhält man ein klares "Zugriff verweigert" statt der sehr generischen PowerShell-Fehlermeldung.

Außerdem funktioniert /RunAsLoggedOnAdmin sonst wunderbar. Folgendes geht z. B. problemlos:

Code: Alles auswählen

WinBatch_test /RunAsLoggedOnAdmin

[WinBatch_test]
"C:\windows\system32\cmd.exe" /c "whoami"
Ich habe leider keine Idee, woran das liegen könnte. Die Datei hat nach saveTextFile Vollzugriff für die Gruppe Administratoren und auch alle Benutzer (v. a. dem Lokalen Benutzer), es sollte als zwischen beiden Winbatch-Aufrufen keinen Unterschied geben.

Meine einzige Vermutung ist, dass es irgendwie mit UAC zu tun hat, aber habe dann keine Ahnung, warum es nur beim local admin auftreten sollte. Ich habe auch weiter getestet und winst32.exe zusätzlich so gepatcht, dass bevor das Skript ausgeführt wurde die SID des temporary local admins zum Eigentümer der Datei gemacht wurde, das hat allerdings auch kein verändertes Bild ergeben.

Ich möchte auch noch betonen, dass das Problem auch mit dem normalen opsi-script 4.12.1.5 besteht, ich habe meine Patches hier vor allem
zum Debugging verwendet, aber mir ist dabei leider noch nicht klar geworden, wieso sich /RunAsLoggedOnAdmin so verhält.
Benutzeravatar
ThomasT
uib-Team
Beiträge: 538
Registriert: 26 Jun 2013, 12:26

Re: /RunAsLoggedOnAdmin hat weniger Rechte als /RunAsLoggedOnUser?

Beitrag von ThomasT »

Also der Parameter /RunAsLoggedOnAdmin ist in verschiedenen Ausführungen implementiert...den gibt es auch als RunAsLoggedOnAdmin1-4...
Da das aber nicht wirklich dokumentiert ist, wäre ich mal vorsichtig mit versprechungen über die Funktionalität...
Kein Support per DM!
_________________________
opsi support - https://www.uib.de/
For productive opsi installations we recommend support contracts.
lukas.e
Beiträge: 14
Registriert: 18 Sep 2019, 14:29

Re: /RunAsLoggedOnAdmin hat weniger Rechte als /RunAsLoggedOnUser?

Beitrag von lukas.e »

Ich habe festgestellt, dass ich beim Testen aus Versehen die Berechtigungen der %opsiTmpDir% geändert hatte,
eigentlich kann der Logged on User nicht darauf zugreifen (außer es handelt sich dabei um einen Admin). Das oben
gepostete opsi script schlägt also eigentlich mit /RunAsLoggedOnUser, wie man auch erwarten würde, fehl.
Trotzdem verwunderlich, dass es trotz der verzerrten Bedingungen mit dem temporären Admin
(allen vier Varianten) nicht geklappt hat.

Ich schau mir das wahrscheinlich demnächst nochmal genauer an und den temporären Admin noch mal mit den reparierten
Berechtigungen testen. Wenn ich noch was rausfinde, schreib ich nochmal.

lg, Lukas
lukas.e
Beiträge: 14
Registriert: 18 Sep 2019, 14:29

Re: /RunAsLoggedOnAdmin hat weniger Rechte als /RunAsLoggedOnUser?

Beitrag von lukas.e »

Stellt sich heraus, es ist tatsächlich ein seltsames UAC-Problem.

%opsiTmpDir% kann nicht mit /RunAsLoggedOnUser gelesen werden (ist ja eigentlich klar) und auch nicht mit /RunAsLoggedOnAdmin, obwohl der in der Administrator-Gruppe ist.

Ein Workaround dafür wäre, <Rechnername>\opsiSetupAdmin per ACL zugriff auf die entsprechende Datei zu geben.
Antworten