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.
Antworten:
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:Wir mussten Berechtigungen erteilen
RP
(um den Dienst zu starten),WP
(um den Dienst zu beenden ), (um den Dienst anzuhaltenDT
/ fortzusetzen) undLO
(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
runas
eine Eingabeaufforderung unter dem Dienstkonto zu öffnen, habe ich ausgeführt,whoami /all
wobei mir die SID des Dienstkontos mitgeteilt wurde, und anschließend die folgende zusätzliche SDDL erstellt:Dies wird dann zum Abschnitt D: der obigen SDDL-Zeichenfolge hinzugefügt:
Dies wird dann mit dem folgenden
sc sdset
Befehl auf den Dienst angewendet :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.
quelle
SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
CCLCSW
die 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 auchSW
in der Lage sein, bestimmte Dienste neu zu starten.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=DirectoryToExtractTo
Sie diese Option, um die Dateien zu extrahieren, wenn Sie die MSI-Datei nicht installieren möchtensubinacl /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 Typ
subinacl /help
Hinweis: Versuchen
subinacl /service SERVICE_NAME /perm
Sie 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!).quelle
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:
quelle
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.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:
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.
quelle