
Existe uma maneira de impedir o acesso de leitura e/ou gravação a uma pasta específica no Windows e conceder apenas acesso a um serviço/processo específico?
Parece que as permissões são baseadas no usuário e não no serviço, mas gostaria de saber se existe uma maneira de obter essa funcionalidade de qualquer maneira.
Responder1
Sim, existe uma maneira de fazer isso no Windows 7, embora possa ser necessário reconfigurar o serviço, o que apresenta um risco (provavelmente pequeno) de introduzir um problema de compatibilidade.
O ID de segurança associado a um serviço pode ser referenciado como
NT SERVICE\SERVICENAME
onde servicename
é substituído pelo nome real do serviço (mostrado como "Nome do serviço" na ferramenta administrativa de Serviços e distinto do nome de exibição mostrado na lista principal de serviços). Se você estiver usando a GUI para alterar as configurações de segurança e a máquina estiver associada a um domínio, será necessário alterar o escopo da pesquisa para o computador local. Observe também que isso funciona apenas para serviços atualmente instalados.
Você pode determinar o SID associado a um nome de serviço específico, esteja esse serviço instalado ou não, usando o sc showsid
comando:
C:\working>sc showsid wjkjk
NAME: wjkjk
SERVICE SID: S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649
Se você estiver configurando a segurança em um arquivo ou pasta usando o icacls
comando, poderá especificar um SID prefixando-o com *
, por exemplo, *S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649
.
Para que o serviço acesse arquivos usando esse ID de segurança, ele deve ser configurado com um tipo de SID de serviço "irrestrito" ou "restrito". Se estiver configurado com um tipo de SID de serviço "nenhum", o SID de serviço não funcionará. Você pode verificar o tipo de SID de serviço de um serviço instalado com o sc qsidtype
comando:
C:\working>sc qsidtype wuauserv
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: wuauserv
SERVICE_SID_TYPE: UNRESTRICTED
Se o tipo de serviço for “nenhum”, você poderá alterá-lo para “irrestrito” usando o sc sidtype
comando:
C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: psexesvc
SERVICE_SID_TYPE: NONE
C:\working>sc sidtype psexesvc unrestricted
[SC] ChangeServiceConfig2 SUCCESS
C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: psexesvc
SERVICE_SID_TYPE: UNRESTRICTED
Isso não terá efeito até que o serviço seja reiniciado.
Observação:você devenãoaltere o tipo de SID de um serviço de "nenhum" para "restrito". Fazer isso quase certamente causará o mau funcionamento do serviço. Alterar o tipo de "nenhum" para "irrestrito" tem muito menos probabilidade de causar problemas. Se o tipo de SID do serviço já for "restrito" ou "irrestrito", você não deverá alterá-lo.
Responder2
Existe um pseudo "usuário" chamado SERVICE
que todos os serviços usam, então você pode simplesmente restringir o acesso permitindo apenas o acesso desse "usuário".
No entanto, não foi bem isso que você perguntou, pois não se trata de um único serviço específico, são todos os serviços. Não existe um mecanismo padrão para restringir a um único serviço, emborapoderiaseria possível com algumas dificuldades consideráveis ao tentar forçar um serviço a usar um ID diferente na inicialização - eu não recomendaria isso.