Cada vez que reinstalamos Windows, creará un nuevo SID para el usuario, incluso el nombre de usuario es el mismo que antes.
// example (not real SID format, just show the problem)
user SID
--------------------
liuyan S-old-501 // old SID before reinstall
liuyan S-new-501 // new SID after reinstall
El problema molesto después de la reinstalación es la propiedad del archivo NTFS y los permisos en el disco duro todavía están asociados con el SID del usuario anterior.
Quiero mantener la configuración de propiedad y permisos de los archivos NTFS, luego quiero permitir que el nuevo usuario tome el SID del usuario anterior, para que pueda acceder a los archivos como antes sin problemas de permisos.
La cacls
herramienta de línea de comandos no se puede utilizar en tal situación, porque el archivo pertenece a un nuevo usuario, por lo que fallará con el error de acceso denegado . y no puede cambiar la propiedad.
Incluso si puedo cambiar la propiedad a través de la SubInACL
herramienta, cacls
no puedo eliminar el permiso del usuario anterior porque el usuario anterior no existe en una nueva instalación y no puedo copiar el permiso del usuario anterior al nuevo usuario.
Entonces, ¿podemos simplemente vincular el SID del antiguo usuario al nuevo usuario en el Windows recién instalado?
Lote de prueba de muestra
@echo off
REM Additional tools used in this script
REM PsGetSid http://technet.microsoft.com/en-us/sysinternals/bb897417
REM SubInACL http://www.microsoft.com/en-us/download/details.aspx?id=23510
REM
REM make sure these tools are added into PATH
set account=MyUserAccount
set password=long-password
set dir=test
set file=test.txt
echo Creating user [%account%] with password [%password%]...
pause
net user %account% %password% /add
psgetsid %account%
echo Done !
echo Making directory [%dir%] ...
pause
mkdir %dir%
dir %dir%* /q
echo Done !
echo Changing permissions of directory [%dir%]: only [%account%] and [%UserDomain%\%UserName%] has full access permission...
pause
cacls %dir% /G %account%:F
cacls %dir% /E /G %UserDomain%\%UserName%:F
dir %dir%* /q
cacls %dir%
echo Done !
echo Changing ownership of directory [%dir%] to [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
echo Done !
echo RunAs [%account%] user to write a file [%file%] in directory [%dir%]...
pause
runas /noprofile /env /user:%account% "cmd /k echo some text %DATE% %TIME% > %dir%\%file%"
dir %dir% /q
echo Done !
echo Deleting and Recreating user [%account%] (reinstall simulation) ...
pause
net user %account% /delete
net user %account% %password% /add
psgetsid %account%
echo Done ! %account% is recreated, it has a new SID now
echo Now, use this "same" account [%account%] to access [%dir%], it will failed with "Access is denied"
pause
runas /noprofile /env /user:%account% "cmd /k cacls %dir%"
REM runas /noprofile /env /user:%account% "cmd /k type %dir%\%file%"
echo Done !
echo Changing ownership of directory [%dir%] to NEW [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
cacls %dir%
echo Done ! As you can see, "Account Domain not found" is actually the OLD [%account%] user
echo Deleting user [%account%] ...
pause
net user %account% /delete
echo Done !
echo Deleting directory [%dir%]...
pause
rmdir %dir% /s /q
echo Done !
fuente
Respuestas:
Puede usar setacl para reemplazar los SID huérfanos por uno nuevo. Por ejemplo, use lo siguiente para reemplazar su SID anterior por el nuevo:
fuente
cacls
comando, pero su bandera de herencia no se cambia.-actn trustee
línea necesita ser-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"
. Incluso entonces, no establece correctamente lo que Cygwin recoge para el grupo (las imágenes fijas se muestran como "desconocidas" en/bin/ls -l
).-rec cont_obj
porque también aplica cambios en los archivos.No hay una forma compatible de cambiar el SID de la computadora o cambiar el SID de una cuenta local para que no coincida con el de la computadora.
La redacción de su pregunta implica que está reinstalando el sistema operativo con frecuencia, lo que no debería necesitar hacer. Si tiene problemas repetidos que requieren una reinstalación, puede valer la pena averiguar qué los está causando en lugar de simplemente reinstalar cada vez.
Ciertos grupos usan SID conocidos, lo que significa que no cambian cuando se reinstala la computadora. Por lo tanto, puede simplificar su problema eligiendo los permisos con anticipación para que usen estos grupos. Algunos de estos grupos que pueden ser útiles incluyen Administradores, Usuarios avanzados, Usuarios, Usuarios autenticados e INTERACTIVOS.
Una forma lenta pero fácil de restablecer los permisos para un árbol de carpetas completo es copiarlo:
Esto debe ejecutarse desde un símbolo del sistema elevado. El uso de la opción / b hace que robocopy use el privilegio de restauración para eludir la seguridad de los archivos. Cree
c:\new-copy
antes de comenzar y establezca los permisos como desee.Puede usar este comando para eliminar la carpeta original después de haberla copiado:
fuente