Compartilhar via


Segurança do Serviço e Direitos de Acesso

O modelo de segurança do Windows permite controlar o acesso ao SCM (gerenciador de controle de serviço) e aos objetos de serviço. As seções a seguir fornecem informações detalhadas:

Direitos de acesso para o Gerenciador de Controle de Serviços

Veja a seguir os direitos de acesso específicos para o SCM.

Acesso à direita Descrição
SC_MANAGER_ALL_ACCESS (0xF003F) Inclui STANDARD_RIGHTS_REQUIRED, além de todos os direitos de acesso nesta tabela.
SC_MANAGER_CREATE_SERVICE (0x0002) Necessário para chamar a função CreateService para criar um objeto de serviço e adicioná-lo ao banco de dados.
SC_MANAGER_CONNECT (0x0001) Necessário para se conectar ao gerenciador de controle de serviço.
SC_MANAGER_ENUMERATE_SERVICE (0x0004) Necessário para chamar a função EnumServicesStatus ou EnumServicesStatusEx para listar os serviços que estão no banco de dados.
Necessário para chamar a função NotifyServiceStatusChange para receber notificação quando qualquer serviço for criado ou excluído.
SC_MANAGER_LOCK (0x0008) Necessário para chamar a funçãoLockServiceDatabase para adquirir um bloqueio no banco de dados.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) Necessário para chamar a funçãoNotifyBootConfigStatus.
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) Necessário para chamar a função QueryServiceLockStatus para recuperar as informações de status de bloqueio do banco de dados.

Veja a seguir os de direitos de acesso genéricos para o SCM.

Acesso à direita Descrição
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

Um processo com os direitos de acesso corretos pode abrir um identificador para o SCM que pode ser usado nas funções OpenService, EnumServicesStatusExe queryServiceLockStatus. Somente processos com privilégios de Administrador podem abrir identificadores para o SCM que podem ser usados pelas funçõesCreateService e LockServiceDatabase.

O sistema cria o descritor de segurança para o SCM. Para obter ou definir o descritor de segurança para o SCM, use as funções QueryServiceObjectSecurity e SetServiceObjectSecurity com um identificador para o objeto SCManager.

Windows Server 2003 e Windows XP: Diferentemente da maioria dos outros objetos protegíveis, o descritor de segurança do SCM não pode ser modificado. Esse comportamento foi alterado a partir do Windows Server 2003 com o Service Pack 1 (SP1).

Os direitos de acesso a seguir são concedidos.

Conta Direitos de acesso
Usuários autenticados remotos
SC_MANAGER_CONNECT
Usuários autenticados locais (incluindo LocalService e 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
Administradores
SC_MANAGER_ALL_ACCESS

Observe que usuários remotos autenticados pela rede, mas não conectados interativamente, podem se conectar ao SCM, mas não executar operações que exijam outros direitos de acesso. Para executar essas operações, o usuário deve estar conectado interativamente ou o serviço deve usar uma das contas de serviço.

Windows Server 2003 e Windows XP: usuários autenticados remotos recebem os direitos de acesso SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUSe STANDARD_RIGHTS_READ. Esses direitos de acesso são restritos conforme descrito na tabela anterior a partir do Windows Server 2003 com SP1

Quando um processo usa a função OpenSCManager para abrir um identificador para um banco de dados de serviços instalados, ele pode solicitar direitos de acesso. O sistema executa uma verificação de segurança no descritor de segurança do SCM antes de conceder os direitos de acesso solicitados.

Direitos de acesso para um serviço

Veja a seguir os direitos de acesso específicos para um serviço.

Acesso à direita Descrição
SERVICE_ALL_ACCESS (0xF01FF) Inclui STANDARD_RIGHTS_REQUIRED além de todos os direitos de acesso nesta tabela.
SERVICE_CHANGE_CONFIG (0x0002) Necessário para chamar a função ChangeServiceConfig ou ChangeServiceConfig2 para alterar a configuração do serviço. Como isso concede ao chamador o direito de alterar o arquivo executável executado pelo sistema, ele deve ser concedido somente aos administradores.
SERVICE_ENUMERATE_DEPENDENTS (0x0008) Necessário para chamar a função EnumDependentServices para enumerar todos os serviços dependentes do serviço.
SERVICE_INTERROGATE (0x0080) Necessário para chamar a função ControlService para solicitar que o serviço relate seu status imediatamente.
SERVICE_PAUSE_CONTINUE (0x0040) Necessário para chamar a função ControlService para pausar ou continuar o serviço.
SERVICE_QUERY_CONFIG (0x0001) Necessário para chamar oQueryServiceConfig e funções QueryServiceConfig2 para consultar a configuração do serviço.
SERVICE_QUERY_STATUS (0x0004) Necessário para chamar a função QueryServiceStatus ou queryServiceStatusEx para perguntar ao gerenciador de controle de serviços sobre o status do serviço.
Necessário para chamar a função NotifyServiceStatusChange para receber notificação quando um serviço altera o status.
SERVICE_START (0x0010) Necessário para chamar a função StartService para iniciar o serviço.
SERVICE_STOP (0x0020) Necessário para chamar a função ControlService para interromper o serviço.
SERVICE_USER_DEFINED_CONTROL(0x0100) Necessário para chamar a função ControlService para especificar um código de controle definido pelo usuário.

Veja a seguir os de direitos de acesso padrão para um serviço.

Acesso à direita Descrição
ACCESS_SYSTEM_SECURITY Necessário para chamar a função QueryServiceObjectSecurity ou setServiceObjectSecurity para acessar o SACL. A maneira adequada de obter esse acesso é habilitar o privilégio SE_SECURITY_NAME no token de acesso atual do chamador, abrir o identificador para ACCESS_SYSTEM_SECURITY acesso e desabilitar o privilégio.
EXCLUIR (0x10000) Necessário para chamar a função DeleteService para excluir o serviço.
READ_CONTROL (0x20000) Necessário para chamar a função QueryServiceObjectSecurity para consultar o descritor de segurança do objeto de serviço.
WRITE_DAC (0x40000) Necessário para chamar a funçãoSetServiceObjectSecurity para modificar o Dacl membro do descritor de segurança do objeto de serviço.
WRITE_OWNER (0x80000) Necessário para chamar a função SetServiceObjectSecurity para modificar o Owner e Group membros do descritor de segurança do objeto de serviço.

Veja a seguir os de direitos de acesso genéricos para um serviço.

Acesso à direita Descrição
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

O SCM cria o descritor de segurança de um objeto de serviço quando o serviço é instalado pela função CreateService. O descritor de segurança padrão de um objeto de serviço concede o seguinte acesso.

Conta Direitos de acesso
Usuários autenticados remotos Não concedido por padrão.Windows Server 2003 com SP1: SERVICE_USER_DEFINED_CONTROL
Windows Server 2003 e Windows XP: Os direitos de acesso para usuários autenticados remotos são os mesmos para usuários autenticados locais.
Usuários autenticados locais (incluindo LocalService e 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
Administradores
EXCLUIR
READ_CONTROL
SERVICE_ALL_ACCESS
WRITE_DAC
WRITE_OWNER

Para executar quaisquer operações, o usuário deve estar conectado interativamente ou o serviço deve usar uma das contas de serviço.

Para obter ou definir o descritor de segurança para um objeto de serviço, use as funções QueryServiceObjectSecurity e SetServiceObjectSecurity. Para obter mais informações, consulte Modificando a DACL para um serviço.

Quando um processo usa a função OpenService, o sistema verifica os direitos de acesso solicitados no descritor de segurança do objeto de serviço.

Conceder certos direitos de acesso a usuários não confiáveis (como SERVICE_CHANGE_CONFIG ou SERVICE_STOP) pode permitir que eles interfiram na execução do serviço e, possivelmente, permitir que eles executem aplicativos na conta localsystem.

Quando função EnumServicesStatusEx for chamada, se o chamador não tiver o direito de acesso SERVICE_QUERY_STATUS a um serviço, o serviço será silenciosamente omitido da lista de serviços retornados ao cliente.