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


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

Модель безопасности 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
локальная система;
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
локальная система;
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 доступа к службе, служба автоматически пропускается из списка служб, возвращенных клиенту.