Як я можу надати дозволу на старт / стоп / перезапуск послуги для довільного користувача або групи на сервері, що не є членом домену?


61

На нашому сервері працює набір служб Windows, які виконують купу автоматизованих завдань незалежно один від одного, за винятком однієї служби, яка доглядає за іншими сервісами.

У випадку, якщо одна із служб не зможе відповісти або зависнути, ця служба намагається перезапустити службу, і, якщо під час спроби буде викинуто виняток, натомість надішле електронну пошту службі підтримки, щоб вони могли самостійно перезапустити службу.

Провівши невелике дослідження, я натрапив на кілька «рішень», що варіюються від способу, який згадується у KB907460, до надання облікового запису, під яким служба працює з правами адміністратора.

Мені не подобається жоден із цих методів - я не розумію наслідків першого методу, як зазначено у статті бази знань Майкрософт, але я точно не хочу надавати адміністратору доступ до облікового запису, під яким працює служба. .

Я швидко переглянув Локальну політику безпеки та іншу політику, яка визначає, чи може обліковий запис входити як послуга, я не бачу нічого іншого, схоже, що це стосується послуг.

Ми виконуємо це на Server 2003 та Server 2008, тому будь-які ідеї чи покажчики будуть ласкаво отримані!


Пояснення: я не хочу надавати можливість запускати / зупиняти / перезапускати ВСІ сервіси даному користувачеві або групі - я хочу мати змогу надати дозвіл на це лише для певних служб, певному користувачеві або групі.


Подальше уточнення: Сервери, на які мені потрібно надати ці дозволи, не належать домену - це два сервери, орієнтовані на Інтернет, які отримують файли, обробляють їх і надсилають третім сторонам, а також обслуговують пару веб-сайтів, так Політика групи Active Directory неможлива. Вибачте, що я не зробив цього зрозумілішим.


Ви також можете поглянути на цю статтю від ms, яка також вказує на модифікації GP: support.microsoft.com/kb/256345

3
Вибачте, що сумували за тобою ... Я був зайнятий. Ви шукали щось подібне: serverfault.com/questions/15147/…
Evan Anderson

Я знаю, що це дуже давнє питання, але ви розглядали можливість використання параметрів "відновлення" у менеджері сервісів Windows?
Тім Лонг

Відповіді:


51

Здається, не існує способу цього на основі графічного інтерфейсу, якщо ви не приєдналися до домену - принаймні не одного, якого я міг би знайти де-небудь - тому я трохи більше копав і знайшов відповідь, яка працює для наше положення.

Я не розумів, що означає подання рядків у статті бази знань, але трохи викопавши заставило мене виявити, що це синтаксис SDDL. Подальше копання привело мене до цієї статті Алуна Джонса, яка пояснює, як отримати дескриптор безпеки для послуги та що означає кожен біт. MS KB914392 має більш детальну інформацію.

Щоб додати до існуючого дескриптора безпеки служби, використовуйте sc sdshow "Service Name"для отримання наявного дескриптора. Якщо це звичайний старий сервіс .NET Windows - як у нашому випадку - дескриптор безпеки повинен виглядати приблизно так:

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)

Нам потрібно було надати дозволи RP(для запуску послуги), WP(для припинення послуги), DT(для призупинення / продовження послуги) та LO(для запиту поточного стану служби). Це можна зробити, додавши наш обліковий запис служби до групи Power Users, але я хочу лише надати індивідуальний доступ до облікового запису, під яким працює служба технічного обслуговування.

Використовуючи runasдля відкриття командного рядка під обліковим записом служби, я побіг, whoami /allякий дав мені SID облікового запису служби, а потім сконструював додатковий SDDL нижче:

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

Потім додається до розділу D: рядок SDDL вище:

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)

Потім це застосовується до служби за допомогою sc sdsetкоманди:

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)

Якщо все йде за планом, послугу можна потім запустити, зупинити, призупинити і мати запит на статус користувача, визначеного вище SID.


10
Для більш простого способу зробити те ж саме, слід поглянути на використання SetACL.exe . Ось приклад того, як використовувати його для встановлення дозволів на сервіс:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Мейсон Г. Жвіт

2
Ви можете використовувати Process Hacker ( processhacker.sourceforge.net ) для GUI для налаштування всіх служб. Він включає приховані сервіси і дозволяє налаштувати більше налаштувань служби, як, наприклад, бінарний шлях - та дозволи.
ygoe

1
На мене працював gui CoreTech. Важко повірити, що GUI вже не існує у Windows. Читаючи відповіді тут, як це може бути таким важким? Велика невдача від імені Microsoft.
MikeKulls

Мені подобається додавати CCLCSWдо дозволів SDDL (крім RPWPDTLO), щоб я також міг бачити службу, перелічену під час запуску Get-Service (для чого спочатку потрібно змінити SDDL для сервісу управління менеджером управління scmanager, щоб мати змогу перераховувати доступні служби) . Мені також потрібно SWбуло перезапустити певні сервіси.
Баодад

34

У мене просто була така ж проблема.
Ви можете використовувати SubInACL.exe з Resource Kit. Завантажте автономну утиліту тут: http://www.microsoft.com/download/uk/details.aspx?displaylang=en&id=23510

Використовуйте msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractToдля вилучення файлів, якщо ви не хочете встановлювати .msi

  1. Відкрийте командний рядок як адміністратор
  2. Перейдіть до каталогу, де ви розмістили .exe
  3. Біжи subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Початок служби
O = Стоп служби
P = Призупинення / продовження служби

Повна довідка: Як надати користувачам права на керування послугами в Windows 2000
або типsubinacl /help

Примітка: не намагайтеся, subinacl /service SERVICE_NAME /permяк це може спричинити вам проблеми (засвоєний урок: P). Ім'я може вводити в оману (perm! = Дозвіл), оскільки воно видаляє всі дозволи всім користувачам (навіть адміністратору!).


Неможливо об'єднати акаунти SO та SF, вибачте Пат.
Chopper3

@ Chopper3 Дякуємо за вашу відповідь. Насправді у мене є 2 облікові записи SO: один зареєстрований і пов'язаний з цим обліковим записом SF; інший - це незареєстрований обліковий запис SO, який я мав перед реєстрацією (використовував ту саму адресу електронної пошти). Я сподівався, що вони можуть бути об'єднані, щоб я міг відслідковувати посаду, яку я робив раніше. Як згадувалося тут, я намагався поставити прапор на посаду, але не зміг це зробити на SO (1 репутація). Ось чому я позначив цю посаду. Я також намагався надіслати електронну пошту team@stackoverflow.com більше двох тижнів тому, але не отримав жодної відповіді. Не могли б ви направити мене в потрібне місце / людину?
patrx

1
Ознайомтеся з деталями цієї процедури на сторінці MSDN: support.microsoft.com/?kbid=288129
Marc Climent

4

Ви шукаєте Конфігурація комп'ютера - Політика - Налаштування Windows - Налаштування безпеки - Системні послуги

Там ви можете не тільки визначити тип запуску послуги, але і налаштувати ACL-адреси безпеки для кожної служби. За замовчуванням інтерфейс відображатиме лише список служб, встановлених на машині, на якій працює GP Editor.

Щоб додати послуги, які існують лише на іншій машині:

  • експортуйте ключ рег. служби з іншої машини
  • імпорт на машині gpedit
  • застосовувати політику
  • видаліть імпортований ключ

Я вважаю, що ви маєте намір це зробити gpedit.msc, оскільки у вікні "Керування сервером" не вказано вузол політики. Якщо так, я не можу побачити елемент під вузлом "Налаштування безпеки", на який посилаються "Системні послуги", як ви пропонуєте вище, або на сервері 2008 або на сервері 2003.
abitgone

Ага так. Я припускав, що ви плануєте внести ці зміни за допомогою групової політики.
Райан Болгер

1
Дійсно - це не сервери-члени. Чи є спосіб націлити це за допомогою місцевої політики чи іншого методу?
абітгоне

2

Я використовував SubinAcl (як це запропонував patrx), щоб мати можливість запустити MySQL як звичайний користувач домену (не адміністратор), і він працює чудово! (команда, однак, повинна бути виконана як -поточний принаймні- Адміністратор)

Команда така:

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

Просто зауважте, що я ввійшов до користувача, не вказуючи його на домен ... інакше команда не працює при команді розбору!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.