Windows - Verwenden Sie ein lokales Dienst- und / oder Netzwerkdienstkonto für einen Windows-Dienst

18

Ich habe einen Windows-Dienst erstellt, der Dateien in einem bestimmten Verzeichnis auf unserem Windows-Betriebssystem überwacht. Wenn eine Datei erkannt wird, führt der Dienst einige Datei-E / A-Vorgänge durch, liest die Dateien, erstellt Unterverzeichnisse usw. Dieser Dienst verwendet auch die Datenbankkonnektivität, um eine Verbindung zu einem anderen Server herzustellen. Mein Plan ist es, den Dienst als Standardkonto für "Lokale Dienste" auszuführen. Da ich Schreib- / Leseberechtigungen zulassen muss, die anscheinend vom Konto "Lokaler Dienst" nicht standardmäßig ausgeführt werden, werde ich explizit die Berechtigungen "Vollzugriff" für das Konto "Lokaler Dienst" für den von mir verwendeten Ordner festlegen Lesen / Schreiben von und zu.

Ich glaube, das oben Genannte ist gut. Meine Frage ist, ob ich für den Ordner, in den ich lese und schreibe, eine "Netzwerkdienst" -Rolle mit Vollzugriff einrichten muss. Ich frage mich, ob mein Dienst die Datenbankverbindung zu einem anderen Server verwendet, wenn ich das Konto "Netzwerkdienst" einrichten muss.

Möglicherweise habe ich ein Missverständnis darüber, was das Konto "Netzwerkdienst" bewirkt.

Kontaktmatt
quelle

Antworten:

18

Das NT AUTHORITY\NetworkServiceKonto wird nur benötigt, wenn Sie mit anderen Computern in einer Domäne kommunizieren, die die Anmeldeinformationen Ihres Computers für die Zugriffssteuerung benötigen. Für den einfachen Internet- / Netzwerkzugriff ist dies nicht erforderlich. Es ist nur für bestimmte Zwecke in einer Active Directory-Domäne erforderlich.

Der ganze Punkt des NT AUTHORITY\LocalServiceKontos ist auch, dass es minimale Berechtigungen auf dem System hat. Je mehr Privilegien Sie vergeben, desto geringer ist die Sicherheit der vielen Dienste auf Ihrem System, die auf der Ebene niedriger Privilegien ausgeführt werden sollen, auf der sie angeboten werden sollen. Wenn für Ihren Dienst darüber hinausgehende Berechtigungen erforderlich sind, sollten Sie ein neues Konto mit den erforderlichen Berechtigungen erstellen und dieses Konto auf der Registerkarte Anmelden in den Eigenschaften des Dienstes festlegen . (Dies kann auch programmgesteuert erfolgen.)

Sie können es auch mit dem NT AUTORITY\LocalSystemKonto ausführen , das uneingeschränkten Zugriff auf Ihr System hat. Ich gehe jedoch davon aus, dass Sie das LocalServiceKonto für die erhöhte Sicherheit verwenden möchten.

Aufnäher
quelle
1
Wie würde es die Sicherheit der anderen Dienste beeinträchtigen, wenn das LocalService-Konto die volle Kontrolle über einen Ordner (und Unterordner) hat?
Kontaktmatt
1
@ user19185 Die Sicherheit an sich wird dadurch nicht verringert , das Angriffsprofil wird jedoch erhöht. Wenn ein Dienst so ausgeführt wird, wie er LocalServicegefährdet ist, hat er Zugriff auf alles, für das Sie sich geöffnet haben LocalService, wohingegen er normalerweise Zugriff auf nichts hat. Dies ist seit den 70er Jahren das Standardverfahren für die Computersicherheit .
Patches
1
Ich möchte nur darauf hinweisen, dass LocalSystemes mehr Rechte und Privilegien als normale Administratorkonten gibt.
Stein Åsmul
@Stein Åsmul: danke für die korrektur! Ich habe meine Antwort aktualisiert, um dies widerzuspiegeln.
Patches
2

Die vorherige Antwort schien die Fragen nicht direkt zu beantworten, daher dachte ich, ich würde sie ergänzen.

  1. Mein Plan ist es, den Dienst als Standardkonto für "Lokale Dienste" auszuführen. Ich werde explizit "Vollzugriff" -Berechtigungen für das Konto "Lokaler Dienst" für den Ordner festlegen, in den ich lese bzw. aus dem ich schreibe. Ich glaube, das oben Genannte ist ein guter Plan.

Persönlich sehe ich kein großes Problem mit diesem Plan. Bei BUILTINs haben Sie die Wahl zwischen:

  1. Wird als LOCALSYSTEM ausgeführt. Wenn dieser Dienst gefährdet ist, besitzt der Angreifer " Alles" und zwar sofort.
  2. Wird als LOCALSERVICE ausgeführt. Wenn dieser Dienst oder einer der vielen anderen Dienste, die unter diesem Konto ausgeführt werden, gefährdet ist, hat der Angreifer Zugriff auf ein zusätzliches Verzeichnis. *

Es ist wahrscheinlich vorzuziehen, ein paar zusätzliche ACLs hinzuzufügen, um die zweite Option verwenden zu können. Ja, die sicherste Option für einen Dienst mit geringen Rechten, der jedoch sehr sicherheitsrelevant ist, ist die Ausführung unter einem benutzerdefinierten Dienstkonto mit geringen Rechten. Wenn Sie jedoch nicht für jeden Dienst, den Sie bereitstellen, ein neues Konto erstellen / Kennwörter verwalten möchten, ist es nicht so schlimm, LocalService für kleinere, nicht vertrauliche Aufgaben zu verwenden. Sie müssen lediglich eine verantwortungsbewusste Entscheidung treffen, die auf diesen Überlegungen basiert, z. B. was sich in diesem Verzeichnis oder in dieser Datenbank befindet, Auswirkungen auf Verstöße usw.

Auch hier gilt das Prinzip der geringsten Berechtigung, Sie sollten jedoch nur festlegen, Full Controlob dies Modifywirklich nicht ausreicht.

2.Meine Frage ist, ob ich für den Ordner, in den ich lese und in den ich schreibe, eine "Netzwerkdienst" -Rolle mit Vollzugriff einrichten muss. Ich frage mich, ob mein Dienst die Datenbankverbindung zu einem anderen Server verwendet, wenn ich das Konto "Netzwerkdienst" einrichten muss.

Wenn für Ihre Datenbank eine Windows Integrated / SSPI-Anmeldung erforderlich ist, müssen Sie NetworkService (oder ein Domänendienstkonto) überall verwenden, dh RunAs und Verzeichnisberechtigungen. Angenommen, Sie haben auch Ihrem Computernamen $ oder Ihrem Domänenkonto Zugriff auf diese Datenbank gewährt. Ich bezweifle, dass Sie das tun. Wenn Sie also die normale Benutzername / pwd-Authentifizierung verwenden, sollten Sie in der Lage sein, alles mit LocalService zu tun. Sie müssen nur ein Konto für dieses Verzeichnis berechtigen, unabhängig davon, was Sie in Ihren RunAs verwenden, nicht für beide.

3.Ich habe möglicherweise ein Missverständnis mit der Funktion des Kontos "Netzwerkdienst".

LocalService / NetworkService sind fast identische Konten auf dem lokalen Computer. Der Unterschied besteht hauptsächlich darin, was sie im Netzwerk tun können. NS kann auf einige Netzwerkressourcen zugreifen, da sie im Netzwerk als echtes (Computer-) Konto angezeigt werden. Da LS jedoch als ANONYMOUS angezeigt wird, wird fast alles im Netzwerk verweigert.

Übrigens sollten Sie für diesen Zweck einen geplanten Task verwenden, keinen Dienst.

* Von Vista ab, aufgrund Service Isolation kann man kompromittiert LocalService- Prozess andere nicht leicht angreifen. Im Gegensatz zu Windows 2003 erhält jeder LocalService- / NetworkService-Dienstprozess / jede Instanz eine eigene eindeutige Anmeldesitzungs-SID (Unique Owner). Ich bin mir jedoch nicht sicher, ob dies perfekt ist und die DACL-Sicherheitsanfälligkeit für Dateien und Ressourcen vollständig verringert. Eingeschränkte SIDs und Token mit Schreibbeschränkung werden in diesem Zusammenhang erwähnt.

Amit Naidu
quelle
1

Die anderen Antworten bestätigen, was Sie über die Verwendung des lokalen Dienstes sagen. Zusammenfassend ist Lokaler Dienst das empfohlene Konto für Ihren Dienst, es sei denn, Sie benötigen die zusätzlichen Active Directory-SSPI-Funktionen des Netzwerkdienstes.

Um den Lese- / Schreibzugriff auf einen bestimmten Ordner einzuschränken, können Sie jedoch besser als nur Zugriff auf das allgemeine lokale Dienstkonto gewähren. Das Problem ist, wie andere darauf hingewiesen haben, dass dies auch den Lese- / Schreibzugriff auf alle anderen Dienste ermöglichen würde, die als lokaler Dienst ausgeführt werden. Wenn alle Dienste dies tun würden, würde der lokale Dienst nach und nach Zugriff auf immer wichtigere Ressourcen erhalten.

Die Lösung besteht darin, stattdessen Ihren Ordner mit Ihrer spezifischen Service-SID zu verknüpfen. Nur Ihrem eigenen Serviceprozess ist Ihre Service-SID zugeordnet, wodurch Ihre Ressource noch weiter gesperrt wird. Sie können die Service-SID anzeigen, indem Sie verwenden sc showsid <service name>. Die Dienst-SID wird aus dem Dienstnamen generiert, sodass sie auf allen Computern gleich ist.

Verwenden Sie ChangeServiceConfig2die SERVICE_SID_INFOfestzulegende Struktur, um die Verwendung der Service-SID durch Ihren Service zu aktivieren SERVICE_SID_TYPE_UNRESTRICTED. Sie können auch SERVICE_SID_TYPE_RESTRICTEDeine noch eingeschränktere SID festlegen , die nur den Schreibzugriff auf Ressourcen ermöglicht, die mit Ihrer Service-SID explizit zulässig sind.

Dieser Link enthält die allgemeinen Beschreibungen der Service-SIDs und der eingeschränkten Service-SIDs: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)

zhuman - MSFT
quelle