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


18

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 !

파일의 소유권을 가지지 않는 이유는 무엇입니까?
Ramhound 2016 년

소유권 만 가져 오면 권한이 여전히 이전 사용자의 SID로 설정되어 있기 때문에 일부 파일에 액세스 할 수 없습니다.
LiuYan 刘 研

@LiuYan 刘 研 그러나 소유권을 얻은 후에는 모든 권한을 편집 할 수 있어야합니다.
Iszi

1
@IsziRoryorIsznti, 파일이 적고 모든 권한이 부모로부터 상속되면 true입니다. 그러나 파일이 많고 거의 각 파일에 개별 권한 설정 (예 : Cygwin의 파일)이있는 경우 동일한 권한으로 간단히 바꿀 수 없습니다.
LiuYan 刘 研

답변:


11

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를 변경하지는 않았지만)! 이제 필수 목록에 있습니다! 그러나 예기치 않은 동작이 있습니다. 디렉토리와 파일을 삭제하지 않고 테스트 배치 후에 시도하면 디렉토리가 부모의 권한을 상속받습니다. 원치 않는 것입니다. 참고 : 디렉토리의 ACL은 cacls명령을 통해 변경 되지만 상속 플래그는 변경되지 않습니다.
LiuYan 刘 研

SetACL 문서에 따르면 C : \\이어야한다고 생각합니다.
cdmckay

@ cdmckay : 확실하지 않습니다. "개체 이름이 백 슬래시로 끝나고 따옴표로 묶으면 마지막 백 슬래시를 다른 백 슬래시로 이스케이프 처리하십시오." 그러나 나는 따옴표로 묶지 않습니다.
다니엘 Gehriger

1
2016년 1월 8일로, 지정할 필요가 무엇인지 에 대한 수탁자의 조치를 하거나 소유자가 설정되어 있지 않습니다. -actn trustee라인이 있어야합니다 -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g". 그래도 그룹에 대해 cygwin이 선택하는 것을 올바르게 설정하지 못합니다 (여전히 "에서 알 수 없음"으로 /bin/ls -l표시됨).
Makyen

1
@ Makyen : cygwin과 같은 문제가 있었고 -rec cont_obj파일에 변경 사항을 적용하기 때문에 고쳤습니다 .
Denis Bakharev

3
  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
    

따라서 관리자 로이 작업을 수행하고 이전 사용자 위치에서 새 사용자 위치로 파일을 복사하면 각 파일의 tge SUD가 새 사용자를 tge로 설정합니까?
trusktr

@trusktr : 무슨 뜻인지에 따라 다릅니다. 파일의 소유권은 복사를 수행하는 관리자에게 할당되지만 권한은 상위 폴더에서 상속됩니다. 일반적으로 권한 만 중요합니다.
Harry Johnston

기본적으로 이전 Windows C : \ Users \ username 위치에서 새 Windows C : \ Users \ username 위치로 모든 파일을 복사하여 해당 파일이 모두 새로운 사용자에게 속하도록하는 것입니다 (새 Windows로 마이그레이션). 기본적으로 설치하고 이전 사용자의 파일을 유지하려는 경우). 이전과 새로운 사용자 이름이 동일합니다. 관리자가 트릭을 수행하면 파일을 한 곳에서 다른 곳으로 간단하게 복사 할 수 있습니까? NTFS-3G를 사용하여 파일 SID를 Linux 사용자에게 매핑하기 때문에 파일의 SID가 새 사용자의 SID로 변경되는지 궁금합니다.
trusktr 2016 년

@ trusktr :이 경우 소유권은 문제가되지 않지만 사용자 프로필에는 마이그레이션 할 수없는 것들 (대부분 사용자의 레지스트리 하이브)이 포함됩니다. Robocopy는 권한이있는 한 괜찮을 것이지만 전체 <username> 폴더 대신 각 개별 폴더 (예 : 문서, 데스크탑 등)를 복사하는 것이 좋습니다. AppData와 같은 숨겨진 폴더는 그대로 두십시오. 사본은 보관해야하지만 새 계정 위에 복사하지 마십시오.
Harry Johnston

이상적으로는 <username> 폴더를 별도의 파티션 (이전 Windows 파티션)에 유지하고 <username> 폴더를 새 Windows의 <username> 사용자 홈 폴더로 만들고 싶습니다.
trusktr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.