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

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

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 uma solução típica , takeownou GUI. Gostaria de alterar esses SIDs desconhecidos para SID locais conhecidos, mas manter os tipos de permissão e a herança.subinaclxcacls

Até agora, a única coisa próxima do que estou procurando é o script do PowerShell:http://poshcode.org/2081que permite excluir SIDs desconhecidos em compartilhamentos de rede. Ele contém lógica básica para encontrar SIDs desconhecidos, mas ainda não encontrei uma maneira de substituir o SID no FileSystemAccessRuleobjeto, mas não sou tão fluente em PowerShell ou .NET.
Se eu não estiver errado,Este artigono MS TechNet está sugerindo a construção FileSystemAccessRulee isso pode ser realizado.

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

Responder1

No Powershell usando Get-Acle Set-Aclvocê pode modificar a ACL manipulando a string SDDL.

Primeiro obtenha 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 desejar. 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 ACL:

$acl.SetSecurityDescriptorSddlForm($sddl2)

Em seguida, defina a ACL do objeto:

Set-Acl -AclObject $acl -Path C:\YourFile.txt

informação relacionada