Windows - Verwenden Sie den lokalen Dienst und / oder das Netzwerkdienstkonto für einen Windows-Dienst

46403
contactmatt

Ich habe einen Fensterservice erstellt, der Dateien in einem bestimmten Verzeichnis in unserem Windows-Betriebssystem überwacht. Wenn eine Datei gefunden wird, führt der Dienst eine Dateieingabe durch, liest die Dateien, erstellt Unterverzeichnisse usw. Dieser Dienst verwendet auch Datenbankkonnektivität, um eine Verbindung zu einem anderen Server herzustellen. Mein Plan ist es, den Dienst als Standardkonto "Lokaler Dienst" auszuführen. Da ich Schreib- / Leseberechtigungen zulassen muss, was anscheinend das Konto "Lokaler Dienst" standardmäßig nicht tut, werde ich explizit die Berechtigungen "Vollzugriff" für das Konto "Lokaler Dienst" für den Ordner festlegen, in dem ich bin Lesen / Schreiben an und von.

Ich glaube, das obige ist gut. Meine Frage ist, muss ich für den Ordner, in den ich lese und schreibe, eine "Netzwerkdienst" -Rolle mit vollem Steuerungszugriff einrichten? Ich frage mich, da mein Dienst die Datenbankverbindung zu einem anderen Server verwendet, wenn ich das Konto "Network Service" einrichten möchte.

Ich kann falsch verstehen, was das Konto "Netzwerkdienst" tut.

13

3 Antworten auf die Frage

14
Patches

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 Zugriffskontrolle benötigen. Für einfachen Internet- / Netzwerkzugriff ist dies nicht erforderlich. Dies ist nur für bestimmte Zwecke in einer Active Directory-Domäne erforderlich.

Der gesamte Punkt des NT AUTHORITY\LocalServiceKontos besteht auch darin, dass das System über minimale Berechtigungen verfügt. Je mehr Privilegien Sie haben, desto geringer ist die Sicherheit der zahlreichen Dienste auf Ihrem System, die auf dem niedrigen Berechtigungsniveau ausgeführt werden sollen, für das sie entwickelt wurden. Wenn Ihr Dienst über diese hinausgeht, müssen 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 über das 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 wollten .

Wie würde die vollständige Kontrolle des LocalService-Kontos für einen Ordner (und Unterordner) die Sicherheit der anderen Dienste beeinträchtigen? contactmatt vor 13 Jahren 1
@ user19185 Die Sicherheit * wird per se * nicht verringert, aber das Angriffsprofil wird erhöht. Wenn ein Dienst, der als LocalService ausgeführt wird, gefährdet ist, hat er Zugriff auf alles, was Sie für LocalService geöffnet haben, während er normalerweise auf nichts zugreifen kann. Dies ist seit den 70er Jahren das Standardverfahren für Computersicherheitsverfahren (http://de.wikipedia.org/wiki/Principle_of_least_privilege). Patches vor 13 Jahren 1
Ich möchte nur darauf hinweisen, dass `LocalSystem` ** mehr ** Rechte und Privilegien als reguläre Administratorkonten hat. Stein Åsmul vor 6 Jahren 1
@Stein Åsmul: Danke für die Korrektur! Ich habe meine Antwort entsprechend aktualisiert. Patches vor 6 Jahren 0
2
Amit Naidu

Die vorige Antwort schien die Fragen nicht direkt anzusprechen, also dachte ich, ich würde sie ergänzen.

  1. Mein Plan ist es, den Dienst als Standardkonto "Lokaler Dienst" auszuführen. Ich werde explizit "Vollzugriff" -Privilegien für das Konto "Lokaler Dienst" für den Ordner festlegen, in den / den ich schreibe / schreibe. Ich glaube, das obige ist ein guter Plan.

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

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

Es ist zu bevorzugen, einige zusätzliche ACLs hinzuzufügen, um die zweite Option verwenden zu können. Ja, die sicherste Option für einen Dienst mit geringen Berechtigungen, der jedoch sehr sicherheitsrelevant ist, wäre die Ausführung unter einem benutzerdefinierten Dienstkonto mit niedrigem Berechtigungen. Wenn Sie jedoch nicht für jeden bereitgestellten Dienst ein neues Konto erstellen / Kennwörter verwalten möchten, ist die Verwendung von LocalService für kleinere, nicht vertrauliche Aufgaben keine so schlimme Sache. Sie müssen nur eine verantwortungsbewusste Entscheidung auf der Grundlage dieser Überlegungen treffen, z. B. was in diesem Verzeichnis oder in dieser Datenbank enthalten ist, die Auswirkungen, wenn diese verletzt werden usw.

Obwohl das Prinzip der kleinsten Privilegien wieder gilt, sollten Sie nur festlegen, Full Controlob Modifyes wirklich nicht ausreicht.

2.Meine Frage ist, muss ich für den Ordner, in den ich lese und schreibe, eine "Netzwerkdienst" -Rolle mit vollem Steuerungszugriff einrichten? Ich frage mich, da mein Dienst die Datenbankverbindung zu einem anderen Server verwendet, wenn ich das Konto "Network Service" einrichten möchte.

Wenn für Ihre Datenbank ein Windows Integrated / SSPI-Login erforderlich ist, müssen Sie NetworkService (oder ein Domänendienstkonto) überall verwenden, z. B. RunAs und Verzeichnisberechtigungen. Vorausgesetzt, Sie haben Ihrem Computername $ oder dem Domänenkonto auch Zugriff auf diese Datenbank gewährt. Ich bezweifle, dass Sie das tun. Wenn Sie also die normale Authentifizierung mit Benutzername / PDA verwenden, sollten Sie in der Lage sein, alles mit LocalService zu erledigen. Sie müssen nur ein Konto für dieses Verzeichnis vergeben, je nachdem, was Sie in Ihren RunAs verwenden, nicht für beide.

3.Ich kann falsch verstehen, was das Konto "Netzwerkdienst" tut.

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 es im Netzwerk als echtes (Computer-) Konto angezeigt wird. LS wird jedoch als ANONYMOUS angezeigt, daher wird meistens alles im Netzwerk abgelehnt.

Übrigens sollten Sie dafür eine geplante Aufgabe 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 (eindeutiger Besitzer). Ich bin jedoch nicht sicher, ob dies perfekt ist und die DACL-Sicherheitsanfälligkeit für Dateien und Ressourcen vollständig verringert. In diesem Zusammenhang werden eingeschränkte SIDs und schreibgeschützte Token erwähnt.

0
zhuman - MSFT

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

Wenn Sie den Lese- / Schreibzugriff auf einen bestimmten Ordner einschränken möchten, können Sie jedoch besser auf das generische Konto des lokalen Diensts zugreifen. Das Problem besteht, wie bereits erwähnt wurde, darin, dass dadurch auch alle anderen Dienste, die als lokaler Dienst ausgeführt werden, Lese- / Schreibzugriff erhalten. Wenn alle Dienste dies tun, erhält der lokale Dienst nach und nach Zugriff auf immer wichtigere Ressourcen.

Die Lösung besteht darin, stattdessen Ihren Ordner mit Ihrer spezifischen Service-SID ACL zuzulassen. Nur Ihrem eigenen Serviceprozess ist Ihre Service-SID zugeordnet, sodass Ihre Ressource dadurch noch weiter eingeschränkt wird. Sie können die Service-SID mit anzeigen sc showsid <service name>. Die Service-SID wird aus dem Servicenamen generiert und ist daher auf allen Maschinen gleich.

Um die Service-SID-Nutzung durch Ihren Service zu aktivieren, verwenden Sie ChangeServiceConfig2die SERVICE_SID_INFOzu setzende Struktur SERVICE_SID_TYPE_UNRESTRICTED. Sie können auch festlegen SERVICE_SID_TYPE_RESTRICTED, dass Sie eine noch eingeschränktere SID erhalten, die nur den Schreibzugriff auf Ressourcen erlaubt, die explizit mit Ihrer Service-SID 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)