Permissões necessárias para um usuário local consultar serviços

4

Estou tentando escrever um aplicativo que está sendo executado como um usuário local no servidor e precisa de acesso para enumerar os serviços e, potencialmente, até mesmo controlá-los (iniciar / parar).

É fazer parte do grupo de administradores a única forma que este usuário seria capaz de obter acesso a essa funcionalidade (sendo usado através do classe ServiceController )? Se for mais fácil, eu ficaria bem, mesmo sendo capaz de enumerar a lista de serviços (o início / parada interativo não é um show-stopper). Adicionaria o usuário ao trabalho de grupo do usuário avançado?

Obrigado!

edite: link

    
por Joel Martinez 20.11.2013 / 00:42

4 respostas

5

O grupo Usuários avançados nunca é a resposta. É uma coisa antiga legada. Melhor apenas considerá-lo inexistente.

Se você deseja definir permissões em serviços individuais do Windows de maneira granular, é possível, mas não é nem de longe tão fácil / intuitivo quanto definir permissões em um arquivo

Para ver as permissões atuais de um serviço do Windows:

C:\Users\Ryan>sc sdshow netlogon

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)

Para definir as permissões em um único serviço do Windows, por exemplo, para que um usuário não administrador possa iniciar e interromper um determinado serviço:

sc sdset netlogon "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
[SC] SetServiceObjectSecurity SUCCESS

Isso parece horrível, não parece? Essa gosma é chamada SDDL - Linguagem de Definição do Descritor de Segurança.

Este artigo é uma boa introdução sobre como interpretar o SDDL e fazer o que você está tentando fazer.

Você também pode usar modelos de segurança e políticas de grupo para realizar a mesma coisa:

    
por 20.11.2013 / 00:52
4

Outra opção amigável para fazer a mesma coisa é a ferramenta de linha de comando subinacl incluída no Windows 2003 Resource Kit. É uma pequena sacola de truques maravilhosa.

Aqui está a sintaxe para definir permissões de usuário em serviços:

SUBINACL /SERVICE \MachineName\ServiceName /GRANT=[DomainName\]UserName[=Access]

Estas são as opções de acesso disponíveis:

F : Full Control
R : Generic Read
W : Generic Write
X : Generic eXecute
L : Read controL
Q : Query Service Configuration
S : Query Service Status
E : Enumerate Dependent Services
C : Service Change Configuration
T : Start Service
O : Stop Service
P : Pause/Continue Service
I : Interrogate Service 
U : Service User-Defined Control Commands

Portanto, para conceder aos membros do grupo permissão DOMAIN \ GroupName para iniciar e parar o serviço 'ServiceName', seria necessário:

subinacl /service ServiceName /GRANT=DOMAIN\GroupName=TO

Para visualizar as permissões definidas no serviço 'ServiceName' (antes e depois de executar as opções acima), seria necessário:

subinacl.exe /service /verbose=1 ServiceName

Aqui está um HOWTO oficial para definir permissões de serviço usando subinacl: link

E aqui está o link de download do subinacl: link

    
por 20.11.2013 / 23:37
3

Para enumerar serviços, seu processo precisa do SC_MANAGER_ENUMERATE_SERVICE , nos velhos tempos todos os usuários autenticados tinham esse direito, mas desde o Vista isso não é mais o caso.

Usuários interativos têm, é por isso que um usuário normal pode fazer um net start ou Get-Service

Você pode alterar as permissões no Gerenciador de Controle de Serviços para permitir que o processo enumere os serviços. Você também precisa alterar as permissões de qualquer serviço que queira acessar.

Acabei de escrever uma postagem no blog sobre como fazer isso, ele inclui um script do PowerShell para fazer isso em todos os serviços da máquina local.

    
por 20.11.2013 / 22:40
0

Hm, tudo depende da linguagem que você está usando para consultar processos, mas a função de usuário necessária será determinada por um conjunto de privilégios que seu código precisará na máquina de destino. Alguns desses privilégios estão associados a contas de usuário normais, enquanto outros exigem a função de administrador.

    
por 20.11.2013 / 20:18