Temos um conjunto de serviços do Windows em execução em nossos servidores que executam 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, esse serviço tenta reiniciar o serviço e, se uma exceção for lançada durante a tentativa, envia um e-mail para a equipe de suporte, para que eles mesmos possam reiniciar o serviço.
Depois de fazer uma pequena pesquisa, encontrei algumas 'soluções' que variam desde a solução alternativa mencionada no KB907460 até fornecer direitos de administrador à conta sob a qual o serviço está executando.
Não estou 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 sob a qual o serviço está sendo executado .
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 mais nada que pareça se referir a serviços.
Estamos executando isso no Server 2003 e no Server 2008, portanto, quaisquer ideias ou indicações serão bem recebidas!
Esclarecimento: não quero conceder a capacidade de iniciar/parar/reiniciar TODOS os serviços a um determinado usuário ou grupo - quero conceder a permissão para fazê-lo apenas em serviços específicos , a um determinado usuário ou grupo.
Esclarecimentos adicionais: Os servidores aos quais preciso conceder essas permissões não pertencem a um domínio - são dois servidores voltados para a Internet que recebem arquivos, os processam e os enviam para terceiros, além de servirem alguns sites, então A Diretiva de Grupo do Active Directory não é possível. Desculpe não ter deixado isso mais claro.
Não parece haver uma maneira baseada em GUI de fazer isso, a menos que você esteja ingressado em um domínio - pelo menos não encontrei em nenhum lugar - então pesquisei um pouco mais e encontrei uma resposta que funciona para nossa situação.
Eu não entendi o que a representação de string significava no artigo da base de conhecimento, mas pesquisar um pouco me levou a descobrir que é a sintaxe SDDL. Investigações adicionais me levaram a este 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 .NET Windows Service - como é o caso do nosso - o descritor de segurança deve ser algo assim:Precisávamos conceder permissões
RP
(para iniciar o serviço),WP
(para interromper o serviço),DT
(para pausar/continuar o serviço) eLO
(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 só quero conceder acesso individual à conta sob a qual o serviço de manutenção é executado.Usando
runas
para abrir um prompt de comando na conta de serviço, executeiwhoami /all
o que me deu o SID da conta de serviço e, em seguida, construí o SDDL adicional abaixo:Isso é adicionado à seção D: da string SDDL acima:
Isso é então aplicado ao serviço usando o
sc sdset
comando (antes doS:
texto):Se tudo correr conforme o planejado, o serviço pode ser iniciado, interrompido, pausado e ter seu status consultado pelo usuário definido pelo SID acima.
Acabei de ter o mesmo problema.
Você pode usar SubInACL.exe do 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=DirectoryToExtractTo
para extrair os arquivos se você não quiser instalar o .msisubinacl /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 direitos aos usuários para gerenciar serviços no Windows 2000
ou digite
subinacl /help
Nota: não tente
subinacl /service SERVICE_NAME /perm
, pois isso pode causar problemas (lição aprendida: P). O nome pode ser enganoso (perm != permission), pois exclui todas as permissões para todos os usuários (até mesmo Admin!).Você está procurando por 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 configurar as ACLs de segurança para cada serviço. Por padrão, a interface listará apenas os serviços instalados na máquina em que você está executando o GP Editor.
Para adicionar serviços que existem apenas em outra máquina:
Eu usei SubinAcl (como sugerido pelo patrx) para poder iniciar o MySQL como um usuário de domínio regular (não admin) e funciona perfeitamente! (o comando precisa, no entanto, ser executado como um -local pelo menos- Admin)
O comando é:
Apenas observe que entrei no usuário sem prefixá-lo com o domínio ... caso contrário, o comando falhará ao analisar o comando!
Eu gostaria de recomendar 3 opções como soluções.
Eu sei que esta é uma pergunta antiga, mas o desafio colocado na pergunta permanece (mesmo em versões posteriores do Windows). E algumas das respostas oferecidas são antigas e algumas não funcionam mais (ou as ferramentas oferecidas não existem mais).
Primeiro, MikeKullis comentou acima sobre "o CoreTech gui", mas não vejo nenhuma outra resposta ou comentário que elabore o que ele quis dizer com isso. Chama-se Security Service Editor e é gratuito. A empresa (CoreTech) fabrica várias ferramentas para ajudar nas tarefas administrativas do Windows.
Eu percebo que algumas pessoas ficarão desconfiadas ou hesitarão em instalar qualquer ferramenta, mas realmente para a tarefa específica de indicar facilmente que um determinado usuário deve ter permissão para iniciar/parar um serviço específico, é a solução mais fácil. Em apenas alguns cliques, é apresentada uma interface do usuário que se parece com o tradicional editor de permissões de arquivo do Windows, mas é para controlar as permissões de serviço (para um serviço específico, para um usuário específico - e oferecendo a mesma interface do usuário para "adicionar" um usuário , use o recurso "localizar" para ver uma lista de usuários na máquina etc.)
Em segundo lugar, quanto a soluções mais "embutidas", pode-se adicionar "Modelos de segurança" ao mmc e fazer o mesmo. É um pouco mais complicado, mas não como algumas outras soluções cli. Veja uma discussão sobre como usá-lo (e muitas outras opções, incluindo algumas também mencionadas em respostas e comentários aqui) em vários posts como este .
Terceiro e finalmente, se alguém preferir pelo menos usar uma ferramenta "MS", observe como essa postagem do blog (e outras) discute o uso da ferramenta Sysinternals Process Explorer , que também pode oferecer essa interface de usuário de permissões fácil para controlar as permissões de início/parada para um determinado serviço por um determinado usuário. Um ponto negativo modesto é que o serviço precisa estar em execução (já que você usa o ProcExp para encontrar o processo para esse serviço e usa um recurso de propriedades para acessar uma guia "serviços" que ele oferece). Para alguns, isso pode superar qualquer uma das duas opções acima.
Mas, como Mike acima, sou a favor da ferramenta CoreTech SSE. É gratuito, simples e provou ser seguro e eficaz no meu uso em várias dezenas de estações de trabalho e servidores.
Espero que o acima possa ajudar outras pessoas que encontrarem essa pergunta.