Windows – Lokales Dienst- und/oder Netzwerkdienstkonto für einen Windows-Dienst verwenden

Windows – Lokales Dienst- und/oder Netzwerkdienstkonto für einen Windows-Dienst verwenden

Ich habe einen Windows-Dienst erstellt, der Dateien in einem bestimmten Verzeichnis unseres Windows-Betriebssystems ü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 Datenbankkonnektivität, um eine Verbindung zu einem anderen Server herzustellen. Mein Plan ist, den Dienst als Standardkonto „Lokaler Dienst“ auszuführen. Da ich Schreib-/Leserechte zulassen muss, was das Konto „Lokaler Dienst“ anscheinend standardmäßig nicht tut, werde ich für das Konto „Lokaler Dienst“ explizit „Vollzugriff“-Rechte für den Ordner festlegen, in den und aus dem ich lese/schreibe.

Ich glaube, das Obige ist gut. Meine Frage ist, ob ich für den Ordner, aus dem ich lese und schreibe, eine „Netzwerkdienst“-Rolle mit vollem Zugriff einrichten muss. Ich frage mich, ob ich das „Netzwerkdienst“-Konto einrichten muss, da mein Dienst eine Datenbankverbindung zu einem anderen Server verwendet.

Möglicherweise verstehe ich die Funktion des Kontos „Netzwerkdienst“ falsch.

Antwort1

DerNT AUTHORITY\NetworkServiceKontowird nur benötigt, wenn Sie mit anderen Computern in einer Domäne kommunizieren, die die Anmeldeinformationen Ihres Computers zur Zugriffskontrolle benötigen. Für einfachen Internet-/Netzwerkzugriff ist es nicht erforderlich. Es ist nur für bestimmte Zwecke in einer Active Directory-Domäne erforderlich.

Auch der ganze Sinn derNT AUTHORITY\LocalServiceKontoist, dass er nur über minimale Berechtigungen auf dem System verfügt. Wenn Sie ihm mehr Berechtigungen erteilen, verringert sich die Sicherheit der vielen Dienste auf Ihrem System, die für die Ausführung mit den niedrigen Berechtigungen konzipiert wurden. Wenn Ihr Dienst Berechtigungen benötigt, die über diese Berechtigungen hinausgehen, sollten Sie ein neues Konto mit den erforderlichen Berechtigungen für ihn erstellen und dieses Konto imEinloggender Eigenschaften des Dienstes. (Dies kann auch programmgesteuert erfolgen.)

Sie können es auch ausführen mit demNT AUTORITY\LocalSystemKontoLocalService, das uneingeschränkten Zugriff auf Ihr System hat, aber ich nehme an, Sie wollten das Konto wegen der erhöhten Sicherheit verwenden, die es bietet.

Antwort2

Die anderen Antworten bestätigen Ihre Aussage zur Verwendung des lokalen Dienstes. Zusammenfassend lässt sich sagen, dass der lokale Dienst das empfohlene Konto für Ihren Dienst ist, 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 mehr tun, als nur dem allgemeinen lokalen Dienstkonto Zugriff zu gewähren. Das Problem besteht, wie andere bereits angemerkt haben, darin, dass dies auch allen anderen Diensten, die als lokaler Dienst ausgeführt werden, Lese-/Schreibzugriff gewähren würde, und wenn alle Dienste dies täten, würde der lokale Dienst nach und nach Zugriff auf immer wichtigere Ressourcen erhalten.

Die Lösung besteht stattdessen darin, Ihren Ordner mit Ihrer spezifischen Service-SID zu ACLen. Nur Ihr eigener Serviceprozess ist mit Ihrer Service-SID verknüpft, sodass Ihre Ressource dadurch noch stärker gesperrt wird. Sie können die Service-SID mithilfe von anzeigen sc showsid <service name>. Die Service-SID wird aus dem Servicenamen generiert und ist daher auf allen Computern gleich.

Um die Verwendung der Service-SID durch Ihren Dienst zu aktivieren, verwenden Sie ChangeServiceConfig2mit demSERVICE_SID_INFOStruktur zum Festlegen SERVICE_SID_TYPE_UNRESTRICTED. Sie können auch festlegen, SERVICE_SID_TYPE_RESTRICTEDdass eine noch stärker eingeschränkte SID abgerufen wird, die nur Schreibzugriff auf Ressourcen zulässt, die mit Ihrer Service-SID ausdrücklich zulässig sind.

Unter diesem Link finden Sie eine ausführliche Beschreibung 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)

Antwort3

Die vorherige Antwort schien nicht direkt auf die Fragen einzugehen, daher dachte ich, ich würde etwas hinzufügen.

  1. Mein Plan ist, den Dienst als Standardkonto „Lokaler Dienst“ laufen zu lassen. Ich werde dem Konto „Lokaler Dienst“ explizit die Berechtigung „Vollzugriff“ für den Ordner erteilen, aus dem ich lese/lese. Ich glaube, das ist ein guter Plan.

Persönlich sehe ich bei diesem Plan kein großes Problem. Bei BUILTINs besteht die Wahl zwischen:

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

Es ist wohl vorzuziehen, ein paar zusätzliche ACLs hinzuzufügen, um die zweite Option nutzen zu können. Ja, die sicherste Option für einen Dienst mit geringen Berechtigungen, aber hoher Sicherheitsempfindlichkeit, wäre die Ausführung unter einem maßgeschneiderten Dienstkonto mit geringen Berechtigungen. Aber wenn Sie nicht für jeden Dienst, den Sie bereitstellen, ein neues Konto erstellen/Passwörter verwalten möchten, ist die Verwendung von LocalService für kleinere, nicht sensible Aufgaben gar nicht so schlimm. Sie müssen nur eine verantwortungsvolle Entscheidung auf der Grundlage dieser Überlegungen treffen, z. B. was sich in diesem Verzeichnis oder dieser Datenbank befindet, welche Auswirkungen es hätte, wenn sie verletzt würden usw.

Allerdings sollten Sie gemäß dem Prinzip der geringsten Berechtigungen diese nur dann festlegen, Full Controlwenn Modifysie wirklich nicht ausreichen.

2. Meine Frage ist, ob ich für den Ordner, aus dem ich lese und schreibe, eine „Netzwerkdienst“-Rolle mit vollem Zugriff einrichten muss. Da mein Dienst eine Datenbankverbindung zu einem anderen Server verwendet, frage ich mich, ob ich das Konto „Netzwerkdienst“ einrichten muss.

Wenn Ihre Datenbank eine Windows Integrated/SSPI-Anmeldung erfordert, müssen Sie überall NetworkService (oder ein Domänendienstkonto) verwenden, also RunAs- und Verzeichnisberechtigungen. Vorausgesetzt, Sie haben Ihrem Computernamen$ oder Domänenkonto auch Zugriff auf diese Datenbank gewährt. Ich bezweifle, dass Sie das tun. Wenn also die normale Benutzername/Passwort-Authentifizierung verwendet wird, sollten Sie alles mit LocalService tun können. Sie müssen nur einem Konto Rechte für dieses Verzeichnis erteilen, je nachdem, welches Sie in Ihren RunAs verwenden, nicht beiden.

3. Möglicherweise verstehe ich die Funktion des Kontos „Netzwerkdienst“ falsch.

Lokaler Service/Netzwerkdienstsind 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 erscheint. LS wird jedoch als ANONYMOUS angezeigt, sodass ihm fast alles im Netzwerk verweigert wird.

Übrigens sollten Sie hierfür eine geplante Aufgabe und keinen Dienst verwenden.

*Ab Vista aufgrund vonDienstisolierung, ein kompromittierter LocalService-Prozess kann einen anderen nicht so leicht angreifen. Jeder LocalService/NetworkService-Dienstprozess/jede Instanz erhält seine eigene eindeutige Anmeldesitzungs-SID (eindeutiger Besitzer), anders als bei Windows 2003. Aber ich bin nicht sicher, ob das perfekt ist und die DACL-Schwachstelle bei Dateien und Ressourcen vollständig abschwächt. Eingeschränkte SIDs und schreibgeschützte Tokenwerden in diesem Zusammenhang genannt.

verwandte Informationen