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”.
źródło
LocalService
zagroż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 .LocalSystem
ma więcej praw i przywilejów niż zwykłe konta administratora.Poprzednia odpowiedź nie wydawała się bezpośrednio dotyczyć pytań, więc pomyślałem, że ją uzupełnię.
Osobiście nie widzę dużego problemu z tym planem. W przypadku BUILTIN, wybór jest pomiędzy:
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 Control
wtedy, gdyModify
naprawdę nie jest wystarczająca.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.
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 .
źródło
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
ChangeServiceConfig2
zeSERVICE_SID_INFO
strukturą, aby ustawićSERVICE_SID_TYPE_UNRESTRICTED
. Możesz także ustawićSERVICE_SID_TYPE_RESTRICTED
uzyskanie 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)
źródło