共用方式為


服務安全性和訪問許可權

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) 呼叫 EnumServicesStatusEnumServicesStatusEx 函式的必要專案,以列出資料庫中的服務。
需要呼叫 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 的句柄,此句柄可用於 OpenServiceEnumServicesStatusExQueryServiceLockStatus 函式。 只有具有系統管理員許可權的程式能夠開啟 SCM 的句柄,CreateServiceLockServiceDatabase 函式可以使用。

系統會建立 SCM 的安全性描述元。 若要取得或設定 SCM 的安全性描述元,請使用具有 SCManager 物件的句柄的 QueryServiceObjectSecuritySetServiceObjectSecurity 函式。

Windows Server 2003 和 Windows XP: 與大多數其他安全性實體物件不同,無法修改 SCM 的安全性描述元。 自 Windows Server 2003 Service Pack 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_CONNECTSC_MANAGER_ENUMERATE_SERVICESC_MANAGER_QUERY_LOCK_STATUSSTANDARD_RIGHTS_READ 訪問許可權。 從 Windows Server 2003 SP1 起,這些訪問許可權受限於上表所述

當進程使用 OpenSCManager 函式來開啟已安裝服務資料庫的句柄時,它可以要求訪問許可權。 系統會在授與要求的訪問許可權之前,先對 SCM 的安全性描述項執行安全性檢查。

服務的存取權

以下是服務的特定訪問許可權。

存取權 描述
SERVICE_ALL_ACCESS(0xF01FF) 除了此數據表中的所有訪問許可權之外,也包含 STANDARD_RIGHTS_REQUIRED
SERVICE_CHANGE_CONFIG (0x0002) 需要呼叫 ChangeServiceConfigChangeServiceConfig2 函式來變更服務組態。 因為這會授與呼叫端變更系統執行之可執行文件的許可權,所以應該只授與系統管理員。
SERVICE_ENUMERATE_DEPENDENTS (0x0008) 需要呼叫 EnumDependentServices 函式,以列舉相依於服務的所有服務。
SERVICE_INTERROGATE (0x0080) 需要呼叫 ControlService 函式,要求服務立即報告其狀態。
SERVICE_PAUSE_CONTINUE (0x0040) 呼叫 ControlService 函式以暫停或繼續服務的必要專案。
SERVICE_QUERY_CONFIG (0x0001) 呼叫 QueryServiceConfigQueryServiceConfig2 函式以查詢服務組態的必要專案。
SERVICE_QUERY_STATUS (0x0004) 呼叫 QueryServiceStatusQueryServiceStatusEx 函式,要求服務控制管理員了解服務的狀態。
需要呼叫 NotifyServiceStatusChange 函式,以在服務變更狀態時接收通知。
SERVICE_START (0x0010) 呼叫 StartService 函式以啟動服務的必要專案。
SERVICE_STOP (0x0020) 呼叫 ControlService 函式以停止服務的必要專案。
SERVICE_USER_DEFINED_CONTROL(0x0100) 需要呼叫 ControlService 函式,以指定使用者定義的控件程序代碼。

以下是服務的標準訪問許可權

存取權 描述
ACCESS_SYSTEM_SECURITY 呼叫 QueryServiceObjectSecuritySetServiceObjectSecurity 函式以存取 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 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

若要執行任何作業,用戶必須以互動方式登入,否則服務必須使用其中一個服務帳戶。

若要取得或設定服務對象的安全性描述元,請使用 QueryServiceObjectSecuritySetServiceObjectSecurity 函式。 如需詳細資訊,請參閱 修改服務的 DACL

當進程使用 OpenService 函式時,系統會針對服務對象的安全性描述項檢查所要求的訪問許可權。

將特定訪問許可權授與不受信任的使用者(例如 SERVICE_CHANGE_CONFIGSERVICE_STOP),可以讓他們干擾服務的執行,並可能允許他們在LocalSystem帳戶下執行應用程式。

呼叫 EnumServicesStatusEx 函式 時,如果呼叫端沒有服務 SERVICE_QUERY_STATUS 訪問許可權,服務就會從傳回至用戶端的服務清單中以無訊息方式省略。