Existe uma solução para substituir SIDs de conta desconhecida (S-1-5-21- *) com SID existente

2

Eu tenho uma típica "conta desconhecida" em muitos arquivos de instalações antigas / outras do Windows e há muitas respostas típicas em todos os lugares. No entanto, não estou procurando a solução típica takeown , subinacl , xcacls ou GUI. Gostaria de alterar esses SIDs desconhecidos para o SID local conhecido, mas manter os tipos de permissão e herança.

Até agora, a única coisa que está perto do que estou procurando é o script do PowerShell: link que permite excluir SIDs desconhecidos em compartilhamentos de rede. Ele contém uma lógica básica para encontrar SIDs desconhecidos, mas ainda não encontrei uma maneira de substituir o SID no objeto FileSystemAccessRule , mas não sou tão fluente no PowerShell ou no .NET.
Se eu não estiver errado, este artigo no MS TechNet está sugerindo a construção de FileSystemAccessRule e isso pode ser feito.

Alguém sabe se existe uma solução melhor para isso? Talvez exista um aplicativo, ferramenta de linha de comando ou cmdlet para esse trabalho?

    
por AndyDeGroo 04.02.2012 / 11:07

1 resposta

2

No PowerShell, usando Get-Acl e Set-Acl , você pode modificar a ACL manipulando a string SDDL.

Primeiro, pegue o objeto ACL.

$acl = Get-Acl -Path C:\YourFile.txt

Agora, pegue a string SDDL:

$sddl = $acl.sddl

Agora você pode substituir o SID na string pelo que deseja. Isso usa uma expressão regular para atualizar correspondências parciais.

$sddl2 = $sddl -replace "S-1-5-21-[0-9-]+", "ExistingSIDHere"

Em seguida, atualize o objeto da ACL:

$acl.SetSecurityDescriptorSddlForm($sddl2)

Em seguida, defina a ACL do objeto:

Set-Acl -AclObject $acl -Path C:\YourFile.txt
    
por 05.02.2012 / 01:59