Windows를 다시 설치할 때마다 사용자 이름이 이전 과 동일 하더라도 사용자를위한 새 SID가 생성 됩니다.
// 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
재설치 후 성가신 문제는 NTFS 파일 소유권이며 하드 드라이브 디스크에 대한 권한은 여전히 기존 사용자의 SID와 관련이 있습니다.
NTFS 파일의 소유권 및 권한 설정을 유지 한 다음 새 사용자가 이전 사용자의 SID를 가져 와서 권한 문제없이 이전처럼 파일에 액세스 할 수 있도록하려고합니다.
cacls
새 사용자에게 속한 파일 않기 때문에이 실패했습니다 있도록 명령 줄 도구는 이러한 상황에서 사용할 수 없습니다 거부 액세스 오류입니다. 소유권을 변경할 수 없습니다.
SubInACL
도구 를 통해 owership을 변경할 수 있더라도 cacls
이전 사용자는 새 설치에 존재하지 않으므로 이전 사용자의 권한을 제거 할 수 없으며 이전 사용자의 권한을 새 사용자에게 복사 할 수 없습니다 .
따라서 새로 설치된 Windows에서 이전 사용자의 SID를 새 사용자에게 간단히 바인딩 할 수 있습니까?
샘플 테스트 배치
@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 !
답변
setacl 을 사용 하여 분리 된 SID를 새 것으로 교체 할 수 있습니다 . 예를 들어 다음을 사용하여 기존 SID를 새 SID로 바꾸십시오.
setacl.exe -on C:\
-ot file
-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst"
-rec cont
답변
-
컴퓨터의 SID를 변경하거나 로컬 계정의 SID를 변경하여 컴퓨터와 일치하지 않는 방법은 지원되지 않습니다.
-
질문의 말은 운영 체제를 자주 다시 설치한다는 것을 의미하며, 필요하지 않습니다. 다시 설치해야하는 문제가 반복되는 경우 매번 다시 설치하는 것보다 문제의 원인을 파악하는 것이 좋습니다.
-
특정 그룹은 잘 알려진 SID 를 사용 하므로 컴퓨터를 다시 설치할 때 변경되지 않습니다. 따라서 권한을 미리 선택하여 문제를 더 간단하게 만들어 그룹을 사용할 수 있습니다. 유용한 그룹 중 일부에는 관리자, 고급 사용자, 사용자, 인증 된 사용자 및 대화식이 있습니다.
-
전체 폴더 트리에 대한 느리지 만 쉬운 권한 재설정 방법은 다음을 복사하는 것입니다.
robocopy /e /b c:\original-folder c:\new-copy
관리자 권한 명령 프롬프트에서 실행해야합니다. / b 옵션을 사용하면 robocopy가 파일에 대한 보안을 무시하기 위해 복원 권한을 사용합니다.
c:\new-copy
시작하기 전에 작성 하고 원하는대로 권한을 설정하십시오.이 명령을 사용하여 복사 한 후 원래 폴더를 삭제할 수 있습니다.
robocopy /e /b c:\empty-folder c:\original-folder