Chaque fois que nous avons réinstallé Windows, il crée un nouveau SID pour l'utilisateur, même si le nom d'utilisateur est le même qu'avant.
// 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
Le problème gênant après la réinstallation est la propriété des fichiers NTFS et les autorisations sur le disque dur sont toujours associées au SID de l'ancien utilisateur.
Je souhaite conserver le paramètre de propriété et d'autorisation des fichiers NTFS, puis laisser le nouvel utilisateur prendre le SID de l'ancien utilisateur, afin que je puisse accéder aux fichiers comme auparavant sans problème d'autorisation.
L' cacls
outil de ligne de commande ne peut pas être utilisé dans une telle situation, car le fichier appartient au nouvel utilisateur, il échouera donc avec Access est refusé . et il ne peut pas changer de propriétaire.
Même si je peux changer la propriété via l' SubInACL
outil, je ne cacls
peux pas supprimer l'autorisation de l'ancien utilisateur car l'ancien utilisateur n'existe pas sur la nouvelle installation et ne peut pas copier l'autorisation de l'ancien utilisateur vers le nouvel utilisateur.
Alors, pouvons-nous simplement lier le SID de l'ancien utilisateur au nouvel utilisateur sur Windows récemment installé?
Exemple de lot de test
@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 !
la source
Réponses:
Vous pouvez utiliser setacl pour remplacer les SID orphelins par un nouveau. Par exemple, utilisez ce qui suit pour remplacer votre ancien SID par le nouveau:
la source
cacls
commande, mais son indicateur d'héritage n'est pas modifié.-actn trustee
ligne doit être-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"
. Même alors, il ne définit pas correctement tout ce que cygwin ramasse pour le groupe (les images fixes s'affichent comme "inconnues" dans/bin/ls -l
).-rec cont_obj
car il applique également des modifications sur les fichiers.Il n'existe aucun moyen pris en charge pour modifier le SID de l'ordinateur ou pour modifier le SID d'un compte local afin qu'il ne corresponde pas à celui de l'ordinateur.
Le libellé de votre question implique que vous réinstallez fréquemment le système d'exploitation, ce que vous ne devriez pas faire. Si vous rencontrez des problèmes répétés qui nécessitent une réinstallation, il peut être utile de déterminer la cause de ces problèmes plutôt que de simplement réinstaller chaque fois.
Certains groupes utilisent des SID connus, ce qui signifie qu'ils ne changent pas lors de la réinstallation de l'ordinateur. Vous pouvez donc simplifier votre problème en choisissant des autorisations à l'avance afin qu'ils utilisent ces groupes. Certains de ces groupes qui pourraient être utiles incluent les administrateurs, les utilisateurs avec pouvoir, les utilisateurs, les utilisateurs authentifiés et INTERACTIVE.
Un moyen lent mais facile de réinitialiser les autorisations pour une arborescence de dossiers entière est de la copier:
Cela doit être exécuté à partir d'une invite de commandes élevée. L'utilisation de l'option / b fait que robocopy utilise le privilège de restauration pour contourner la sécurité sur les fichiers. Créez
c:\new-copy
avant de commencer et définissez les autorisations comme vous le souhaitez.Vous pouvez utiliser cette commande pour supprimer le dossier d'origine après l'avoir copié:
la source