Frage Wie gewähre ich einem beliebigen Benutzer oder einer Gruppe auf einem Nicht-Domänenmitgliedsserver Start- / Stopp- / Neustartberechtigungen für einen Dienst?


Wir haben eine Reihe von Windows-Diensten auf unseren Servern, die eine Reihe von automatisierten Aufgaben unabhängig voneinander ausführen, mit Ausnahme eines Dienstes, der sich um die anderen Dienste kümmert.

Falls einer der Dienste nicht reagiert oder nicht reagiert, versucht dieser Dienst, den Dienst neu zu starten. Wenn beim Versuch eine Ausnahme ausgelöst wird, wird stattdessen das Supportteam per E-Mail benachrichtigt, damit der Dienst selbst neu gestartet werden kann.

Nach ein wenig Recherche bin ich auf einige "Lösungen" gestoßen, die von der in KB907460 Geben Sie das Konto an, unter dem der Dienst Administratorrechte ausführt.

Ich bin nicht mit einer dieser Methoden vertraut - ich verstehe nicht die Folgen der ersten Methode, wie in Microsofts Knowledge Base-Artikel beschrieben, aber ich möchte definitiv keinen Administrator Zugriff auf das Konto geben, unter dem der Dienst ausgeführt wird .

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

Wir führen dies auf Server 2003 und Server 2008 aus, also würden alle Ideen oder Zeiger gnädig empfangen!


Klärung: Ich möchte nicht die Möglichkeit gewähren, ALLE Dienste für einen bestimmten Benutzer oder eine Gruppe neu zu starten, zu stoppen oder neu zu starten - ich möchte die Erlaubnis dazu erteilen können Spezifisch nur für einen bestimmten Benutzer oder eine bestimmte Gruppe.


Weitere Erläuterung: Die Server, denen ich diese Berechtigungen erteilen muss, gehören nicht zu einer Domain - sie sind zwei Internet-Server, die Dateien empfangen, verarbeiten und an Dritte weiterleiten, sowie einige Webseiten bedienen, also Active Directory Group Richtlinie ist nicht möglich. Tut mir leid, dass ich das nicht klarer gemacht habe.


58
2017-10-04 13:16


Ursprung


Sie können sich auch diesen Artikel von ms ansehen, der auch auf GP-Modifikationen hinweist: support.microsoft.com/kb/256345
Entschuldigung, ich habe dich vermisst ... Ich war beschäftigt. Du hast so etwas gesucht: serverfault.com/questions/15147/ ... - Evan Anderson
Ich weiß, dass dies eine sehr alte Frage ist, aber haben Sie erwogen, die 'Wiederherstellungsoptionen' im Windows Service Manager zu verwenden? - Tim Long


Antworten:


Es scheint keine GUI-basierte Methode zu geben, es sei denn, Sie sind einer Domäne beigetreten - zumindest nicht einer, den ich irgendwo finden konnte - also habe ich ein bisschen mehr gegraben und eine Antwort gefunden, die funktioniert unsere Situation.

Ich habe nicht verstanden, was die String-Darstellung im Knowledge-Base-Artikel bedeutet, aber ein bisschen Graben hat mich dazu gebracht zu entdecken, dass es die SDDL-Syntax ist. Weitere Grabungen führten mich zu Dieser Artikel von Alun Jones was erklärt, wie man die Sicherheitsbeschreibung für einen Service bekommt und was jedes Bit bedeutet. MS KB914392 hat mehr Details.

Verwenden Sie zum Anhängen an die vorhandene Sicherheitsbeschreibung des Dienstes sc sdshow "Service Name" um den vorhandenen Deskriptor zu erhalten. Wenn dies ein einfacher alter .NET Windows-Dienst ist - wie es bei uns der Fall ist - sollte die Sicherheitsbeschreibung in 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 stoppen), DT (um den Dienst anzuhalten / fortzusetzen) und LO(um den aktuellen Status des Dienstes abzufragen). Dies könnte durch Hinzufügen unseres Dienstkontos zur Gruppe der Hauptbenutzer erfolgen, aber ich möchte nur einen individuellen Zugriff auf das Konto gewähren, unter dem der Wartungsdienst ausgeführt wird.

Verwenden runas Um eine Eingabeaufforderung unter dem Dienstkonto zu öffnen, habe ich ausgeführt whoami /all Das gab mir die SID des Dienstkontos und baute dann die zusätzliche SDDL unten:

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

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

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 Dienst auf den Dienst angewendet sc sdset Befehl:

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 läuft, kann der Dienst dann gestartet, angehalten, angehalten und von dem durch die obige SID definierten Benutzer abgefragt werden.


51
2017-10-05 12:23



Für eine einfachere Art und Weise, das gleiche zu tun, sollten Sie sich mit verwenden SetACL.exe. Im Folgenden finden Sie ein Beispiel dafür, wie Sie Berechtigungen für einen Service festlegen können: SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop" - Mason G. Zhwiti
Sie könnten Process Hacker (processhacker.sourceforge.net) für eine GUI, 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
Die CoreTech-GUI funktionierte für mich. Kaum zu glauben, dass es in Windows noch keine GUI gibt. Die Antworten hier lesen, wie kann es möglicherweise so schwer sein? Große Fehler im Auftrag von Microsoft. - MikeKulls
Ich möchte hinzufügen CCLCSW zu den SDDL-Berechtigungen (zusätzlich zu RPWPDTLO), so kann ich den Dienst auch sehen, wenn ich Get-Service ausführe (was zuerst das Ändern der SDDL für den Dienst scmanager service control manager erfordert, um barrierefreie Dienste auflisten zu können). Ich brauchte auch SW Bestimmte Dienste neu starten zu können. - Baodad


Ich hatte gerade das gleiche Problem.
Du könntest benutzen SubInACL.exe aus dem Ressourcenkit. Laden Sie das Standalone-Programm hier herunter: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Benutzen msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo um die Dateien zu extrahieren, wenn Sie die .msi nicht installieren möchten

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

T = Dienst starten
O = Service stoppen
P = Service pausieren / fortsetzen

Vollständige Referenz: Wie gewähren Sie Benutzern Rechte zum Verwalten von Diensten in Windows 2000 
oder geben Sie ein subinacl /help

Hinweis: Versuche es nicht subinacl /service SERVICE_NAME /perm weil es dich in Schwierigkeiten bringen könnte (Lektion gelernt: P). Der Name könnte irreführend sein (perm! = Erlaubnis), da er alle Berechtigungen für alle Benutzer löscht (sogar Admin!).


31
2017-08-26 22:17



Konnte SO- und SF-Konten nicht zusammenführen, sorry Pat. - Chopper3
@ Chopper3 Danke für deine Antwort. Tatsächlich habe ich 2 SO-Konten: Eins ist registriert und mit diesem SF-Konto verbunden; der andere ist ein nicht registriert SO Account hatte ich vor der Registrierung (benutzt die gleich E-Mail-Addresse). Ich hatte gehofft, dass die beiden zusammengeführt werden könnten, damit ich den Beitrag, den ich vorher gemacht habe, verfolgen kann. Wie erwähnt Hier Ich habe versucht, einen Beitrag zu markieren, konnte es aber nicht auf SO (1 Reputation) tun. Aus diesem Grund habe ich diesen Beitrag markiert. Ich habe vor mehr als zwei Wochen auch versucht, eine E-Mail an team@stackoverflow.com zu senden, habe aber keine Antwort erhalten. Könnten Sie mich bitte an den richtigen Ort / Person verweisen? - patrx
Überprüfen Sie die Details dieser Prozedur in MSDN: support.microsoft.com/?kbid=288129 - Marc Climent


Du schaust 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 werden auf der Benutzeroberfläche nur die Dienste aufgelistet, die auf dem Computer installiert sind, auf dem der GP-Editor ausgeführt wird.

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

  • Exportieren Sie den Registrierungsschlüssel des Dienstes von der anderen Maschine
  • Import auf der gpedit Maschine
  • Wenden Sie die Richtlinie an
  • Löschen Sie den importierten Schlüssel

4
2017-10-04 15:57



Ich vertraue darauf, dass du es durchmachst gpedit.msc, da das Fenster "Server verwalten" keinen Richtlinienknoten auflistet. Wenn dies der Fall ist, kann ich unter dem Knoten "Sicherheitseinstellungen" keinen Eintrag sehen, der auf "Systemdienste" verweist, wie oben auf Server 2008 oder Server 2003 vorgeschlagen. - abitgone
Ah ja. Ich nahm an, dass Sie vorhaben, diese Änderungen über Gruppenrichtlinien vorzunehmen. - Ryan Bolger
In der Tat - das sind keine Mitgliedsserver. Gibt es eine Möglichkeit, dies mithilfe lokaler Richtlinien oder einer anderen Methode zu erreichen? - abitgone


Ich habe SubinAcl (wie von patrx vorgeschlagen) verwendet, um MySQL als regulärer Domänenbenutzer (nicht als Administrator) starten zu können, und es funktioniert einwandfrei! (Der Befehl muss jedoch mindestens als - local - Admin ausgeführt werden)

Der Befehl lautet:

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

Beachten Sie, dass ich den Benutzer eingegeben habe, ohne ihm die Domäne voranzutreiben ... andernfalls scheitert der Befehl beim Parsing-Befehl!


2
2018-05-11 08:24