Jak przyznać uprawnienia do uruchamiania / zatrzymywania / ponownego uruchamiania usługi dowolnemu użytkownikowi lub grupie na serwerze nienależącym do domeny?

61

Na naszych serwerach działa pakiet usług Windows, które wykonują kilka zautomatyzowanych zadań niezależnie od siebie, z wyjątkiem jednej usługi, która dba o inne usługi.

W przypadku, gdy jedna z usług nie powiedzie się lub nie powiedzie się, usługa ta próbuje zrestartować usługę, a jeśli podczas próby zostanie zgłoszony wyjątek, zamiast tego wyśle ​​wiadomość e-mail do zespołu wsparcia, aby mogli oni ponownie uruchomić usługę.

Po przeprowadzeniu drobnych badań natknąłem się na kilka „rozwiązań”, od obejścia wspomnianego w KB907460 po podanie konta, na którym usługa działa z uprawnieniami administratora.

Nie podoba mi się żadna z tych metod - nie rozumiem konsekwencji pierwszej metody opisanych w artykule bazy wiedzy Microsoft, ale zdecydowanie nie chcę dać administratorowi dostępu do konta, na którym działa usługa .

Rzuciłem okiem na Lokalną Politykę Bezpieczeństwa i poza polityką, która określa, czy konto może się zalogować jako usługa, nie widzę nic innego, co mogłoby wyglądać tak, jakby odnosiło się do usług.

Działamy na serwerach Server 2003 i Server 2008, więc wszelkie pomysły i wskazówki zostaną przyjęte łaskawie!


Wyjaśnienie: Nie chcę przyznawać możliwości uruchamiania / zatrzymywania / restartowania WSZYSTKICH usług dla danego użytkownika lub grupy - chcę mieć możliwość udzielania uprawnień tylko na określonych usługach, dla danego użytkownika lub grupy.


Dalsze wyjaśnienia: serwery, na których muszę udzielić tych uprawnień, nie należą do domeny - są to dwa serwery internetowe, które odbierają pliki, przetwarzają je i wysyłają do stron trzecich, a także obsługują kilka stron internetowych, więc Zasady grupy usługi Active Directory nie są możliwe. Przepraszam, że nie wyjaśniłem tego.

abitgone
źródło
możesz również
3
Przepraszam, że za tobą tęskniłem ... Byłem zajęty. Szukałeś czegoś takiego: serverfault.com/questions/15147
Evan Anderson
Wiem, że to bardzo stare pytanie, ale czy rozważałeś użycie opcji „odzyskiwania” w menedżerze usług systemu Windows?
Tim Long

Odpowiedzi:

51

Wydaje się, że nie ma sposobu na zrobienie tego w oparciu o GUI, chyba że jesteś członkiem domeny - przynajmniej takiej, której nigdzie nie mogłem znaleźć - więc zrobiłem trochę więcej kopania i znalazłem odpowiedź, która działa dla nasza ostrożność.

Nie rozumiałem, co oznacza reprezentacja ciągu w artykule bazy wiedzy, ale trochę kopania doprowadziło mnie do odkrycia, że ​​jest to składnia SDDL. Dalsze kopanie doprowadziło mnie do tego artykułu Alun Jones, który wyjaśnia, jak uzyskać deskryptor bezpieczeństwa usługi i co oznacza każdy bit. MS KB914392 ma więcej szczegółów.

Aby dołączyć do istniejącego deskryptora zabezpieczeń usługi, użyj, sc sdshow "Service Name"aby uzyskać istniejący deskryptor. Jeśli jest to zwykła stara usługa Windows .NET - tak jak w przypadku naszej - deskryptor zabezpieczeń powinien wyglądać mniej więcej tak:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Musieliśmy przyznać uprawnienia RP(w celu uruchomienia usługi), WP(w celu zatrzymania usługi), DT(w celu wstrzymania / kontynuacji usługi) oraz LO(w celu sprawdzenia aktualnego stanu usługi). Można to zrobić, dodając nasze konto usługi do grupy Użytkownicy zaawansowani, ale chcę tylko przyznać indywidualny dostęp do konta, na którym działa usługa konserwacji.

Używając, runasaby otworzyć wiersz polecenia w ramach konta usługi, uruchomiłem, whoami /allktóry dał mi SID konta usługi, a następnie zbudowałem dodatkowy SDDL poniżej:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

To następnie dodaje się do sekcji D: ciągu SDDL powyżej:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Jest to następnie stosowane do usługi za pomocą sc sdsetpolecenia:

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Jeśli wszystko pójdzie zgodnie z planem, usługa może zostać uruchomiona, zatrzymana, wstrzymana i zapytana o status użytkownika zdefiniowanego przez SID powyżej.

abitgone
źródło
10
Aby łatwiej zrobić to samo, powinieneś skorzystać z programu SetACL.exe . Oto przykład, jak używać go do ustawiania uprawnień do usługi:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti
2
Możesz użyć Process Hacker ( processhacker.sourceforge.net ) jako GUI do skonfigurowania wszystkich usług. Zawiera usługi ukryte i pozwala skonfigurować więcej ustawień usługi, takich jak ścieżka binarna - i uprawnienia.
ygoe
1
Interfejs CoreTech działał dla mnie. Trudno uwierzyć, że GUI nie istnieje już w systemie Windows. Czytając tutaj odpowiedzi, jak to może być tak trudne? Wielka porażka w imieniu Microsoft.
MikeKulls,
Lubię dodawać CCLCSWdo uprawnień SDDL (oprócz RPWPDTLO), aby wyświetlić usługę na liście po uruchomieniu Get-Service (która najpierw wymaga zmodyfikowania SDDL dla usługi menedżera sterowania usługami scmanager, aby móc wyświetlić dostępne usługi) . Musiałem także SWmóc zrestartować niektóre usługi.
Baodad
34

Właśnie miałem ten sam problem.
Możesz użyć SubInACL.exe z zestawu zasobów. Pobierz samodzielne narzędzie tutaj: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Użyj, msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractToaby wyodrębnić pliki, jeśli nie chcesz instalować .msi

  1. Otwórz wiersz polecenia jako Administrator
  2. Przejdź do katalogu, w którym umieściłeś plik .exe
  3. Biegać subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Uruchom usługę
O = Zatrzymaj usługę
P = Wstrzymaj / kontynuuj usługę

Pełny wykaz: Jak przyznać użytkownikom prawa do zarządzania usługami w systemie Windows 2000
lub typsubinacl /help

Uwaga: nie próbuj, subinacl /service SERVICE_NAME /permponieważ może to spowodować kłopoty (wyciągnięta lekcja: P). Nazwa może wprowadzać w błąd (perm! = Pozwolenie), ponieważ usuwa wszystkie uprawnienia dla wszystkich użytkowników (nawet administratora!).

patrx
źródło
Niestety, nie można scalić kont SO i SF. Pat.
Chopper3
@ Chopper3 Dziękujemy za odpowiedź. W rzeczywistości mam 2 konta SO: jedno jest zarejestrowane i powiązane z tym kontem SF; drugie to niezarejestrowane konto SO, które miałem przed rejestracją (użyłem tego samego adresu e-mail). Miałem nadzieję, że uda się je połączyć, dzięki czemu będę mógł śledzić post, który napisałem wcześniej. Jak wspomniano tutaj , próbowałem oflagować post, ale nie mogłem tego zrobić na SO (1 reputacja). Dlatego oflagowałem ten post. Próbowałem też wysłać e-mail do [email protected] ponad dwa tygodnie temu, ale nie otrzymałem żadnej odpowiedzi. Czy możesz skierować mnie do właściwego miejsca / osoby?
patrx
1
Zapoznaj się ze szczegółami tej procedury w witrynie MSDN: support.microsoft.com/?kbid=288129
Marc Climent
4

Szukasz Konfiguracja komputera - Zasady - Ustawienia systemu Windows - Ustawienia zabezpieczeń - Usługi systemowe

Tam możesz nie tylko zdefiniować typ uruchomienia usługi, ale możesz także skonfigurować listy kontroli bezpieczeństwa dla każdej usługi. Domyślnie interfejs wyświetla tylko te usługi, które są zainstalowane na komputerze, na którym działa edytor GP.

Aby dodać usługi, które istnieją tylko na innym komputerze:

  • wyeksportuj klucz rejestracyjny usługi z drugiego komputera
  • importuj na maszynę gpedit
  • zastosuj polisę
  • usuń zaimportowany klucz
Ryan Bolger
źródło
Ufam, że masz zamiar to zrobić gpedit.msc, ponieważ okno „Zarządzaj serwerem” nie wyświetla węzła zasad. Jeśli tak, nie widzę elementu pod węzłem Ustawienia zabezpieczeń, który odwołuje się do „Usług systemowych”, jak sugerujesz powyżej, na serwerze 2008 lub Server 2003.
abitgone
O tak. Zakładałem, że planujesz wprowadzić te zmiany za pomocą zasad grupy.
Ryan Bolger,
1
Rzeczywiście - nie są to serwery członkowskie. Czy istnieje sposób ukierunkowania na to przy użyciu lokalnych zasad lub innej metody?
abitgone
2

Użyłem SubinAcl (jak sugeruje patrx), aby móc uruchomić MySQL jako zwykły użytkownik domeny (nie administrator) i działa idealnie! (polecenie należy jednak wykonać jako przynajmniej -lokalne-Administrator)

Polecenie to:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Pamiętaj, że wprowadziłem użytkownika bez poprzedzania go domeną ... w przeciwnym razie polecenie nie powiedzie się podczas analizy!

Mahieddine M. Ichir
źródło