Cada vez que reinstalamos o Windows, ele cria um novo SID para o usuário, mesmo que o nome de usuário seja o 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 é a propriedade do arquivo NTFS e as permissões no disco rígido ainda estão associadas ao SID do usuário antigo.
Desejo manter a propriedade e a configuração de permissão dos arquivos NTFS e depois permitir que o novo usuário tome o SID do usuário antigo, para que eu possa acessar os arquivos como antes sem problemas de permissão.
A cacls
ferramenta de linha de comando não pode ser usada nessa situação, porque o arquivo pertence a um novo usuário, portanto falhará com o erro de acesso negado . e não pode mudar de propriedade.
Mesmo que eu possa alterar a autoridade por meio da SubInACL
ferramenta, cacls
não consigo remover a permissão do usuário antigo porque o usuário antigo não existe na nova instalação e não consigo copiar a permissão do usuário antigo para o novo usuário.
Então, podemos simplesmente vincular o SID do usuário antigo ao 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 !
fonte
Respostas:
Você pode usar o setacl para substituir os SIDs órfãos por um novo. Por exemplo, use o seguinte para substituir seu antigo SID pelo novo:
fonte
cacls
comando, mas seu sinalizador de herança não é alterado.-actn trustee
linha precisa ser-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"
. Mesmo assim, ele não define corretamente o que o cygwin seleciona para o grupo (as imagens estáticas são exibidas como "desconhecidas"/bin/ls -l
).-rec cont_obj
porque também aplica alterações nos arquivos.Não há como suportar o SID do computador ou o SID de uma conta local para que não corresponda ao do computador.
A redação da sua pergunta implica que você está reinstalando o sistema operacional com freqüência, o que não deve ser necessário. Se você estiver tendo problemas repetidos que exijam uma reinstalação, pode valer a pena descobrir o que os está causando, em vez de apenas reinstalar a cada vez.
Certos grupos usam SIDs conhecidos, o que significa que eles não são alterados quando o computador é reinstalado. Portanto, você pode simplificar seu problema escolhendo permissões com antecedência para que eles usem esses grupos. Alguns desses grupos que podem ser úteis incluem Administradores, Usuários avançados, Usuários, Usuários autenticados e INTERATIVO.
Uma maneira lenta, porém fácil, de redefinir as permissões para uma árvore de pastas inteira é copiá-la:
Isso deve ser executado em um prompt de comando elevado. O uso da opção / b faz com que a 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 após copiá-la:
fonte