Права безопасности и доступа службы
Модель безопасности 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 |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS |
GENERIC_WRITE |
SC_MANAGER_CREATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG |
GENERIC_EXECUTE |
SC_MANAGER_CONNECT SC_MANAGER_LOCK |
GENERIC_ALL |
|
Процесс с правильными правами доступа может открыть дескриптор SCM, который можно использовать в OpenService, EnumServicesStatusExи функции QueryServiceLockStatus. Только процессы с правами администратора могут открывать дескриптора для SCM, который можно использовать CreateService и функции LockServiceDatabase.
Система создает дескриптор безопасности для SCM. Чтобы получить или задать дескриптор безопасности для SCM, используйте функции QueryServiceObjectSecurity и SetServiceObjectSecurity с дескриптором объекта SCManager.
Windows Server 2003 и Windows XP: В отличие от большинства других защищаемых объектов, дескриптор безопасности для SCM нельзя изменить. Это поведение изменилось с Windows Server 2003 с пакетом обновления 1 (SP1).
Предоставляются следующие права доступа.
Счет | Права доступа |
---|---|
Удаленные пользователи, прошедшие проверку подлинности |
|
Локальные пользователи, прошедшие проверку подлинности (включая LocalService и NetworkService) |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
LocalSystem |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
Администраторы |
|
Обратите внимание, что удаленные пользователи, прошедшие проверку подлинности по сети, но не вошли в систему, могут подключаться к 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 |
SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS |
GENERIC_WRITE |
SERVICE_CHANGE_CONFIG |
GENERIC_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) |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_USER_DEFINED_CONTROL |
LocalSystem |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_PAUSE_CONTINUE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL |
Администраторы |
READ_CONTROL SERVICE_ALL_ACCESS WRITE_DAC WRITE_OWNER |
Для выполнения любых операций пользователь должен входить в систему в интерактивном режиме или служба должна использовать одну из учетных записей службы.
Чтобы получить или задать дескриптор безопасности для объекта службы, используйте функции QueryServiceObjectSecurity и SetServiceObjectSecurity. Дополнительные сведения см. в разделе Изменение DACL для службы.
Если процесс использует функцию OpenService, система проверяет запрошенные права доступа на основе дескриптора безопасности для объекта службы.
Предоставление пользователям ненадежных прав доступа (например, SERVICE_CHANGE_CONFIG или SERVICE_STOP) может позволить им вмешиваться в выполнение службы и, возможно, позволить им запускать приложения под учетной записью LocalSystem.
При вызовефункции EnumServicesStatusEx, если вызывающий объект не имеет права SERVICE_QUERY_STATUS доступа к службе, служба автоматически опущена из списка служб, возвращенных клиенту.