Windows - Use uma conta de serviço local e/ou serviço de rede para um serviço do Windows

Windows - Use uma conta de serviço local e/ou serviço de rede para um serviço do Windows

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 realiza alguma E/S de arquivo, lê os arquivos, cria subdiretórios, etc. Este serviço também usa conectividade de banco de dados para conectar-se a outro servidor. Meu plano é executar o serviço como a conta padrão de "Serviço Local". Como preciso permitir privilégios de gravação/leitura, o que aparentemente a conta "Serviço Local" não faz por padrão, vou definir explicitamente os privilégios de "Controle Total" para a conta "Serviço Local" na pasta que estou ler/escrever de e para.

Eu acredito que o acima é um bom. Minha pergunta é: para a pasta que estou lendo e gravando, preciso configurar uma função de "Serviço de Rede" com acesso de controle total? Gostaria de saber, como meu serviço usa conectividade de banco de dados com outro servidor, se precisarei da configuração da conta "Serviço de rede".

Posso estar entendendo mal o que a conta "Serviço de rede" faz.

Responder1

ONT AUTHORITY\NetworkServicecontasó é necessário 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. Só é necessário para fins específicos em um domínio do Active Directory.

Também todo o ponto doNT AUTHORITY\LocalServicecontaé que ele tem privilégios mínimos no sistema. Conceder mais privilégios diminui a segurança de muitos serviços em seu sistema projetados para serem executados no nível de privilégio baixo para o qual foi projetado. Se o seu serviço exigir privilégios acima e além desses, você deverá criar uma nova conta para ele com os privilégios necessários e definir essa conta noEntrarguia das propriedades do serviço. (Isso também pode ser feito programaticamente.)

Você também pode executá-lo usando oNT AUTORITY\LocalSystemconta, que tem acesso ilimitado ao seu sistema, mas presumo que você queria usar a LocalServiceconta para aumentar a segurança que ela oferece.

Responder2

As outras respostas confirmam o que você diz sobre o uso do Serviço Local. Para resumir, o Serviço Local é a conta recomendada para uso com seu serviço, a menos que você precise dos recursos SSPI extras 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 conceder acesso à conta genérica do Serviço Local. 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, gradualmente o Serviço Local receberia acesso a recursos cada vez mais importantes.

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

Para ativar o uso do SID de serviço pelo seu serviço, use ChangeServiceConfig2com oSERVICE_SID_INFOestrutura a ser definida SERVICE_SID_TYPE_UNRESTRICTED. Você também pode configurar SERVICE_SID_TYPE_RESTRICTEDpara obter um SID ainda mais restrito que permita apenas acesso de gravação a recursos explicitamente permitidos com seu SID de serviço.

Este link contém descrições de alto nível de SIDs de serviço e SIDs de serviço restritos: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/hh125927(v=ws.10)

Responder3

A resposta anterior não parecia abordar as questões diretamente, então pensei em acrescentar algo a ela.

  1. Meu plano é executar o serviço como a conta padrão de "Serviço Local". Vou definir explicitamente os privilégios de "Controle total" para a conta "Serviço local" na pasta na qual estou lendo/gravando. Acredito que o acima é um bom plano.

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

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

Indiscutivelmente, é preferível adicionar algumas ACLs extras para poder usar a segunda opção. Sim, a opção mais segura para um serviço de baixo privilégio, mas altamente sensível à segurança, seria executado em uma conta de serviço personalizada e de baixo privilégio. Mas, a menos que você queira criar uma nova conta/gerenciar senhas para cada serviço implantado, usar LocalService para tarefas menores e não confidenciais não é uma coisa tão terrível. Você só precisa tomar uma decisão responsável com base nessas considerações, como o que está naquele diretório ou banco de dados, o impacto se forem violados, etc.

Embora, novamente, pelo princípio do menor privilégio, você só deva definir Full Controlif Modifyrealmente não é suficiente.

2.Minha pergunta é: para a pasta na qual estou lendo e gravando, preciso configurar uma função "Serviço de rede" com acesso de controle total? Gostaria de saber, como meu serviço usa conectividade de banco de dados com outro servidor, se precisarei da configuração da conta "Serviço de rede".

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, RunAs e permissões de diretório. Supondo que você também concedeu ao seu nome de computador $ ou acesso à conta de domínio a esse banco de dados. Duvido que você esteja fazendo isso, então, se ele usar autenticação normal de nome de usuário/senha, você poderá fazer tudo com LocalService. Você precisa conceder direitos a apenas uma conta nesse diretório, qualquer que seja o uso em seus RunAs, e não ambos.

3. Posso estar entendendo mal o que a conta "Serviço de rede" faz.

Serviço local/Serviço de redesã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 da rede porque aparece na rede como uma conta real (de computador). Mas LS aparecerá como ANÔNIMO, então será negado quase tudo na rede.

A propósito, você deveria usar uma tarefa agendada para isso, não um serviço.

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

informação relacionada