AD-Konto zum serverübergreifenden Überwachen von Diensten

AD-Konto zum serverübergreifenden Überwachen von Diensten

Wir haben einige Windows-Server, auf denen verschiedene Dienste laufen, und wir haben eine Situation, in der diese Dienste manchmal einfach anhalten. Um diese Dienste zu überwachen, habe ich einen Windows-Dienst geschrieben, der den ServiceController verwendet, um die verdächtigen Dienste zu überprüfen und ihren aktuellen Status zu prüfen. Das funktioniert gut, wenn ich den neuen Dienst so konfiguriere, dass er unter einem Konto läuft, das lokale Administratorrechte für die betreffenden Server hat, aber das ist aus Sicherheitsgründen nicht ideal, da es andere Rechte gewährt als die Anzeige der Dienste auf diesen Maschinen. Idealerweise würde ich gerne ein AD-Konto erstellen, das die Dienste auf allen Servern „sehen“ und abfragen kann (die Liste der Server im Umfang ist eine Liste, die in Zukunft sicherlich erweitert wird), aber keine anderen Rechte auf diesen Servern hat – ist das überhaupt möglich, und wenn ja, welche Einstellungen gelten für ein solches Konto?

Ich entschuldige mich, wenn diese Beschreibung etwas vage ist. Nehmen wir also an, dass der von mir geschriebene Dienst auf ServerA installiert wird und den ServiceController verwenden muss, um den Dienst „MSSQLSERVER“ auf ServerB, den Dienst „MSSQL$OTHERINSTANCE“ auf ServerC und die Dienste „SOMEOTHERSERVICE“ und „RUNNINGOUTOFIDEAS“ auf ServerD abzufragen. Darüber hinaus wird die Liste der abzufragenden Dienste in einer MS SQL Server-Datenbank auf ServerZ gespeichert, sodass das Konto mit dieser Datenbank auf diesem Server verbunden werden kann. Für meine Zwecke müsste es also ein Standard-AD-Konto sein, das als Benutzer in der SQL Server-Sicherheit sichtbar ist.

Hat jemand Ideen? Vielen Dank im Voraus für alle Vorschläge und danke, dass Sie sich die Zeit genommen haben, dies zu lesen. Bitte beachten Sie: Eine Rahmenherausforderung wie „Warum machst du das überhaupt? Du solltestDas" wäre ebenso willkommen wie eine direkte Antwort, da ich nicht davon überzeugt bin, dass es keinen besseren Weg gibt, und ich immer gerne lerne.

Antwort1

Das Konto benötigt den folgenden Zugriff auf scmanager, um alle Dienste eines Computers remote zu überwachen:

Dieser String müsste in die aktuelle Scmanager-ACL eingefügt werden: (A;;CCLCRPRC;;;<AccountSID>)

A: Allow
CC - SC_MANAGER_CONNECT - remotely connect
LC - SC_MANAGER_ENUMERATE_SERVICE - list all services
RP - SC_MANAGER_QUERY_LOCK_STATUS - interogate the status of each
RC - STANDARD_RIGHTS_READ - read the permissions of scmanager and services

Die ACL wird gespeichert unterHKLM:\SYSTEM\CurrentControlset\Control\ServiceGroupOrder\Security

Sie möchten die aktuelle ACL auf scmanager ermitteln und die obige Zeichenfolge an der entsprechenden Stelle einfügen – also irgendwo in der Mitte, am Ende der diskretionären ACL und vor der System-ACL, und zwar etwa so:

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)(A;;CCLCRPRC;;;<SID goes Here>)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

Je nachdem, wie Sie es bereitstellen und welches System Sie für die automatische Bereitstellung verwenden, fällt es Ihnen möglicherweise leichter, den sc.exeBefehl zu nutzen. Der „Dienst“, den Sie mit sc.exe verwalten, ist eigentlich kein Dienst, sondern der Service Control Manager (scmanager):

sc.exe sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)(A;;CCLCRPRC;;;<SID goes Here>)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"


Technisch gesehen handelt es sich hierbei um einen übermäßigen Zugriff, da dem Konto dadurch die Berechtigung erteilt wird, den Status und die Berechtigungen aller Dienste und nicht nur einer Handvoll abzufragen.

verwandte Informationen