thekivi
Goto Top

Windows 2019 Server Berechtigungen für das starten und stoppen von Diensten vergeben

Hallo Miteinander,

ich will auf einem Windows 2019 Server ohne Domain und kein Terminalserver(falls das wichtig ist) einem lokalem User das recht geben bestimmte Dienste zu stoppen und zu starten.
Hintergrund: Die Firma deren Software auf dem Server läuft soll diese Administrieren können ohne gleich globale Administrationsrechte zu bekommen.

Dienste als Domänen-Benutzer starten
Den Reiter Systemdienste in den GPO finde ich unter 2019 nicht mehr.

https://hitco.at/blog/windows-dienste-mit-benutzer-rechten-starten-und-s ...
Ist etwas umständlich und "sc.exe sdshow" Zeigt nicht die gleichen Daten wie im Export an (Laut meiner Vorstellung solle ja nur ein Datensatz dazu kommen). Ich will ja nichts kaputtmachen.

Gibt es eine einfache Methode mit Boardmitteln die Rechte unter 2019 zu setzen?

Danke
MfG
Thekivi

Content-Key: 571470

Url: https://administrator.de/contentid/571470

Printed on: April 20, 2024 at 03:04 o'clock

Member: DerWoWusste
DerWoWusste May 13, 2020 at 13:48:30 (UTC)
Goto Top
Installiere subinacl.

subinacl /service servicename /grant=Users=QSTOP
Member: colinardo
Solution colinardo May 13, 2020 updated at 16:53:26 (UTC)
Goto Top
Servus.
Da gibt es einige Möglichkeiten.
Ich nehme meist die Powershell zur Hand und ergänzt den SecurityDescriptor des Dienstes mit dem User (elevated ausführen):
# Local user
$user = "MaxMuster"
# service name
$servicename = 'BlaBlaService'
# ------------------------
$service = gwmi win32_Service -Filter "Name = '$servicename'"
$service.Scope.Options.EnablePrivileges = $true
$sd = $service.GetSecurityDescriptor().Descriptor
# create trustee
$trustee = ([wmiclass]'Win32_trustee').psbase.CreateInstance()
$trustee.Domain = $env:COMPUTERNAME
$trustee.Name = $user
#create ace
$ace = ([wmiclass]'Win32_ACE').psbase.CreateInstance()
$ace.AccessMask = 131440
$ace.AceFlags = 0
$ace.AceType = 0
$ace.Trustee = $trustee
# add ace to the DACL array
$sd.DACL += $ace
# write sd
$service.SetSecurityDescriptor($sd)
Nur falls du es wissen willst die AccessMask 131440 bedeutet im Klartext folgende Rechte

  • UserDefinedControl
  • Start
  • ReadControl
  • Stop
  • Pause
  • Continue

Die möglichen Flags sind folgende und müssen addiert werden wenn man sie kombiniert:
        'QueryConfig'         =   1  
        'ChangeConfig'        =   2  
        'QueryStatus'         =   4  
        'EnumerateDependents' =   8  
        'Start'               =   16  
        'Stop'                =   32  
        'PauseContinue'       =   64  
        'Interrogate'         =   128  
        'UserDefinedControl'  =   256  
        'Delete'              =   65536  
        'ReadControl'         =   131072  
        'WriteDac'            =   262144  
        'WriteOwner'          =   524288  
        'Synchronize'         =   1048576  
        'AccessSystemSecurity'=   16777216  
        'GenericAll'          =   268435456  
        'GenericExecute'      =   536870912  
        'GenericWrite'        =   1073741824  
        'GenericRead'         =   2147483648  

Alternative

Oder man beliest sich in SDDL und ändert es mit sc sdset "servicename" <neuer descriptor>.
sc sdshow "servicename" zeigt einem den vorhandenen SecurityDescriptor.

In deinem Fall fügst du an den vorhandenen Security Descriptor folgendes an um einem User Execute-Rechte auf einen Dienst zu geben

(A;;CRRPRCWPDT;;;<SID DES USERS>)

SID natürlich anpassen


SetACL kann es auch.

Grüße Uwe
Member: Th0mKa
Th0mKa May 13, 2020 at 23:15:47 (UTC)
Goto Top
Moin,

der von Microsoft empfohlene Weg für das delegieren solcher Tasks ist JEA.

/Thomas
Member: Thekivi
Thekivi May 14, 2020 at 06:19:27 (UTC)
Goto Top
@colinardo Super vielen Dank, diese Lösung ist perfekt. Keine Installation und portable face-smile

@alle Danke für eure Hilfe.
Member: DerWoWusste
DerWoWusste May 14, 2020 at 10:56:22 (UTC)
Goto Top
PS: auch subinacl.exe ist portable face-smile