Windows - użyj usługi lokalnej i / lub konta usługi sieciowej dla usługi Windows


18

Utworzyłem usługę okna, która monitoruje pliki w określonym katalogu w naszym systemie operacyjnym Windows. Po wykryciu pliku usługa wykonuje operacje we / wy pliku, odczytuje pliki, tworzy podkatalogi itp. Usługa ta korzysta również z połączenia z bazą danych w celu połączenia z innym serwerem. Moim planem jest uruchomienie usługi jako domyślnego konta „Usługa lokalna”. Ponieważ muszę zezwolić na uprawnienia do zapisu / odczytu, czego najwyraźniej konto „Usługa lokalna” domyślnie nie robi, zamierzam jawnie ustawić uprawnienia „Pełna kontrola” dla konta „Usługa lokalna” w folderze, w którym jestem czytanie / pisanie do iz.

Uważam, że powyższe jest dobre. Moje pytanie brzmi: czy dla folderu, do którego czytam i piszę, muszę skonfigurować rolę „usługi sieciowej” z pełnym dostępem kontrolnym? Zastanawiam się, ponieważ moja usługa korzysta z połączenia bazy danych z innym serwerem, czy będę potrzebować konfiguracji konta „Usługa sieciowa”.

Mogę nie rozumieć, co robi konto „Usługa sieciowa”.

Odpowiedzi:


18

NT AUTHORITY\NetworkServiceKonto jest potrzebne tylko wtedy, gdy użytkownik komunikuje się z innymi komputerami w domenie, które wymagają poświadczenia używanego urządzenia do kontroli dostępu. Nie jest wymagany do prostego dostępu do Internetu / sieci. Jest to konieczne tylko do określonych celów w domenie Active Directory.

Cały sens NT AUTHORITY\LocalServicekonta polega na tym, że ma minimalne uprawnienia w systemie. Zwiększenie uprzywilejowania zmniejsza bezpieczeństwo wielu usług w twoim systemie, zaprojektowanych do działania na niskim poziomie przywilejów, który miał oferować. Jeśli twoja usługa wymaga uprawnień wykraczających poza te, powinieneś utworzyć dla niej nowe konto z niezbędnymi uprawnieniami i ustawić to konto na karcie Logowanie we właściwościach usługi. (Można to również zrobić programowo.)

Możesz również uruchomić go za pomocą NT AUTORITY\LocalSystemkonta , które ma nieograniczony dostęp do twojego systemu, ale zakładam, że chciałeś użyć LocalServicekonta w celu zwiększenia bezpieczeństwa, jakie zapewnia.


1
W jaki sposób przekazanie konta LocalService pełnej kontroli nad jednym folderem (i podfolderami) zmniejszy bezpieczeństwo innych usług?
contactmatt

1
@ user19185 To nie zmniejsza ich bezpieczeństwo per se , ale ma podnieść rangę ataku. Jeśli usługa działająca w sposób LocalServicezagrożony, będzie miała dostęp do wszystkiego, co otworzyłeś LocalService, podczas gdy zwykle nie będzie miała dostępu do niczego. Jest to standardowa procedura operacyjna bezpieczeństwa komputerowego od lat 70 .
Łaty

1
Chcę tylko zaznaczyć, że LocalSystemma więcej praw i przywilejów niż zwykłe konta administratora.
Stein Åsmul,

@ Stein Åsmul: dzięki za korektę! Zaktualizowałem swoją odpowiedź, aby to odzwierciedlić.
Łaty

2

Poprzednia odpowiedź nie wydawała się bezpośrednio dotyczyć pytań, więc pomyślałem, że ją uzupełnię.

  1. Moim planem jest uruchomienie usługi jako domyślnego konta „Usługa lokalna”. Zamierzam jawnie ustawić uprawnienia „Pełna kontrola” dla konta „Usługa lokalna” w folderze, z którego czytam / piszę do iz. Uważam, że powyższe jest dobrym planem.

Osobiście nie widzę dużego problemu z tym planem. W przypadku BUILTIN, wybór jest pomiędzy:

  1. Działa jako LOCALSYSTEM - więc jeśli ta usługa zostanie naruszona, atakujący jest właścicielem wszystkiego i natychmiast.
  2. Działa jako LOCALSERVICE - jeśli więc ta usługa lub dowolna z wielu innych usług działających na tym koncie zostanie naruszona, osoba atakująca ma dostęp do jednego dodatkowego katalogu. *

Prawdopodobnie lepiej jest dodać kilka dodatkowych list ACL, aby móc korzystać z drugiej opcji. Tak, najbezpieczniejszą opcją dla usługi o niskim poziomie uprawnień, ale o wysokim poziomie bezpieczeństwa jest uruchomienie niestandardowego konta usługi o niskim poziomie uprawnień. Ale chyba, że ​​chcesz utworzyć nowe konto / zarządzać hasłami dla każdej wdrażanej usługi, użycie LocalService do drobnych niewrażliwych zadań nie jest tak straszną rzeczą. Musisz tylko podjąć odpowiedzialną decyzję w oparciu o te względy, takie jak zawartość tego katalogu lub bazy danych, wpływ, jeśli zostaną naruszone itp.

Chociaż znowu, zasada najmniejszych uprawnień, powinieneś ustawiać tylko Full Controlwtedy, gdy Modifynaprawdę nie jest wystarczająca.

2.Moje pytanie dotyczy folderu, do którego czytam i piszę, czy muszę skonfigurować rolę usługi sieciowej z pełnym dostępem kontrolnym? Zastanawiam się, ponieważ moja usługa korzysta z połączenia bazy danych z innym serwerem, czy będę potrzebować konfiguracji konta „Usługa sieciowa”.

Jeśli twoja baza danych wymaga logowania do Windows Integrated / SSPI, to tak, musisz używać NetworkService (lub konta usługi domeny) wszędzie, tj. RunAs i uprawnienia do katalogu. Zakładając, że przyznałeś również swojej nazwie komputera $ lub konto domeny dostęp do tej bazy danych. Wątpię, czy to robisz, więc jeśli używasz normalnego uwierzytelniania nazwy użytkownika / pwd, powinieneś być w stanie zrobić wszystko z LocalService. Musisz przyznać tylko jedno prawo do konta w tym katalogu, w zależności od tego, którego używasz w RunA, a nie oba.

3.Mógłbym nie rozumieć, co robi konto „Usługa sieciowa”.

LocalService / NetworkService to prawie identyczne konta na komputerze lokalnym. Różnica polega głównie na tym, co mogą zrobić w sieci. NS może uzyskać dostęp do niektórych zasobów sieciowych, ponieważ pojawia się w sieci jako rzeczywiste konto (komputerowe). Ale LS pojawi się jako ANONIMOWY, więc odmówi się głównie wszystkiego w sieci.

Nawiasem mówiąc, powinieneś używać do tego Zaplanowanego Zadania, a nie usługi.

* Począwszy od Visty, ze względu na izolację usług , jeden zaatakowany proces LocalService nie może łatwo zaatakować innego. Każdy proces / instancja usługi LocalService / NetworkService otrzymuje swój unikalny identyfikator SID sesji (unikalny właściciel), w przeciwieństwie do systemu Windows 2003. Nie jestem jednak pewien, czy jest to doskonały sposób i całkowicie eliminuje lukę DACL w plikach i zasobach. W tym kontekście wspomniane są ograniczone identyfikatory SID i tokeny z ograniczeniem zapisu .


2

Pozostałe odpowiedzi potwierdzają twoje zdanie na temat korzystania z usługi lokalnej. Podsumowując, usługa lokalna jest zalecanym kontem do korzystania z usługi, chyba że potrzebujesz dodatkowych funkcji SSPI usługi Active Directory usługi sieciowej.

Aby ograniczyć dostęp do odczytu / zapisu do określonego folderu, możesz zrobić coś więcej niż tylko dać dostęp do ogólnego konta usługi lokalnej. Problem, jak zauważyli inni, polega na tym, że zapewniłoby to również dostęp do odczytu / zapisu wszystkim innym usługom działającym jako Usługa lokalna, a gdyby wszystkie usługi to zrobiły, to stopniowo Usługa lokalna otrzymywałaby dostęp do coraz ważniejszych zasobów.

Rozwiązaniem jest zamiast tego ACL twojego folderu przy użyciu twojego identyfikatora SID usługi. Tylko twój własny proces usługi jest powiązany z identyfikatorem SID usługi, więc blokuje to Twoje zasoby jeszcze bardziej. Możesz wyświetlić SID usługi za pomocą sc showsid <service name>. Identyfikator SID usługi jest generowany na podstawie nazwy usługi, więc będzie taki sam na wszystkich komputerach.

Aby włączyć obsługę SID usługi przez usługę, użyj ChangeServiceConfig2ze SERVICE_SID_INFOstrukturą, aby ustawić SERVICE_SID_TYPE_UNRESTRICTED. Możesz także ustawić SERVICE_SID_TYPE_RESTRICTEDuzyskanie jeszcze bardziej ograniczonego identyfikatora SID, który zezwala tylko na dostęp do zapisu w zasobach jawnie dozwolonych z identyfikatorem SID usługi.

Ten link zawiera ogólne opisy identyfikatorów SID usług i identyfikatorów SID usług ograniczonych: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.