Como concedo permissões de iniciar / parar / reiniciar em um serviço a um usuário ou grupo arbitrário em um servidor que não seja membro do domínio?

61

Temos um conjunto de serviços do Windows em execução em nossos servidores, que executam várias tarefas automatizadas independentemente uma da outra, 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, esse 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.

Depois de fazer uma pequena pesquisa, deparei-me com algumas 'soluções' que vão desde a solução alternativa mencionada no KB907460 até fornecer a conta na qual o serviço está executando os direitos de administrador.

Não me sinto confortável com nenhum desses métodos - não entendo as consequências do primeiro método, conforme descrito no artigo da base de conhecimento da Microsoft, mas definitivamente não quero conceder acesso de administrador à conta na qual o serviço está sendo executado. .

Examinei rapidamente a Diretiva de segurança local e, além da diretiva que define se uma conta pode ou não fazer logon como um serviço, não consigo ver mais nada que se refira a serviços.

Estamos executando isso no Server 2003 e no Server 2008, para que quaisquer idéias ou sugestões sejam gentilmente recebidas!


Esclarecimento: Não quero conceder a capacidade de iniciar / parar / reiniciar TODOS os serviços para um determinado usuário ou grupo - quero poder conceder a permissão para fazê-lo apenas em serviços específicos , para um determinado usuário ou grupo.


Esclarecimentos adicionais: Os servidores nos 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 os enviam a terceiros, além de servirem alguns sites, portanto A Diretiva de Grupo do Active Directory não é possível. Desculpe por não ter esclarecido isso.

abitgone
fonte
você também pode dar uma olhada neste artigo da ms, que também aponta para modificações do GP: support.microsoft.com/kb/256345
3
Desculpe, eu senti sua falta ... Eu estava ocupado. Você estava procurando algo parecido com isto: serverfault.com/questions/15147/…
Evan Anderson
Sei que essa é uma pergunta muito antiga, mas você considerou usar as opções de 'recuperação' no gerenciador de serviços do Windows?
Tim Long

Respostas:

51

Parece não haver uma maneira de fazer isso com base na GUI, a menos que você esteja associado a um domínio - pelo menos, nenhum que eu possa encontrar em qualquer lugar -, então eu procurei um pouco mais e encontrei uma resposta que funcione para nossa paciência.

Eu não entendi o significado da representação de string no artigo da base de conhecimento, mas pesquisar um pouco me levou a descobrir que era a sintaxe SDDL. Outras pesquisas me levaram a este artigo de Alun Jones, que explica como obter o descritor de segurança de um serviço e o que cada bit significa. O 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 esse é um serviço antigo e simples do .NET Windows - como é o caso do nosso - o descritor de segurança deve ter a seguinte aparência:

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)

Precisávamos conceder permissões RP(para iniciar o serviço), WP(para interromper o serviço), DT(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 runaspara abrir um prompt de comando na conta de serviço, executei o whoami /allque me deu o SID da conta de serviço e construí o SDDL adicional abaixo:

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

Isso então é adicionado à seção D: da sequência 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 sc sdsetcomando:

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, parado, pausado e ter seu status consultado pelo usuário definido pelo SID acima.

abitgone
fonte
10
Para uma maneira mais fácil de fazer a mesma coisa, você deve usar o SetACL.exe . Aqui está um exemplo de como usá-lo para definir permissões em um serviço:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti 15/15
2
Você pode usar o Process Hacker ( processhacker.sourceforge.net ) para uma GUI para configurar todos os serviços. Inclui serviços ocultos e permite definir mais configurações de um serviço como o caminho binário - e as permissões.
Ygoe
11
O CoreTech gui funcionou para mim. Difícil de acreditar que a GUI já não exista no Windows. Lendo as respostas aqui, como pode ser tão difícil? Grande falha em nome da Microsoft.
MikeKulls
Eu gosto de adicionar CCLCSWàs permissões SDDL (além de RPWPDTLO) para que eu também possa ver o serviço listado quando executo o Get-Service (que primeiro exige a modificação do SDDL para que o serviço do gerenciador de controle de serviços scmanager possa listar serviços acessíveis) . Eu também precisava SWpoder reiniciar certos serviços.
Baodad 25/09/19
34

Eu apenas tive o mesmo problema.
Você pode usar SubInACL.exe no Resource Kit. Baixe o utilitário autônomo aqui: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Use msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTopara extrair os arquivos se você não deseja instalar o arquivo .msi

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

T = Iniciar serviço
O = Parar serviço
P = Pausar / continuar serviço

Referência completa: como conceder aos usuários direitos para gerenciar serviços no Windows 2000
ou digitesubinacl /help

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

patrx
fonte
Não é possível mesclar contas SO e SF, desculpe Pat.
Chopper3
@ Chopper3 Obrigado pela sua resposta. Na verdade, eu tenho duas contas SO: uma é registrada e associada a esta conta SF; a outra é uma conta SO não registrada que eu tinha antes de me registrar (usei o mesmo endereço de e-mail). Eu esperava que os dois pudessem ser mesclados para que eu pudesse acompanhar a postagem que fiz antes. Como mencionado aqui , tentei sinalizar uma postagem, mas não consegui fazê-lo no SO (1 reputação). É por isso que eu sinalizei este post. Também tentei enviar um e-mail para [email protected] há mais de duas semanas, mas não obtive resposta. Você poderia me indicar o local / pessoa certa, por favor?
patrx
11
Checkout os detalhes deste procedimento no MSDN: support.microsoft.com/?kbid=288129
Marc Climent
4

Você está procurando Configuração do computador - Diretivas - 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 existem apenas em outra máquina:

  • exportar a chave de registro do serviço da outra máquina
  • importar na máquina gpedit
  • aplique a política
  • exclua a chave importada
Ryan Bolger
fonte
Confio em que você queira fazer isso gpedit.msc, pois a janela "Gerenciar servidor" não lista um nó de políticas. Se assim for, eu não posso ver um item sob o nó de Configurações de segurança que faz referência a "Serviços do Sistema" como você sugere acima, em ambos Server 2008 ou Server 2003.
abitgone
Ah sim. Presumi que você estivesse planejando fazer essas alterações por meio da política de grupo.
Ryan Bolger
11
De fato - estes não são servidores membros. Existe uma maneira de segmentar isso usando a política local ou algum outro método?
Abitgone 5/10/10
2

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

O comando é:

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

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

Mahieddine M. Ichir
fonte