Windows-Dienste mit Benutzer-Rechten starten und stoppen

MMC-SnapIn Sicherheitsvorlagen - Sicherheitseinstellungen für Dienst

Mitunter hat man als Administrator eines Systems den Bedarf, Benutzern ohne Adminstrator-Privilegien das Starten und Stoppen eines bestimmten Windows-Dienstes zu ermöglichen.

Die Rechte zum Zugriff auf Windows-Dienste werden mittels Security-Deskriptoren konfiguriert. Es gibt mehrere Möglichkeiten den Security-Deskriptor eines Dienstes zu konfigurieren, eine davon ist z.B. das Kommandozeilentool sc.exe:

sc sdset %ServiceName% %SecurityDescriptor%

Der Security-Deskriptor muss hierbei in einem speziellen Security Descriptor String Format angegeben werden. Die Prüfung des SecurityDeskriptors ist ebenfalls mittels sc.exe möglich:

sc.exe sdshow %ServiceName%

Der Default-Security-Deskriptor von Diensten unter Windows-7 (ebenso wie unter Windows-XP, Vista und Windows-8) räumt Benutzern kein Recht zum Starten und Stoppen ein, dies ist LocalSystem und Administratoren vorbehalten. Der Security-Deskriptor eines für alle interaktiven Benutzer start- und stopbaren Windows-7-Dienstes lautet hingegen:

D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Dieser Security-Deskriptor-String muss jedoch nicht manuell erzeugt werden, sondern kann auch über eine grafische Oberfläche in Form des MMC-Snapins Sicherheitsvorlagen zusammgengeklickt werden.

Die Vorgangsweise hierfür lautet wie folgt:

  1. mmc.exe starten
  2. Datei -> SnapIn hinzufügen/entfernen …
  3. Das SnapIn „Sicherheitsvorlagen“ hinzufügen.
  4. Eine neue Sicherheitsvorlage mit beliebigem Namen erstellen.
  5. Unter Systemdienste einen Dienst auswählen und die Eigenschaften zur Bearbeitung öffnen (siehe Abbildung).

    MMC-SnapIn Sicherheitsvorlagen - Diensteigenschaften
    MMC-SnapIn Sicherheitsvorlagen – Diensteigenschaften
  6. Die Vorlage „Sicherheit bearbeiten…“ öffnen, und für die Benutzergruppe „INTERAKTIV“ Rechte zum „Starten, anhalten und unterbrechen“ hinzufügen (siehe Abbildung).

    MMC-SnapIn Sicherheitsvorlagen - Sicherheitseinstellungen für Dienst
    MMC-SnapIn Sicherheitsvorlagen – Sicherheitseinstellungen für Dienst
  7. Die Sicherheitsvorlage als Datei speichern, die so erstellte INF-Datei mit einem Editor öffnen – der Security-Deskriptor ist darin verzeichnet (siehe Abbildung).

    Sicherheitsvorlage - gespeicherte INF-Datei mit Security-Deskriptor
    Sicherheitsvorlage – gespeicherte INF-Datei mit Security-Deskriptor
Der so erhaltene Security-Descriptor-String kann nun (wie eingangs beschrieben) mittels sc.exe auf einen beliebigen Dienst appliziert werden.
  • z.B. für Windows 7 oder Windows 10:
sc sdset %ServiceName% "D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
  • oder unter Windows XP:
sc sdset %ServiceName% "D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;IU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

You May Also Like

29 Comments

  1. Hallo,
    vielen Dank. Ich habe dafür nun folgendes Script erstellt:

    @echo off
    set SERVICENAME1="Fax"
    set SecurityDescriptor="D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
    sc sdset %SERVICENAME1% %SecurityDescriptor%
    sc stop %SERVICENAME1% 2>nul
    if errorlevel 2 (
    echo Dienst ist bereits gestoppt . . . Starte %SERVICENAME1%
    sc start %SERVICENAME1%
    )
    pause

    aber erhalte dann folgende Meldung:


    [SC] SetServiceObjectSecurity ERFOLG
    [SC] ControlService FEHLER 1062:

    Der Dienst wurde nicht gestartet.

    Dienst ist bereits gestoppt . . . Starte "Fax"

    SERVICE_NAME: Fax
    TYPE : 10 WIN32
    STATE : 2 START_
    (NOT_S
    WIN32_EXIT_CODE : 0 (0x0)
    SERVICE_EXIT_CODE : 0 (0x0)
    CHECKPOINT : 0x0
    WAIT_HINT : 0x7d0
    PID : 6732
    FLAGS :
    Drücken Sie eine beliebige Taste . . .

    Ist das so korrekt? Sorry, das ist ziemlich neu für mich.

    Viele Grüße
    Holger

    1. Mit “sc query Fax” lässt sich der Zustand abfragen.
      Die von mir vorgeschlagene Variante “net start Fax” bzw. “net stop Fax” hätte den Vorteil, dass dieser Befehl den Dienststart nicht asynchron sondern synchron veranlasst.
      Warum Sie den SecurityDescriptor im gleichen Script setzen, in dem Sie auch den Neustart des Dienstes vornehmen erschließt sich mir allerdings nicht ganz. Das Setzen des SecurityDescriptors ist nur als Administrator möglich. Dies soll dann ermöglichen, dass das Starten/Stoppen des Dienstes auch als Benutzer (und nicht nur als Administrator) ermöglicht wird. Offenbar führen Sie das Script aber ohnehin als Administrator aus – die Sache mit dem SecurityDescriptor wäre in diesem Fall dann ja gar nicht nötig.

  2. Hallo Herr Hasslinger,
    ich habe das wohl falsch verstanden, habe damit noch keine Erfahrung gemacht.
    So wie ich das verstehe, erzeuge ich den SD auf dem DC und füge dann den entprechenden User zur Gruppe “INTERAKTIV” hinzu, damit der User am Client dann das folgende Script bei Bedarf ausführen kann?

    @echo off
    rem set DIENSTNAME1="Nachrichtendienst"
    set DIENSTNAME1="Fax"
    net stop %DIENSTNAME1% 2>nul
    if errorlevel 2 (
    echo Dienst ist bereits gestoppt . . . Starte %DIENSTNAME1%
    net start %DIENSTNAME1%
    )
    pause


    Hintergrund ist, dass der Faxdienst bei diesem speziellen Client immer mal zu “hängen” scheint, aber selbst nach einem PC-Neustart immer noch nicht funktioniert. Wird er aber manuell neu gestartet, gehen plötzlich alle Faxe raus.
    Merkwürdig ist, dass es wirklich nur einen PC in einer Abteilung mit 15 anderen Win7-Clients betrifft. Wir sind gerade dabei auf Win7 umzustellen.

    Vielen Dank für Ihre Unterstützung.

    Viele Grüße
    Holger

  3. Sie können keine Benutzer zur Gruppe “Interaktiv” hinzufügen. Die Gruppe Interaktiv ist eine “besondere Identität” die automatisch alle interaktiv angemeldeten Benutzer umfasst. Sie müssen bzw. können daran also nichts ändern.

    Das Applizieren des SecurityDescriptor wie von mir im Blog-Eintrag beschrieben bewirkt, dass der so konfigurierte Dienst ohne Administrator-Rechten von jedem Benutzer der sich interaktiv an der Maschine angemeldet hat gestoppt und gestartet werden kann.

    Ihr Script mit “net stop …” und “net start …” müsste – nachdem Sie einmalig den Dienst als Administrator mit diesem SecurityDescriptor konfiguriert haben – somit auch als Benutzer funktionieren.

    Das von Ihnen im letzten Kommentar gepostete Script sollte denke ich klappen – ja.

  4. Hallo Herr Haslinger,

    ich versuche das von Ihnen beschriebene Vorgehen auf einem WinXP POSready nachzuvollziehen, um einem “unprevilegierten” Benutzer eben das Recht des Starts und Stopps zuzuweisen. Ich konnte Ihrer Anleitung bis zum Hinzufügen des Snap-Ins folgen. Dann gibt es aber ein “Problem”: Es gibt hier 7 Templates mit den Namen compatws, hisecdc, hisecws, rootsec securedc securews und setup security. Ich nehme doch mal nciht an, dass ich in allen Vorlagen die Änderungen vornehmen muss, oder etwa doch?
    Ich möchte den Dienst abc für jeden start- und stoppbar machen und das so vesuchen:

    1) Anmeldung als Administrator am entsprechenden System
    2) run: sc sdshow abc (zeigt mir den SecurityDiscriptor)
    3) MMC-Snap-In Sicherheitsvorlagen laden

    Soweit so gut. Und nun? Wie geht es jetzt weiter? Das habe ich noch nicht ganz verstanden.

    Ich hoffe, dass Sie auch mir (noch) helfen können. Ist ja schon etwas her, dass hier etwas geschrieben wurde.

    Vielen Dank.

    1. Hallo Herr Fischer,

      Sie verwenden im MMC-SnapIn “Sicherheitsvorlagen” keines der von Ihnen angeführten vorhandenen Templates, sondern erzeugen selbst eine neue (leere) Sicherheitsvorlage. In dieser neuen/leeren Sicherheitsvorlage klicken Sie nur exakt die beschriebene Änderung zusammen, speichern diese als INF-Datei und entnehmen daraus dann mit einem Texteditor den Security-Descriptor.

      Ich habe die Vorgangsweise unter WinXP-SP3 soeben geprüft, klappt wie beschrieben.
      Ich habe das Beispiel mit fertigem Security-Descriptor für Windows XP oben im Beitrag ganz zum Schluss nun ergänzt.

      beste Grüße,
      Gunnar Haslinger

  5. Hallo Herr Haslinger,

    dieses Vorgehen wird also nur als Vorbereitung zum Erhalten des Security-Descriptors durchgeführt.

    Am Ende setzte ich dann diesen nur noch per “sc sdset %servicename% SECURITY-DISCRIPTOR” auf den entsprechenden Dienst.

    Danke für Ihre schnelle Antwort.

    Mit freundlichem Gruß aus Berlin

    1. Ja, schlussendlich konfigurieren Sie mittels sc sdset ... den Dienst. Die Vorgangsweise mit den Sicherheitsvorlagen dient nur dazu, den passenden Security-Descriptor grafisch zusammenzuklicken. Wenn Ihnen mein hier geliefertes Beispiel welches allen interaktiv angemeldeten Benutzern die Rechte gewährt ausreicht, so müssen Sie nichts selbst ermitteln sondern können meinen hier veröffentlichten Security-Descriptor verwenden. Möchten Sie einzelnen Benutzern oder anderen Gruppen dies ermöglichen, so führen Sie die Vorgangsweise einmalig wie beschrieben vollständig durch.

  6. Jetzt kommt leider nur noch erschwerent hinzu, dass das alles auf einem POSready passieren soll / muss. Da fehlt die Möglichkeit des Bearbeitens / Neuerstellens einer Sicherheitsvorlage. Wir werden mal probieren, ob es mit den Einstellungen von einem “ordinären” XP auch geht. Ich bin gespannt. Ich werde das Ergebnis mitteilen, wenn ich es denn habe.

    Vielen Dank nochmals und einen schönen Abend.

  7. Hallo,
    Danke für die ausführliche Erklärung.
    Ich habe mir damit den gewünschten Securitydescriptor erstellt. Hat prima funktioniert!

  8. Hallo Gunnar,

    funkt diese o.a. Process auch beim Windows Server 2012r2?
    Ich komme bis zum Speichern der Datei, doch dann auch, wenn ich eine inf-Datei waehel, so finde ich keinen Aufbaue, wei Du ihn weiter oben zeigst.
    Obowhl der Security-Token unter w2k12r2 identisch ist, s.o. Einleitung, ist bei der Herstellung der eigenen Richtlinie z.B. keine Service General Setting in der Datei zu finden. Bis Punkt 7. ist alles OK, dann passt es nicht mehr. 🙁 Eine Idee, was nicht OK ist? Danke Dir vorab. Oez.

    1. Die geschilderte Vorgangsweise ist auch bei Windows-Server-Betriebssystemen gültig. Welchen Schritt Du konkret nicht korrekt durchführst lässt sich anhand Deiner Schilderung für mich leider nicht erkennen. Wenn Du meinst das Problem liegt an Deinem Windows Server 2012R2 Betriebssystem, dann benutze zur Erstellung des Security-Descriptors doch einfach einen Windows-Client (Win7, Win10).

  9. Hallo Gunnar,

    dachte mir, dass es auch bei w2k12r2 identisch sein sollte. Jedoch ab Schritt __7__ passt es nicht mehr. Datei speichern geht noch ;-), doch der Inhalt hat nichts mit ueberein, was ich bei Dir sehe.
    Den Tip mit W7 Client kann ich nicht ganz nachvollziehen, den Dienst gibt es nicht auf den W7 Clients. Das ist ein Prg., was nur auf dem Server installiert ist, auch die Benutzer/Gruppen etc, alles ist beim w2k12r2 anders. Wie soll ich v. einem Client etwas verwenden, der voellig anders strukturiert/installiert ist. Kann Dir nicht ganz 🙂 folgen. Danke Dir; war ein Versuch den Dienst irgendwie mit Benutzerrechten zu starten.

    1. Wenn Du einfach nur den Dienst mit Benutzerrechten starten möchtest, dann verwende den von mir oben vorgefertigten Win7/Win10 Security Descriptor mit “sc sdset” – sollte funktionieren. Wenn Du eine spezielle Konfiguration benötigst die nicht jener aus meinen Screenshots entspricht, dann musst Du Dir selbst einen SecurityDescriptor zusammenklicken.

      Dein Einwand du hättest am Win7/Win10 PC den betreffenden Dienst nicht verfügbar ist insofern irrelevant, als Du ja nur irgend einen beliebigen Dienst konfigurierst um ein Sicherheitsvorlagen-File das den von Dir gewünschten Security-Descriptor enthält zu erhalten. Du kannst den konkret betreffenden Dienstnamen ja dann frei beim Applizieren mittels “sc sdset” konfigurieren, es ist also nicht nötig die MMC genau auf jener Maschine auf der Du den betreffenden Dienst eingerichtet hast auszuführen.

  10. Genau diesen Security-Deskriptor-String habe ich gesucht! Funktioniert prima mit Windows 10 1903. Vielen Dank, hat mir viel Recherche erspart.

  11. Hallo alle zusammen,
    wie genau kann ich einen Dienst von einem bestimmten Domainuser auf einem Server 2019 starten lassen ohne, dass dieser angemeldet ist? Dieser Benutzer ist extra für diesen Dienst angelegt worden da der Dienst sowohl auf SMB Shares als auch auf lokale Ressourcen des Server zugreift ist ein starten als lokaler Dienst nicht möglich. Ihre Anleitung hat nicht funktioniert aber das liegt wohl daran, dass der besagte User nicht in der “INTERAKTIV” Gruppe steckt, da diese Gruppe ja dynamisch mit angemeldeten Nutzern bestückt wird, wenn ich das richtig verstanden habe.

    Ich danke schon mal im Voraus 😀

  12. Hallo Herr Haslinger,

    zuerst vielen Dank für ausführliche Erklärung. Meine Idee ist; Ich möchte dem einen AD User die Rechte geben, somit der remote auf dem Server ohne Adminrechte den Service starten/stoppen kann. Dazu würde ich auf dem Server einen lokalen Gruppe erstellen und der Gruppe auf dem Dienst mittels sc sdset + Security-Deskriptor-String Rechte geben. Ich würde dann den AD User auf dem Server in die lokalen Gruppe hinzufügen. Die Frage ist, könnte es so funktionieren?

    Vielen Dank & viele Grüße
    Baris

    1. Ja, das sollte funktionieren.
      Sie können dann freilich nicht meinen fertig vorbereiteten Security-Descriptor-String verwenden, sondern müssen sich (so wie in meinen Screenshots oben gezeigt) erst selbst einen passenden Security-Descriptor der das für diese spezifische Gruppe erlaubt erzeugen.

  13. Hallo Herr Haslinger,
    Ich will Benutzer eine services webclient z.b Start und stop machen, weil ich kann nicht immer es machen.
    Ich bitte Sie mir ein tipp geben.

    Vielen Dank

    1. Hallo Herr Ghafouri,
      Welche konkrete Frage haben Sie denn?
      Wie man allen interaktiven Benutzern die hierfür nötigen Rechte gibt, ist oben fertig zum Download als SecurityDescriptor bereitgestellt.
      Wie Sie dedizierten Service-Usern (z.b. dem User unter dem der WebServer-Dienst läuft) die Rechte geben können ist in den Screenshots dargestellt.
      Ich weiß daher nicht wirklich, welche Information sie vermissen.

      1. Hallo Herr Haslinger,
        Ich danke Ihnen , dass Sie mir geantwortet.
        Ich will nur einem Benutzer Zugriff geben, nicht allen Benutzern. Kann ich nur einem Benutzer nur Zugriff geben?
        LG

        1. Ja, können Sie.
          Einfach wie in den Abbildungen oben gezeigt vorgehen, anstatt der Gruppe “Interaktiv” fügen Sie nur einen einzelnen Benutzer hinzu.
          Den so erhaltenen Security-Descriptor wenden Sie anschließend an.

          1. Hallo Herr Haslinger,
            Ich habe eine neue Sicherheitsvorlage mit beliebigem Namen erstellt, aber habe ich nicht RemotAdmin-Client gefunden.
            Wie kann ich Diese Dienst aktivieren?
            LG

          2. Warum suchen Sie nach “RemoteAdmin-Client”? Bei RemoteAdmin-Client handelt es sich um jenen Dienst, den ich exemplarisch als Anschauungs-Beispiel in meinen Screenshots verwendet habe. Sie müssen aber selbstverständlich jenen Dienst behandeln den Sie konfigurieren möchten. Sie müssen den Security-Descriptor nicht mit dem tatsächlichen Dienst den Sie später konfigurieren möchten erstellen, den tatsächlichen Dienstnamen geben Sie im letzten Schritt beim Applizieren des Security-Descriptors mit “sc sdset %DienstName% …” an.

  14. Hallo!
    DANKE für diese Anleitung, hat unter Win10prof wunderbar funktioniert.
    Nach langer Suche endlich eine Möglichkeit,
    Services als User zu starten – ohne UAC-Abfragen.
    Gruß vom Fritz.

Schreibe einen Kommentar

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