다음을 통해 공유


서비스 보안 및 액세스 권한

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

올바른 액세스 권한이 있는 프로세스는 OpenService, EnumServicesStatusEx및 queryServiceLockStatus함수를사용할 수 있는 SCM에 대한 핸들을 열 수 있습니다. 관리자 권한이 있는 프로세스만 CreateService 사용할 수 있는 SCM에 대한 핸들을 열고 LockServiceDatabase함수를수 있습니다.

시스템은 SCM에 대한 보안 설명자를 만듭니다. SCM에 대한 보안 설명자를 가져오거나 설정하려면 QueryServiceObjectSecurity 사용하고 SCManager 개체에 대한 핸들과 함께 SetServiceObjectSecurity함수를.

Windows Server 2003 및 Windows XP: 대부분의 다른 보안 개체와 달리 SCM의 보안 설명자는 수정할 수 없습니다. 이 동작은 Windows Server 2003 SP1(서비스 팩 1)을 사용하여 변경되었습니다.

다음 액세스 권한이 부여됩니다.

계좌 액세스 권한
원격 인증된 사용자
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_STATUSSTANDARD_RIGHTS_READ 액세스 권한이 부여됩니다. 이러한 액세스 권한은 WINDOWS Server 2003 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 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 액세스 권한이 없으면 클라이언트에 반환된 서비스 목록에서 서비스가 자동으로 생략됩니다.