Eu criei o serviço de uma 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. Esse serviço também usa a conectividade do banco de dados para conectar-se a outro servidor. Meu plano é que o serviço seja executado como a conta "Serviço local" padrão. Como preciso permitir privilégios de gravação / leitura, que aparentemente a conta "Serviço local" não faz por padrão, vou definir explicitamente privilégios de "Controle total" para a conta "Serviço local" na pasta em que estou leitura / gravação de e para.
Eu acredito que o acima é um bom. Minha pergunta é: para a pasta em que estou lendo e gravando, preciso configurar uma função "Serviço de Rede" com acesso total ao controle? Estou pensando em como meu serviço usa conectividade de banco de dados com outro servidor, se vou precisar da configuração da conta "Serviço de Rede".
Talvez eu esteja entendendo mal o que a conta "Serviço de Rede" faz.
fonte
LocalService
estiver comprometido, ele terá acesso a qualquer coisa que você abriuLocalService
, enquanto que normalmente ele não terá acesso a nada. Esse é um procedimento operacional de segurança de computador padrão desde os anos 70 .LocalSystem
tem mais direitos e privilégios do que contas de administrador regulares.A resposta anterior não pareceu abordar as perguntas diretamente, então pensei em adicioná-la.
Pessoalmente, não vejo um grande problema com este plano. Com BUILTINs, a escolha é entre:
Sem dúvida, é 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 executada em uma conta de serviço personalizada e de baixo privilégio. Mas, a menos que você deseje criar uma nova conta / gerenciar senhas para cada serviço implantado, usar o LocalService para tarefas menores não sensíveis não é uma coisa tão terrível. Você só precisa tomar uma decisão responsável com base nessas considerações, como o conteúdo desse diretório ou banco de dados, o impacto se elas forem violadas, etc.
Embora, novamente, de acordo com o princípio do menos privilégio, você só deva definir
Full Control
seModify
não for realmente suficiente.Se seu banco de dados exigisse login no Windows Integrated / SSPI, sim, você precisaria usar o NetworkService (ou uma conta de serviço de domínio) em qualquer lugar, como RunAs e permissões de diretório. Supondo que você também concedeu ao seu nome de computador $ ou acesso à conta de domínio esse banco de dados. Duvido que você esteja fazendo isso, portanto, se ele usa autenticação normal por nome de usuário / senha, você deve poder fazer tudo com o LocalService. Você precisa conceder apenas um direito de conta nesse diretório, o que você usa nos seus RunAs, não ambos.
LocalService / 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 eles aparecem na rede como uma conta real (computador). Mas o LS aparecerá como ANÔNIMO; portanto, será negado principalmente tudo na rede.
A propósito, você deve usar uma Tarefa agendada para isso, não um serviço.
* A partir do Vista, devido ao isolamento do serviço , um processo LocalService comprometido não pode facilmente atacar outro. Cada processo / instância de serviço LocalService / NetworkService obtém sua própria SID de sessão de logon exclusiva (proprietário exclusivo), diferente 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 restritos à gravação são mencionados neste contexto.
fonte
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 o seu serviço, a menos que você precise dos recursos extras de 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 genérica do Serviço local. O problema, como outros já apontaram, é que isso também daria acesso de leitura / gravação a todos os outros serviços em execução como Serviço Local e, se todos os serviços fizessem isso, gradualmente, o Serviço Local teria acesso a recursos cada vez mais importantes.
A solução é ACL sua pasta usando seu serviço específico SID. Somente seu próprio processo de serviço tem seu SID de serviço associado, portanto, isso bloqueia ainda mais seus recursos. Você pode visualizar o serviço SID 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 habilitar o uso do SID do serviço pelo seu serviço, use
ChangeServiceConfig2
com aSERVICE_SID_INFO
estrutura a ser configuradaSERVICE_SID_TYPE_UNRESTRICTED
. Você também pode definirSERVICE_SID_TYPE_RESTRICTED
um SID ainda mais restrito, que permita apenas o acesso de gravação a recursos explicitamente permitidos com o SID do serviço.Este link possui as descrições de alto nível dos SIDs de serviço e SIDs de serviço restrito: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)
fonte