Windows를 새로 설치 한 후 NTFS 파일 소유권 및 권한을 유지하기 위해 이전 사용자의 SID를 새 사용자에게 바인딩하는 방법은 무엇입니까? 줄 도구는 이러한

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

답변

  1. 컴퓨터의 SID를 변경하거나 로컬 계정의 SID를 변경하여 컴퓨터와 일치하지 않는 방법은 지원되지 않습니다.

  2. 질문의 말은 운영 체제를 자주 다시 설치한다는 것을 의미하며, 필요하지 않습니다. 다시 설치해야하는 문제가 반복되는 경우 매번 다시 설치하는 것보다 문제의 원인을 파악하는 것이 좋습니다.

  3. 특정 그룹은 잘 알려진 SID 를 사용 하므로 컴퓨터를 다시 설치할 때 변경되지 않습니다. 따라서 권한을 미리 선택하여 문제를 더 간단하게 만들어 그룹을 사용할 수 있습니다. 유용한 그룹 중 일부에는 관리자, 고급 사용자, 사용자, 인증 된 사용자 및 대화식이 있습니다.

  4. 전체 폴더 트리에 대한 느리지 만 쉬운 권한 재설정 방법은 다음을 복사하는 것입니다.

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

    관리자 권한 명령 프롬프트에서 실행해야합니다. / b 옵션을 사용하면 robocopy가 파일에 대한 보안을 무시하기 위해 복원 권한을 사용합니다. c:\new-copy시작하기 전에 작성 하고 원하는대로 권한을 설정하십시오.

    이 명령을 사용하여 복사 한 후 원래 폴더를 삭제할 수 있습니다.

    robocopy /e /b c:\empty-folder c:\original-folder