Windows - Use a conta Serviço Local e / ou Serviço de Rede para um serviço do Windows

13

Eu criei um serviço de janela que monitora arquivos em um diretório específico em nosso sistema operacional Windows. Quando um arquivo é detectado, o serviço executa algumas E / S de arquivos, lê os arquivos, cria subdiretórios, etc. Esse serviço também usa a conectividade do banco de dados para se conectar a outro servidor. Meu plano é ter o serviço como a conta padrão "Serviço Local". Como preciso permitir privilégios de gravação / leitura, o que aparentemente a conta "Local Service" não faz por padrão, vou definir explicitamente os privilégios "Full Control" para a conta "Local Service" na pasta em que estou leitura / escrita de e para.

Eu acredito que o acima é bom. Minha pergunta é, para a pasta que estou lendo e escrevendo, preciso configurar uma função de "Serviço de Rede" com acesso de controle total? Eu estou querendo saber desde o meu serviço usa conectividade de banco de dados para outro servidor, se eu vou precisar da configuração da conta "Serviço de Rede".

Eu posso estar entendendo mal o que a conta "Serviço de Rede" faz.

    
por contactmatt 08.03.2011 / 21:04

3 respostas

14

A % contaNT AUTHORITY\NetworkService só é necessária quando você Está se comunicando com outros computadores em um domínio que precisa das credenciais da sua máquina para controle de acesso. Não é necessário para acesso simples à Internet / rede. É necessário apenas para fins específicos em um domínio do Active Directory.

Além disso, o ponto inteiro da % contaNT AUTHORITY\LocalService é que tem privilégios mínimos no sistema. Dar mais privilégios diminui a segurança dos muitos serviços em seu sistema projetados para serem executados no nível de baixo nível de privilégio que foi projetado para oferecer. Se o seu serviço requer privilégios acima e além daqueles, você deve criar uma nova conta para ele com os privilégios necessários e definir essa conta na guia Fazer Logon das propriedades do serviço. (Isso também pode ser feito de forma programática).

Você também pode executá-lo usando a NT AUTORITY\LocalSystem conta , que tem acesso ilimitado ao seu sistema, mas suponho que você queira usar a conta LocalService para aumentar a segurança que ele oferece.

    
por 09.03.2011 / 00:53
2

A resposta anterior não pareceu abordar as perguntas diretamente, então eu pensei em adicionar isso.

  1. My plan is to have the service run as the default "Local Service" account. I'm going to explicitly set "Full Control" privileges for the "Local Service" account on the folder that I'm reading/writing to and from. I believe the above is a good plan.

Pessoalmente, não vejo grande problema com esse plano. Com BUILTINs, a escolha é entre:

  1. Executando como LOCALSYSTEM - portanto, se esse serviço for comprometido, o invasor possui Tudo , e imediatamente.
  2. Executando como LOCALSERVICE - portanto, se esse serviço ou qualquer um dos muitos outros serviços executados nessa conta forem comprometidos, o invasor terá acesso a um diretório extra. *

Indiscutivelmente, adicionar algumas ACLs extras para poder usar a segunda opção é preferível. Sim, a opção mais segura para um serviço de baixo privilégio, mas altamente sensível à segurança, seria executar sob uma conta de serviço de baixo privilégio personalizada. Mas, a menos que você queira criar uma nova conta / gerenciar senhas para todos os serviços implantados, o uso de LocalService para pequenas tarefas não sensíveis não é algo tão terrível. Você só precisa tomar uma decisão responsável com base nessas considerações, como o que está nesse diretório ou no banco de dados, se elas forem violadas, etc.

Embora novamente, pelo princípio de privilégio, você deve definir apenas Full Control se Modify não for realmente suficiente.

2.My question is, for the folder that I'm reading and writing to, do I need to setup a "Network Service" role with full control access? I'm wondering since my service uses database connectivity to another server, if I'll need the "Network Service" account setup.

Se o seu banco de dados exigisse login do Windows Integrated / SSPI, então sim, você precisaria usar NetworkService (ou uma conta de serviço de domínio) em todos os lugares, ou seja, permissões RunAs e de diretório. Supondo que você também concedeu ao seu nome de computador $ ou acesso à conta de domínio a este banco de dados. Eu duvido que você esteja fazendo isso, então se ele usa autenticação normal por username / pwd, você deve poder fazer tudo com o LocalService. Você precisa conceder apenas um direito de conta nesse diretório, o que você usa em seus RunAs, não em ambos.

3.I may be misunderstanding what the "Network Service" account does.

Serviço local / NetworkService são contas quase idênticas no computador local. A diferença é principalmente o que eles podem fazer na rede. O NS pode acessar alguns recursos de rede porque aparece na rede como uma conta real (computador). Mas o LS aparecerá como ANÔNIMO, então será negado quase tudo na rede.

A propósito, você deve estar usando uma tarefa agendada para isso, não um serviço.

* Do Vista em diante, devido ao isolamento de serviço , um processo LocalService comprometido não pode atacar facilmente outro. Cada processo / instância de serviço LocalService / NetworkService obtém seu próprio SID de sessão de logon exclusivo (proprietário exclusivo), diferente do Windows 2003. Mas não tenho certeza se isso é perfeito e atenua totalmente a vulnerabilidade de DACL em arquivos e recursos. SIDs restritos e tokens com restrição de gravação são mencionados neste contexto.

    
por 13.11.2013 / 01:59
0

As outras respostas confirmam o que você diz sobre o uso do serviço local. Para resumir, Serviço Local é a conta recomendada para usar com seu serviço, a menos que você precise dos recursos extras do SSPI do Active Directory do Serviço de Rede.

Para restringir o acesso de leitura / gravação a uma pasta específica, você pode fazer melhor do que apenas dar acesso à conta do Serviço Local genérico. O problema, como outros apontaram, é que isso também daria acesso de leitura / gravação a todos os outros serviços executados como Serviço Local e, se todos os serviços fizessem isso, o Serviço Local receberia acesso a recursos cada vez mais importantes.

A solução é, em vez disso, ACL sua pasta usando seu serviço específico SID. Somente o seu próprio processo de serviço tem seu SID de serviço associado a ele, então isso bloqueia ainda mais o seu recurso. Você pode visualizar o serviço SID usando sc showsid <service name> . O serviço SID é gerado a partir do nome do serviço, portanto, será o mesmo em todas as máquinas.

Para habilitar o uso do SID de serviço pelo seu serviço, use ChangeServiceConfig2 com o SERVICE_SID_INFO estrutura para definir SERVICE_SID_TYPE_UNRESTRICTED . Você também pode definir SERVICE_SID_TYPE_RESTRICTED para obter um SID ainda mais restrito que permita acesso de gravação apenas aos recursos explicitamente permitidos com o seu SID de serviço.

Este link tem as descrições de alto nível de SIDs de serviço e SIDs de serviço restrito: link

    
por 24.07.2018 / 10:55