Служба 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) Определить имеет полные административные права на машине, мимо 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. перенаправление стандартного вывода: C:\scripts\TestService-stdout.log
    6. перенаправление стандартного вывода: 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