Como eu dou permissões de início / parada / reinicialização em um serviço para um usuário ou grupo arbitrário em um servidor não membro do domínio?

58

Temos um conjunto de serviços do Windows em execução nos nossos servidores, que realizam várias tarefas automatizadas, independentemente umas das outras, com exceção de um serviço que cuida dos outros serviços.

No caso de um dos serviços falhar em responder ou travar, este serviço tentará reiniciar o serviço e, se uma exceção for lançada durante a tentativa, enviará um email para a equipe de suporte, para que eles possam reiniciar o serviço por conta própria .

Depois de fazer uma pequena pesquisa, encontrei algumas "soluções" que variam da solução alternativa mencionada em KB907460 para fornecer a conta sob a qual o serviço está executando direitos de administrador.

Não me sinto à vontade com nenhum desses métodos - não entendo as conseqüências do primeiro método descrito no artigo da base de conhecimento da Microsoft, mas definitivamente não quero dar acesso de administrador à conta sob a qual o o serviço está em execução.

Eu dei uma olhada rápida na Política de segurança local e, além da política, que define se uma conta pode ou não fazer logon como um serviço, não consigo ver nada que pareça se referir a serviços.

Estamos executando isso no Server 2003 e no Server 2008, portanto, quaisquer ideias ou ponteiros serão gentilmente recebidos!

Esclarecimento: Eu não quero conceder a capacidade de iniciar / parar / reiniciar todos os serviços para um determinado usuário ou grupo - eu quero ser capaz de conceder a permissão para fazê-lo em < em> serviços específicos apenas, para um determinado usuário ou grupo.

Esclarecimentos adicionais: Os servidores dos quais preciso conceder essas permissões não pertencem a um domínio - eles são dois servidores voltados para a Internet que recebem arquivos, os processam e enviam para servidores terceirizados, além de veicular alguns sites, a Diretiva de Grupo do Active Directory não é possível. Desculpe por não ter esclarecido isso.

    
por abitgone 04.10.2010 / 15:16

4 respostas

51

Parece não haver uma forma de fazer isso com base na GUI, a menos que você tenha ingressado em um domínio - pelo menos nenhum que eu possa encontrar em nenhum lugar -, por isso explorei um pouco mais e descobri uma resposta que funciona para a nossa solução.

Eu não entendi o que a representação de string significava no artigo da base de conhecimento, mas fazer um pouco de escavação me levou a descobrir que é sintaxe SDDL. Outras escavações levaram-me a artigo de Alun Jones que explica como obter o descritor de segurança para um serviço e o que cada bit significa. MS KB914392 tem mais detalhes.

Para anexar ao descritor de segurança existente do serviço, use sc sdshow "Service Name" para obter o descritor existente. Se este for um antigo serviço .NET do Windows - como é o caso do nosso - o descritor de segurança deve ser algo como isto:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Precisamos conceder permissões RP (para iniciar o serviço), WP (para interromper o serviço), DT (para pausar / continuar o serviço) e LO (para consultar o status atual do serviço ). Isso pode ser feito adicionando nossa conta de serviço ao grupo Usuários avançados, mas eu só quero conceder acesso individual à conta na qual o serviço de manutenção é executado.

Usando runas para abrir um prompt de comando na conta de serviço, executei whoami /all , o que me deu o SID da conta de serviço e, em seguida, construí o SDDL adicional abaixo:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Isso é adicionado à seção D: da string SDDL acima:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Isso é aplicado ao serviço usando o comando sc sdset :

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Se tudo correr conforme o planejado, o serviço poderá ser iniciado, interrompido, pausado e ter seu status consultado pelo usuário definido pelo SID acima.

    
por 05.10.2010 / 14:23
32

Acabei de ter o mesmo problema.
Você pode usar SubInACL.exe no Resource Kit. Baixe o utilitário autônomo aqui: link

Use msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo para extrair os arquivos se você não quiser instalar o .msi

  1. Abra um prompt de comando como Administrador
  2. Vá para o diretório em que você colocou o arquivo .exe
  3. Executar subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Iniciar serviço
O = parar o serviço
P = Pausa / continuar serviço

Referência completa: Como conceder direitos de usuários para gerenciar serviços no Windows 2000
ou digite subinacl /help

Observação: não tente usar subinacl /service SERVICE_NAME /perm , pois isso pode causar problemas (lição aprendida: P). O nome pode ser enganoso (perm! = Permissão), pois elimina todas as permissões para todos os usuários (até Admin!).

    
por 27.08.2011 / 00:17
4

Você está procurando Configuração do computador - Políticas - Configurações do Windows - Configurações de segurança - Serviços do sistema

Lá você pode não apenas definir o tipo de início do serviço, mas também pode configurar as ACLs de segurança para cada serviço. Por padrão, a interface listará apenas os serviços que estão instalados na máquina em que você está executando o GP Editor.

Para adicionar serviços que só existem em outra máquina:

  • exporte a chave de registro do serviço da outra máquina
  • importar na máquina gpedit
  • aplica a política
  • elimine a chave importada
por 04.10.2010 / 17:57
2

Eu usei o SubinAcl (como sugerido pelo patrx) para poder iniciar o MySQL como um usuário de domínio regular (não administrador) e ele funciona perfeitamente! (o comando precisa, no entanto, ser executado como um -local pelo menos-Admin)

O comando é:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Apenas note que entrei no usuário sem prefixá-lo com o domínio ... caso contrário, o comando falhará no comando de análise!

    
por 11.05.2015 / 10:24