Поделиться через


Права безопасности и доступа службы

Модель безопасности Windows позволяет управлять доступом к объектам диспетчера управления службами (SCM) и объектов служб. В следующих разделах приведены подробные сведения:

Права доступа для диспетчера управления службами

Ниже приведены определенные права доступа для SCM.

Право доступа Описание
SC_MANAGER_ALL_ACCESS (0xF003F) Включает STANDARD_RIGHTS_REQUIRED, помимо всех прав доступа в этой таблице.
SC_MANAGER_CREATE_SERVICE (0x0002) Требуется для вызова функции CreateService для создания объекта службы и добавления его в базу данных.
SC_MANAGER_CONNECT (0x0001) Требуется для подключения к диспетчеру управления службами.
SC_MANAGER_ENUMERATE_SERVICE (0x0004) Требуется для вызова функции EnumServicesStatus или EnumServicesStatusEx для перечисления служб, которые находятся в базе данных.
Требуется вызвать функцию NotifyServiceStatusChange для получения уведомлений при создании или удалении любой службы.
SC_MANAGER_LOCK (0x0008) Требуется для вызова функции LockServiceDatabase для получения блокировки базы данных.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) Требуется для вызова функции NotifyBootConfigStatus.
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) Требуется для вызова функции QueryServiceLockStatus для получения сведений о состоянии блокировки для базы данных.

Ниже приведены универсальные права доступа, для SCM.

Право доступа Описание
GENERIC_READ
STANDARD_RIGHTS_READ
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SC_MANAGER_CREATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SC_MANAGER_CONNECT
SC_MANAGER_LOCK
GENERIC_ALL
SC_MANAGER_ALL_ACCESS

Процесс с правильными правами доступа может открыть дескриптор SCM, который можно использовать в OpenService, EnumServicesStatusExи функции QueryServiceLockStatus. Только процессы с правами администратора могут открывать дескриптора для SCM, который можно использовать CreateService и функции LockServiceDatabase.

Система создает дескриптор безопасности для SCM. Чтобы получить или задать дескриптор безопасности для SCM, используйте функции QueryServiceObjectSecurity и SetServiceObjectSecurity с дескриптором объекта SCManager.

Windows Server 2003 и Windows XP: В отличие от большинства других защищаемых объектов, дескриптор безопасности для SCM нельзя изменить. Это поведение изменилось с Windows Server 2003 с пакетом обновления 1 (SP1).

Предоставляются следующие права доступа.

Счет Права доступа
Удаленные пользователи, прошедшие проверку подлинности
SC_MANAGER_CONNECT
Локальные пользователи, прошедшие проверку подлинности (включая LocalService и NetworkService)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
LocalSystem
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
Администраторы
SC_MANAGER_ALL_ACCESS

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

Windows Server 2003 и Windows XP: Удаленные пользователи, прошедшие проверку подлинности, предоставляются SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUSи STANDARD_RIGHTS_READ права доступа. Эти права доступа ограничены, как описано в предыдущей таблице по состоянию на Windows Server 2003 с пакетом обновления 1 (SP1)

Когда процесс использует функцию OpenSCManager для открытия дескриптора в базе данных установленных служб, он может запрашивать права доступа. Система выполняет проверку безопасности дескриптора безопасности для SCM перед предоставлением запрошенных прав доступа.

Права доступа для службы

Ниже приведены определенные права доступа для службы.

Право доступа Описание
SERVICE_ALL_ACCESS (0xF01FF) Включает STANDARD_RIGHTS_REQUIRED помимо всех прав доступа в этой таблице.
SERVICE_CHANGE_CONFIG (0x0002) Требуется для вызова функции ChangeServiceConfig или ChangeServiceConfig2 для изменения конфигурации службы. Так как это предоставляет вызывающему объекту право изменять исполняемый файл, который запускается системой, он должен предоставляться только администраторам.
SERVICE_ENUMERATE_DEPENDENTS (0x0008) Требуется для вызова функции EnumDependentServices для перечисления всех служб, зависимых от службы.
SERVICE_INTERROGATE (0x0080) Требуется вызвать функциюControlService, чтобы служба немедленно сообщить о своем состоянии.
SERVICE_PAUSE_CONTINUE (0x0040) Требуется для вызова функцииControlServiceдля приостановки или продолжения службы.
SERVICE_QUERY_CONFIG (0x0001) Требуется для вызова функций QueryServiceConfig и QueryServiceConfig2 для запроса конфигурации службы.
SERVICE_QUERY_STATUS (0x0004) Требуется вызвать функцию QueryServiceStatus или QueryServiceStatusEx, чтобы задать диспетчеру управления службами сведения о состоянии службы.
Требуется для вызова функции NotifyServiceStatusChange для получения уведомлений при изменении состояния службы.
SERVICE_START (0x0010) Требуется для вызова функции StartService для запуска службы.
SERVICE_STOP (0x0020) Требуется для вызова функции ControlService, чтобы остановить службу.
SERVICE_USER_DEFINED_CONTROL(0x0100) Требуется для вызова функцииcontrolService, чтобы указать определяемый пользователем код элемента управления.

Ниже приведены стандартные права доступа для службы.

Право доступа Описание
ACCESS_SYSTEM_SECURITY Требуется для вызова функции QueryServiceObjectSecurity или SetServiceObjectSecurity для доступа к SACL. Чтобы получить этот доступ, необходимо включитьпривилегий SE_SECURITY_NAMEв текущем маркере доступа вызывающего абонента, открыть дескриптор ACCESS_SYSTEM_SECURITY доступа, а затем отключить привилегию.
DELETE (0x10000) Требуется для вызова функции DeleteService для удаления службы.
READ_CONTROL (0x20000) Требуется для вызова функции QueryServiceObjectSecurity для запроса дескриптора безопасности объекта службы.
WRITE_DAC (0x40000) Требуется для вызова функции SetServiceObjectSecurity для изменения элемента дескриптора безопасности объекта службы Dacl.
WRITE_OWNER (0x80000) Требуется вызвать функцию setServiceObjectSecurity, чтобы изменить владельца и группу членов дескриптора безопасности объекта службы.

Ниже приведены универсальные права доступа для службы.

Право доступа Описание
GENERIC_READ
STANDARD_RIGHTS_READ
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SERVICE_CHANGE_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SERVICE_START
SERVICE_STOP
SERVICE_PAUSE_CONTINUE
SERVICE_USER_DEFINED_CONTROL

SCM создает дескриптор безопасности объекта службы при установке службы функцией CreateService. Дескриптор безопасности по умолчанию объекта службы предоставляет следующий доступ.

Счет Права доступа
Удаленные пользователи, прошедшие проверку подлинности Не предоставляется по умолчанию.Windows Server 2003 с пакетом обновления 1 (SP1): SERVICE_USER_DEFINED_CONTROL
Windows Server 2003 и Windows XP: права доступа для удаленных пользователей, прошедших проверку подлинности, совпадают с правами доступа для локальных пользователей, прошедших проверку подлинности.
Локальные пользователи, прошедшие проверку подлинности (включая LocalService и NetworkService)
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_USER_DEFINED_CONTROL
LocalSystem
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_PAUSE_CONTINUE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
Администраторы
DELETE
READ_CONTROL
SERVICE_ALL_ACCESS
WRITE_DAC
WRITE_OWNER

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

Чтобы получить или задать дескриптор безопасности для объекта службы, используйте функции QueryServiceObjectSecurity и SetServiceObjectSecurity. Дополнительные сведения см. в разделе Изменение DACL для службы.

Если процесс использует функцию OpenService, система проверяет запрошенные права доступа на основе дескриптора безопасности для объекта службы.

Предоставление пользователям ненадежных прав доступа (например, SERVICE_CHANGE_CONFIG или SERVICE_STOP) может позволить им вмешиваться в выполнение службы и, возможно, позволить им запускать приложения под учетной записью LocalSystem.

При вызовефункции EnumServicesStatusEx, если вызывающий объект не имеет права SERVICE_QUERY_STATUS доступа к службе, служба автоматически опущена из списка служб, возвращенных клиенту.