¿Existe una solución para reemplazar los SID de Cuenta desconocida (S-1-5-21-*) con el SID existente?

¿Existe una solución para reemplazar los SID de Cuenta desconocida (S-1-5-21-*) con el SID existente?

Tengo una típica "Cuenta desconocida" en muchos archivos de instalaciones antiguas/otras de Windows y hay un montón de respuestas típicas en todas partes.
Sin embargo, no estoy buscando la solución típica takeown, subinaclo xcaclsGUI. Me gustaría cambiar esos SID desconocidos por SID locales conocidos pero mantener los tipos de permisos y la herencia.

Hasta ahora, lo único que se acerca a lo que estoy buscando es el script de PowerShell:http://poshcode.org/2081que permite eliminar SID desconocidos en recursos compartidos de red. Contiene lógica básica para encontrar SID desconocidos, pero todavía tengo que encontrar una manera de reemplazar el SID en el FileSystemAccessRuleobjeto, pero no domino PowerShell o .NET.
Si no me equivoco,Este artículoen MS TechNet sugiere la construcción de FileSystemAccessRuley eso se puede lograr.

¿Alguien sabe si hay una solución mejor para esto? ¿Quizás exista una aplicación, una herramienta de línea de comandos o un cmdlet para este trabajo?

Respuesta1

En Powershell usando Get-Acly Set-Aclpuede modificar la ACL manipulando la cadena SDDL.

Primero obtenga el objeto ACL.

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

Ahora obtenga la cadena SDDL:

$sddl = $acl.sddl

Ahora puedes reemplazar el SID en la cadena con lo que quieras. Esto utiliza una expresión regular para actualizar coincidencias parciales.

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

Luego actualice el objeto ACL:

$acl.SetSecurityDescriptorSddlForm($sddl2)

Luego configure la ACL del objeto:

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

información relacionada