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

13 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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.