Como ligar o SID do usuário antigo ao novo usuário para permanecer com a propriedade e as permissões do arquivo NTFS após a reinstalação recente do Windows?

19

Cada vez que reinstalarmos o Windows, ele criará um novo SID para o usuário, mesmo que o nome de usuário seja mesmo de 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

O problema irritante após a reinstalação é o controle de arquivos NTFS e as permissões no disco rígido ainda estão associadas ao SID do usuário antigo.

Eu quero manter a propriedade e a configuração de permissão dos arquivos NTFS e, em seguida, permitir que o novo usuário use o SID do usuário antigo para que eu possa acessar os arquivos como antes sem o problema de permissão.

A ferramenta de linha de comando cacls não pode ser usada em tal situação, porque o arquivo pertence ao novo usuário, por isso ele falhará com o erro Access is denied . e não pode alterar a propriedade.

Mesmo que eu possa alterar a owership pela ferramenta SubInACL , cacls não pode remover a permissão do usuário antigo porque o usuário antigo não existe em uma nova instalação e não pode copiar a permissão do usuário antigo para um novo usuário.

Então, podemos simplesmente ligar o SID do usuário antigo a um novo usuário no Windows recém-instalado?

Lote de teste de amostra

@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 !
    
por LiuYan 刘研 21.06.2012 / 12:22

2 respostas

11

Você pode usar setacl para substituir os SIDs órfãos por um novo. Por exemplo, use o seguinte para substituir seu antigo SID pelo novo:

setacl.exe -on C:\ 
           -ot file 
           -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst" 
           -rec cont
    
por 26.02.2013 / 09:19
3
  1. Não há uma maneira compatível de alterar o SID do computador ou alterar o SID de uma conta local para que não corresponda ao do computador.

  2. O texto da sua pergunta implica que você está reinstalando o sistema operacional com frequência, o que não é necessário fazer. Se você está tendo problemas repetidos que exigem uma reinstalação, pode valer a pena descobrir o que os está causando, em vez de apenas reinstalar a cada vez.

  3. Certos grupos usam SIDs conhecidos , o que significa que eles não mudam quando o computador é reinstalado. Assim, você pode tornar seu problema mais simples escolhendo permissões com antecedência para que elas usem esses grupos. Alguns desses grupos que podem ser úteis incluem administradores, usuários avançados, usuários, usuários autenticados e INTERATIVO.

  4. Uma maneira lenta, mas fácil, de redefinir permissões para uma árvore de pastas inteira é copiá-la:

    robocopy /e /b c:\original-folder c:\new-copy
    

    Isso deve ser executado a partir de um prompt de comando elevado. O uso da opção / b faz com que o robocopy use o privilégio de restauração para ignorar a segurança nos arquivos. Crie c:\new-copy antes de iniciar e defina as permissões conforme desejado.

    Você pode usar este comando para excluir a pasta original depois de copiá-la:

    robocopy /e /b c:\empty-folder c:\original-folder
    
por 22.06.2012 / 04:37