Acesso negado ao gerenciar serviço no Windows

Depois do cansativo dia de ontem, quando saí do confortável mundo da progração C# e fui para o tenebroso território das permissões, autorizações, auditoria e configurações de arquivos, usuários, serviços e grupos, finalmente cheguei em uma solução para meu problema (exceção System.InvalidOperationException, com a seguinte mensagem: Não é possível abrir o serviço RoboMovimentacaoServico no computador ‘‘nome_servidor’ sendo que a InnerException foi Access is denied).

Segui o conselho do Craig Box e baixei o SubInAcl pra dar permissões no windows service, mas o que mais me ajudou foi uma página da Microsoft ensinando a conceder aos usuários direitos para gerenciar os serviços no Windows 2000, mas que também é válido para o Windows 2003.

O primeiro passo foi dar permissão total para o usuário da aplicação (sendo nome_servidor o nome do servidor, nome_usuário o nome do usuário,  nome_grupo o nome do grupo e RoboMovimentacaoServico o nome do serviço):

[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=nome_usuário[/code]

Não funcionou. Então tirei essa permissão e dei permissão pro grupo do usuário:

[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /REVOKE=nome_usuário
subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=nome_grupo[/code]

Também não funcionou, então tirei essa autorização e dei autorização para os usuários autenticados:

[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /REVOKE=nome_grupo
subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=”authenticated users”[/code]

Funcionou! Consegui iniciar, parar e ver o status do serviço RoboMovimentacaoServico no servidor de COM através da página em ASP.NET no servidor web!

O próximo passo foi tirar a autorização full e deixar apenas as que eu necessitava. Na tentativa e erro descobri que as necessárias são:

S : Query Service Status (para consultar o status do serviço)
E : Enumerate Dependent Services (para parar o serviço)
T : Start Service (para iniciar o serviço)
O : Stop Service (para parar o serviço)

Então o comando ficou assim:

[code]subinacl.exe /service \\nome_servidor\RoboMovimentacaoServico /GRANT=”authenticated users”=SETO[/code]

Isso seria o mesmo que utilizar o comando abaixo:

[code]sd.exe sdset RoboMovimentacaoServico D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;LCSWRPWP;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)[/code]

Esse comando mudaria o default (A;;U;;;AU) para (A;;LCSWRPWP;;;AU).

Em desenvolvimento não tive de alterar nada, em TI tive todo esse trampo. Em homologação, certificação e produção muito provavelmente nada poderei fazer… não sei como é a configuração dos ambientes e muito menos terei acesso para executar o SC.exe, pois o SubInAcl.exe não está instalado nesses servidores.

Amanhã tentarei conceder essas autorizações sem precisar autorizar todos os usuários autenticados.

Deixe um Comentário

3 Comentários.

  1. Bom dia, estou com um problema, tenho o windows 2003 server, e gostaria de dar acesso a usuários comuns para administrar alguns serviços, e mesmo usando o sublnAcl não consegui realizar a tarefa. Tem como me ajudar.

    Grato

  2. ASP.NET, Serviço do Windows e permissões - pingback on 14 de janeiro de 2009 em 23:28

Não fique de fora, dê sua opinião!

Trackbacks e Pingbacks:

%d blogueiros gostam disto: