Предоставить разрешение на удаление Windows-сервиса через SCM пользователю без прав администратора.

Вопрос или проблема

Я хочу дать пользователю без административных прав возможность удалять любой сервис с помощью команды sc. Вот что я попробовал до сих пор:

sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-528118966-3876874398-709513571-1907873084-3598227634-3698730060-278077788-3990600205)(A;;KA;;;S-1-5-21-1501880356-1257335835-2619119435-1003)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

Где:

  • S-1-5-21-1501880356-1257335835-2619119435-1003 — это SID пользователя без административных прав.
  • Эта конфигурация дает пользователю разрешение на создание сервиса, но он не может его удалить после из-за “недостаточных прав”.
  • KA должен представлять GENERIC_ALL, однако пользователь все равно не может удалить сервисы после их создания. Я также пробовал использовать 0xF003F (SC_MANAGER_ALL_ACCESS) вместо KA, но результат, кажется, такой же.

Единственным решением, которое я нашел, является изменение дескриптора безопасности сервиса после его создания с помощью:

sc sdset ServiceName ...

Это позволяет мне дать пользователю достаточные права (например, DELETE), но для этого требуется вмешательство администратора каждый раз. К сожалению, это не подходит для моего случая.

Можно ли настроить команду sc или дескриптор безопасности так, чтобы пользователь без административных прав мог удалять любой сервис, который он создал, без вмешательства администратора?

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

Ответ или решение

Для обеспечения возможности удаления Windows-сервиса с помощью управляющего менеджера контролем служб (SCM) для пользователя без административных прав, необходимо корректно настроить права доступа. В ситуациях, рассматриваемых в вашем вопросе, пользователь может создать сервис, но сталкивается с недостатком прав для его удаления. Рассмотрим, как можно решить данную задачу.

Фактическое положение дел

  1. Проблема недостаточных прав: Несмотря на то, что вы назначили права GENERIC_ALL (или SC_MANAGER_ALL_ACCESS) через команду sc sdset для SID конкретного пользователя, это не обеспечивает возможность удаления созданных сервисов. Такой подход недостаточен, поскольку он настраивает права только на уровень диспетчера управления службами, а не для каждого сервиса в отдельности.

  2. Необходимость административного вмешательства: Потребность в изменении дескриптора безопасности для каждого созданного сервиса указывает на то, что текущая конфигурация не учитывает автоматическую передачу или наследование необходимых прав на уровне отдельного сервиса.

Решение проблемы

Для предоставления пользователю возможности удаления любого сервиса без администратора, следует сконцентрироваться на двух аспектах:

  1. Управление безопасностью для каждого сервиса: Настройте дескриптор безопасности не только для SCM, но и для конкретных сервисов. Ваша текущая настройка возможно верна для создания и управления диспетчером служб, но дескриптор безопасности должен позволять конкретному пользователю и действие удаления каждого созданного сервиса.

  2. Автоматизация этого процесса: Чтобы избежать администрации при создании каждого нового сервиса, вам нужно такую автоматизацию. Один из возможных подходов – использовать скрипты PowerShell для изменения прав доступа при создании сервиса.

Пример решения (с использованием PowerShell)

Можно использовать PowerShell для автоматизации настройки необходимых прав на уровне отдельных сервисов.

# Пример: предоставление полного доступа неадминистратору к конкретному сервису
$serviceName = "YourServiceName"
$userSID = "S-1-5-21-1501880356-1257335835-2619119435-1003"
$acl = Get-Acl -Path "HKLM:\System\CurrentControlSet\Services\$serviceName"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($userSID, "FullControl", "Allow")
$acl.AddAccessRule($rule)
Set-Acl -Path "HKLM:\System\CurrentControlSet\Services\$serviceName" -AclObject $acl

Заключение

Проблема предоставления неадминистративному пользователю прав на полное управление (включая удаление) сервисами в Windows кипичлается в необходимости правильного управления дескрипторами безопасности на уровне как SCM, так и индивидуальных сервисов. Сосредоточьтесь на автоматизации этого процесса с использованием скриптов для предотвращения ручного вмешательства администратора при создании каждого нового сервиса. Поскольку вопрос безопасности здесь приоритетен, последствия таких действий должны быть серьёзно обдуманы, включая оповещение пользователей об ответственности за выполненные действия.

Оцените материал
Добавить комментарий

Капча загружается...