Za każdym razem, gdy ponownie instalujemy system Windows, tworzy on nowy identyfikator SID dla użytkownika, nawet nazwa użytkownika jest taka sama jak poprzednio.
// 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
Irytującym problemem po ponownej instalacji jest zarządzanie plikami NTFS, a uprawnienia na dysku twardym są nadal powiązane z identyfikatorem SID starego użytkownika.
Chcę zachować własność i ustawienia uprawnień do plików NTFS, a następnie pozwolić nowemu użytkownikowi pobrać identyfikator SID starego użytkownika, aby móc uzyskać dostęp do plików jak poprzednio bez problemu z uprawnieniami.
W cacls
takim przypadku nie można użyć narzędzia wiersza poleceń, ponieważ plik należy do nowego użytkownika, więc nie powiedzie się z powodu błędu odmowy dostępu . i nie może zmienić właściciela.
Nawet jeśli mogę zmienić uprawnienia za pomocą SubInACL
narzędzia, cacls
nie mogę usunąć uprawnienia starego użytkownika, ponieważ stary użytkownik nie istnieje podczas nowej instalacji, i nie mogę skopiować uprawnienia starego użytkownika do nowego użytkownika.
Czy możemy po prostu powiązać identyfikator SID starego użytkownika z nowym użytkownikiem w świeżo zainstalowanym systemie Windows?
Próbka partii testowej
@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 !
źródło
Odpowiedzi:
Możesz użyć setacl, aby zastąpić osierocone identyfikatory SID nowymi. Na przykład użyj następujących, aby zastąpić stary identyfikator SID nowym:
źródło
cacls
polecenia, ale jego flaga dziedziczenia nie jest zmieniana.-actn trustee
Linia musi być-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"
. Nawet wtedy nie ustawia poprawnie tego, co cygwin wybiera dla grupy (zdjęcia są wyświetlane jako „nieznane” w/bin/ls -l
).-rec cont_obj
ponieważ dotyczy on również zmian w plikach.Nie ma obsługiwanego sposobu zmiany identyfikatora SID komputera lub zmiany identyfikatora SID konta lokalnego, aby nie był zgodny z identyfikatorem komputera.
Treść pytania sugeruje, że często instalujesz system operacyjny, co nie powinno być konieczne. Jeśli masz powtarzające się problemy, które wymagają ponownej instalacji, może warto dowiedzieć się, co je powoduje, niż tylko ponowna instalacja za każdym razem.
Niektóre grupy używają dobrze znanych identyfikatorów SID, co oznacza, że nie zmieniają się one podczas ponownej instalacji komputera. Możesz więc uprościć swój problem, wybierając wcześniej uprawnienia, aby korzystały z tych grup. Niektóre z tych grup, które mogą być przydatne, to Administratorzy, Użytkownicy zaawansowani, Użytkownicy, Użytkownicy uwierzytelnieni i INTERAKTYWNY.
Jednym z powolnych, ale łatwych sposobów resetowania uprawnień dla całego drzewa folderów jest jego skopiowanie:
Należy to uruchomić z wiersza polecenia z podwyższonym poziomem uprawnień. Użycie opcji / b powoduje, że robocopy korzysta z przywileju przywracania, aby ominąć zabezpieczenia plików. Utwórz
c:\new-copy
przed rozpoczęciem i ustaw odpowiednie uprawnienia.Możesz użyć tego polecenia, aby usunąć oryginalny folder po skopiowaniu:
źródło