Windows услуга - използвайте домейн акаунт и стартирайте с администраторски права

Опитвам се да настроя услуга на Windows със следните изисквания:

  • Работи като акаунт на домейн - този акаунт има достъп до други споделяния, които процесът ще докосне
  • Има пълни администраторски права на машината, след UAC - специално трябва да може да поеме собственост върху папки

Проблемът е, че процесът трябва да поеме собственост върху папки в някои точки, което се прави чрез извикване на takeown /A /F <file>. Това работи на командния ред, но само когато е изрично Run as Administrator - да си локален администратор на машината не дава пълни администраторски права и акаунтът все още трябва да премине през подканата на UAC, така че когато работим като услуга, просто получаваме ERROR: The current logged on user does not have administrative privileges.. Изглежда, че стандартният начин да заобиколите UAC за сервизен акаунт е да използвате акаунта Local System, но това не е опция, защото тогава нямаме достъп до другите сървъри.

Има ли някакъв начин да настроите услугата и да кажете Изпълнение като този акаунт, в контекста на пълен администратор на машината? Като друго потенциално решение, има ли начин да изключите акаунт на домейн от UAC на машина? Всяко друго решение може да работи, стига да работи като услуга, да може да задава собственост на папка и да използва акаунт на домейн. В идеалния случай това се прави без отваряне на големи дупки в сигурността, като пълно деактивиране на UAC на машината.


person Josh G    schedule 15.04.2021    source източник
comment
1) Define има пълни административни права на машината, след UAC. 2) Има ли някакъв начин да настроите услугата и да кажете „Изпълни като този акаунт, в контекста на пълен администратор на машината“? Доколкото знам, стартирането на услуга с помощта на акаунт, който вече е член на групата администратори, вече прави това. 3) Има ли начин да изключите акаунт на домейн от UAC на машина? Не. (Ако това беше възможно, зловредният софтуер със сигурност щеше да се възползва от него.)   -  person Bill_Stewart    schedule 20.04.2021
comment
1) Базирам това на свързаната публикация във въпроса, която показва In the context of UAC, a "Local Administrator" does not have the full rights of an "administrator" (as seen by the OS), което изглежда съвпада с поведението, което виждам - ​​потребител в групата на локалните администратори все още трябва да премине през UAC, докато пълен администратор акаунтът не трябва да се налага 2) Отнася се до #1 - самото присъствие в локалния администратор все още изисква акаунтът да премине през UAC, което не изглежда като че може да бъде заобиколено програмно 3) Добре, благодаря, изглежда като единственото реално решение за нашите проблемът е да деактивирате напълно UAC :/   -  person Josh G    schedule 20.04.2021
comment
Деактивирането на UAC определено не се препоръчва. Моят отговор показва, че услуга, която работи с помощта на акаунт, който е член на локалната Administrators група, работи с повишени права (както очаквах).   -  person Bill_Stewart    schedule 20.04.2021


Отговори (1)


Не мога да възпроизведа вашия проблем. Ето как тествах.

Част 1: Създайте примерна директория със собственик, който не е администратор

  1. Създаване на директория C:\TestDir
  2. Деактивирайте наследяването на разрешения и копирайте наследените разрешения в изрични разрешения
  3. Предоставете на NT SERVICE\TrustedInstaller пълен контролен достъп
  4. Задайте собственик на директорията на NT SERVICE\TrustedInstaller
  5. Задайте Administrators и SYSTEM акаунти да имат достъп за четене
  6. Премахнете достъпа за всички други акаунти

След завършване проверете дали, влязъл като администратор с повишени права, не мога да създам файл в тази директория.

Част 2: Създайте услуга, която поема собствеността върху директорията

Направих това с помощта на nssm (https://nssm.cc):

  1. Създайте кратък команден файл, C:\scripts\TestService.cmd, съдържащ командата takeown:

    takeown /F C:\TestDir /A

  2. Стартирайте nssm install и посочете:

    1. Application path: C:\Windows\System32\cmd.exe
    2. Аргументи: /C C:\scripts\TestService.cmd
    3. Рестартиране на действие: Stop service (oneshot mode)
    4. Влезте: Посочете потребителско име и парола за акаунт, който е член на локалната Administrators група
    5. stdout пренасочване: C:\scripts\TestService-stdout.log
    6. stderr пренасочване: C:\scripts\TestService-stderr.log

Стартирах услугата, която изпълни пакетния файл C:\scripts\TestService.cmd. (Услугата спря веднага след стартирането, което се очаква в този случай.) Стандартният изходен файл C:\scripts\TestService-stdout.log съдържаше следните редове:

C:\Windows\System32>takeown /F C:\TestDir /A

SUCCESS: The file (or folder): "C:\TestDir" now owned by the administrators group.

Този експеримент показва, че услуга, работеща с помощта на акаунт, който е член на локалната Administrators група, работи с повишени права (т.е. с пълни административни привилегии).

person Bill_Stewart    schedule 20.04.2021