Wie erteile ich einem beliebigen Benutzer oder einer Gruppe auf einem Nicht-Domänenmitgliedsserver Start / Stopp / Neustart-Berechtigungen für einen Dienst?

61

Auf unseren Servern wird eine Reihe von Windows-Diensten ausgeführt, die eine Reihe von automatisierten Aufgaben unabhängig voneinander ausführen, mit Ausnahme eines Dienstes, der die anderen Dienste verwaltet.

Sollte einer der Dienste nicht reagieren oder hängen bleiben, versucht dieser Dienst, den Dienst neu zu starten. Wenn während des Versuchs eine Ausnahme ausgelöst wird, wird stattdessen eine E-Mail an das Support-Team gesendet, damit dieser den Dienst selbst neu starten kann.

Nachdem ich ein wenig recherchiert habe, bin ich auf einige "Lösungen" gestoßen , die von der in KB907460 erwähnten Problemumgehung bis zur Vergabe des Kontos reichen , unter dem der Dienst Administratorrechte ausführt .

Ich bin mit keiner dieser Methoden einverstanden. Ich verstehe die Konsequenzen der ersten Methode nicht, die im Microsoft Knowledge Base-Artikel beschrieben sind, möchte dem Administrator jedoch definitiv keinen Zugriff auf das Konto gewähren, unter dem der Dienst ausgeführt wird .

Ich habe die Lokale Sicherheitsrichtlinie kurz durchgesehen und abgesehen von der Richtlinie, die definiert, ob sich ein Konto als Dienst anmelden kann oder nicht, kann ich nichts anderes sehen, das so aussieht, als ob es sich auf Dienste bezieht.

Wir führen dies auf Server 2003 und Server 2008 aus, sodass alle Ideen und Hinweise dankbar aufgenommen werden!


Erläuterung: Ich möchte einem bestimmten Benutzer oder einer bestimmten Gruppe nicht die Möglichkeit geben, ALLE Dienste zu starten, zu stoppen oder neu zu starten. Ich möchte die Berechtigung dazu nur für bestimmte Dienste, für einen bestimmten Benutzer oder eine bestimmte Gruppe , erteilen können .


Weitere Erläuterungen: Die Server, auf denen ich diese Berechtigungen erteilen muss, gehören nicht zu einer Domäne - es handelt sich um zwei mit dem Internet verbundene Server, die Dateien empfangen, verarbeiten und an Dritte senden sowie einige Websites bedienen Eine Active Directory-Gruppenrichtlinie ist nicht möglich. Tut mir leid, dass ich das nicht klarer gemacht habe.

abitgone
quelle
Sie können auch einen Blick auf diesen Artikel von ms werfen, der ebenfalls auf GP-Änderungen verweist: support.microsoft.com/kb/256345
3
Tut mir leid, dass ich dich vermisst habe ... Ich war beschäftigt. Sie haben nach so etwas gesucht: serverfault.com/questions/15147/…
Evan Anderson
Ich weiß, dass dies eine sehr alte Frage ist, aber haben Sie darüber nachgedacht, die Wiederherstellungsoptionen im Windows-Dienst-Manager zu verwenden?
Tim Long

Antworten:

51

Es scheint keinen GUI-basierten Weg zu geben, es sei denn, Sie sind einer Domain beigetreten - zumindest einer, die ich nirgendwo finden könnte -, also habe ich ein bisschen mehr gegraben und eine Antwort gefunden, die funktioniert unsere sitaution.

Ich habe nicht verstanden, was die Zeichenfolgendarstellung im Knowledge Base-Artikel bedeutet, aber durch ein wenig Ausgraben habe ich festgestellt, dass es sich um SDDL-Syntax handelt. Weitere Informationen führten mich zu diesem Artikel von Alun Jones, in dem erläutert wird, wie die Sicherheitsbeschreibung für einen Dienst abgerufen wird und was jedes Bit bedeutet. MS KB914392 enthält weitere Details.

Verwenden Sie sc sdshow "Service Name"zum Anhängen an den vorhandenen Sicherheitsdeskriptor des Dienstes , um den vorhandenen Deskriptor abzurufen. Wenn es sich um einen einfachen alten .NET Windows-Dienst handelt, wie dies bei unserem der Fall ist, sollte die Sicherheitsbeschreibung etwa so aussehen:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Wir mussten Berechtigungen erteilen RP(um den Dienst zu starten), WP(um den Dienst zu beenden ), (um den Dienst anzuhalten DT/ fortzusetzen) und LO(um den aktuellen Status des Dienstes abzufragen). Dies kann durch Hinzufügen unseres Dienstkontos zur Gruppe Hauptbenutzer erfolgen. Ich möchte jedoch nur den einzelnen Zugriff auf das Konto gewähren, unter dem der Wartungsdienst ausgeführt wird.

Um runaseine Eingabeaufforderung unter dem Dienstkonto zu öffnen, habe ich ausgeführt, whoami /allwobei mir die SID des Dienstkontos mitgeteilt wurde, und anschließend die folgende zusätzliche SDDL erstellt:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Dies wird dann zum Abschnitt D: der obigen SDDL-Zeichenfolge hinzugefügt:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Dies wird dann mit dem folgenden sc sdsetBefehl auf den Dienst angewendet :

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Wenn alles nach Plan verläuft, kann der Dienst gestartet, gestoppt, angehalten und sein Status vom Benutzer abgefragt werden, der in der obigen SID definiert ist.

abitgone
quelle
10
Für eine einfachere Vorgehensweise sollten Sie SetACL.exe verwenden . Hier ist ein Beispiel, wie Sie damit Berechtigungen für einen Dienst SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
festlegen können
2
Sie können Process Hacker ( processhacker.sourceforge.net ) für eine GUI verwenden, um alle Dienste zu konfigurieren. Es enthält versteckte Dienste und ermöglicht es Ihnen, weitere Einstellungen eines Dienstes wie den Binärpfad und die Berechtigungen zu konfigurieren.
ygoe
1
Die CoreTech-Oberfläche hat für mich funktioniert. Kaum zu glauben, dass GUI in Windows noch nicht existiert. Lesen Sie die Antworten hier, wie kann es möglicherweise so schwer sein? Großes Versagen für Microsoft.
MikeKulls
Ich möchte CCLCSWdie SDDL-Berechtigungen (zusätzlich zu RPWPDTLO) erweitern, damit der Dienst beim Ausführen von Get-Service angezeigt wird (für den Scmanager Service Control Manager-Dienst muss zuerst die SDDL geändert werden, damit zugängliche Dienste aufgelistet werden können). . Ich musste auch SWin der Lage sein, bestimmte Dienste neu zu starten.
Baodad
34

Ich hatte gerade das gleiche Problem.
Sie können SubInACL.exe aus dem Resource Kit verwenden. Laden Sie das eigenständige Dienstprogramm hier herunter: http://www.microsoft.com/download/de/details.aspx?displaylang=de&id=23510

Verwenden msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractToSie diese Option, um die Dateien zu extrahieren, wenn Sie die MSI-Datei nicht installieren möchten

  1. Öffnen Sie eine Eingabeaufforderung als Administrator
  2. Wechseln Sie in das Verzeichnis, in dem Sie die EXE-Datei abgelegt haben
  3. Lauf subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Dienst starten
O = Dienst
beenden P = Dienst anhalten / fortsetzen

Vollständige Referenz: Gewähren von Benutzerrechten zum Verwalten von Diensten in Windows 2000
oder Typsubinacl /help

Hinweis: Versuchen subinacl /service SERVICE_NAME /permSie es nicht, da dies zu Problemen führen kann (Lektion gelernt: P). Der Name kann irreführend sein (perm! = Permission), da alle Berechtigungen für alle Benutzer gelöscht werden (auch für Admin!).

patrx
quelle
SO- und SF-Konten können nicht zusammengeführt werden.
Chopper3
@ Chopper3 Danke für deine Antwort. Tatsächlich habe ich 2 SO-Konten: eines ist registriert und mit diesem SF-Konto verknüpft; Das andere ist ein nicht registriertes SO-Konto, das ich vor der Registrierung hatte (verwendet dieselbe E-Mail-Adresse). Ich hatte gehofft, die beiden zusammenzuführen, damit ich den Beitrag verfolgen kann, den ich zuvor gemacht habe. Wie hier erwähnt, habe ich versucht, einen Beitrag zu kennzeichnen, konnte dies aber nicht auf SO (1 Ruf) tun. Deshalb habe ich diesen Beitrag markiert. Ich habe auch versucht, vor mehr als zwei Wochen eine E-Mail an [email protected] zu senden, aber keine Antwort erhalten. Könnten Sie mich bitte an den richtigen Ort / die richtige Person leiten?
Patrx
1
Einzelheiten zu diesem Verfahren finden Sie unter MSDN: support.microsoft.com/?kbid=288129
Marc Climent,
4

Sie suchen nach Computerkonfiguration - Richtlinien - Windows-Einstellungen - Sicherheitseinstellungen - Systemdienste

Dort können Sie nicht nur den Dienststarttyp definieren, sondern auch die Sicherheits-ACLs für jeden Dienst konfigurieren. Standardmäßig listet die Benutzeroberfläche nur die Dienste auf, die auf dem Computer installiert sind, auf dem Sie den GP Editor ausführen.

So fügen Sie Dienste hinzu, die nur auf einem anderen Computer vorhanden sind:

  • Exportieren Sie den Registrierungsschlüssel des Dienstes vom anderen Computer
  • auf dem gpedit-Rechner importieren
  • Wenden Sie die Richtlinie an
  • Löschen Sie den importierten Schlüssel
Ryan Bolger
quelle
Ich vertraue darauf, dass Sie dies beabsichtigen gpedit.msc, da im Fenster "Server verwalten" kein Richtlinienknoten aufgeführt ist. In diesem Fall wird unter dem Knoten "Sicherheitseinstellungen" kein Element angezeigt, das auf "Systemdienste" verweist, wie oben vorgeschlagen, und zwar auf Server 2008 oder Server 2003.
Abitgone,
Ah ja. Ich bin davon ausgegangen, dass Sie diese Änderungen über Gruppenrichtlinien vornehmen möchten.
Ryan Bolger
1
In der Tat - das sind keine Mitgliedsserver. Gibt es eine Möglichkeit, dies mithilfe lokaler Richtlinien oder einer anderen Methode zu erreichen?
Abitgone
2

Ich habe SubinAcl (wie von patrx vorgeschlagen) verwendet, um MySQL als normalen Domain-Benutzer (nicht als Administrator) zu starten, und es funktioniert einwandfrei! (Der Befehl muss jedoch als -local mindestens- Admin ausgeführt werden.)

Der Befehl lautet:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Beachten Sie nur, dass ich den Benutzer eingegeben habe, ohne der Domäne ein Präfix zu setzen. Andernfalls schlägt der Befehl beim Parsing fehl.

Mahieddine M. Ichir
quelle