Làm cách nào để liên kết SID của người dùng cũ với người dùng mới để duy trì quyền sở hữu và quyền của tệp NTFS sau khi cài đặt lại Windows mới?


18

Mỗi lần chúng tôi cài đặt lại Windows, nó sẽ tạo ra một SID mới cho người dùng thậm chí tên người dùng là như nhau như trước đây.

// 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

Vấn đề gây phiền nhiễu sau khi cài đặt lại là quyền hạn của tệp NTFS và quyền trên ổ đĩa cứng vẫn được liên kết với SID của người dùng cũ.

Tôi muốn giữ quyền sở hữu và cài đặt quyền của các tệp NTFS, sau đó muốn cho phép người dùng mới lấy SID của người dùng cũ, để tôi có thể truy cập các tệp như trước mà không gặp sự cố về quyền.

Công caclscụ dòng lệnh không thể được sử dụng trong tình huống như vậy, vì tệp không thuộc về người dùng mới, do đó, nó sẽ bị lỗi với Access bị từ chối . và nó không thể thay đổi quyền sở hữu.

Ngay cả khi tôi có thể thay đổi quyền hạn thông qua SubInACLcông cụ, caclskhông thể xóa quyền của người dùng cũ vì người dùng cũ không tồn tại trên bản cài đặt mới và không thể sao chép quyền của người dùng cũ sang người dùng mới.

Vì vậy, chúng ta có thể liên kết đơn giản SID của người dùng cũ với người dùng mới trên Windows mới cài đặt không?

Lô thử nghiệm mẫu

@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 !

Tại sao bạn không chống lại việc sở hữu tập tin?
Ramhound

Nếu chỉ có quyền sở hữu, một số tệp không thể truy cập được vì quyền vẫn được đặt thành SID của người dùng cũ.
LiuYan 刘

@LiuYan 刘 Nhưng sau khi bạn sở hữu, bạn sẽ có thể chỉnh sửa tất cả các quyền.
Iszi

1
@IsziRoryorIsznti, đúng nếu có ít tệp và tất cả các quyền được thừa kế từ cha mẹ. nhưng khi có nhiều tệp và hầu như mỗi tệp có cài đặt quyền riêng lẻ (chẳng hạn như các tệp trong Cygwin), thì tôi không thể đơn giản thay thế chúng bằng cùng một quyền.
LiuYan 刘

Câu trả lời:


11

Bạn có thể sử dụng setacl để thay thế SID mồ côi bằng một SID mới. Ví dụ: sử dụng cách sau để thay thế SID cũ của bạn bằng SID mới:

setacl.exe -on C:\ 
           -ot file 
           -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst" 
           -rec cont

Công cụ tuyệt vời! Đó là những gì tôi muốn (mặc dù nó không thay đổi SID người dùng)! Nó nằm trong danh sách phải có của tôi bây giờ! Tuy nhiên, có một hành vi không mong muốn: khi tôi đã thử điều này sau đợt thử nghiệm của mình (không xóa thư mục và tệp), thư mục sẽ kế thừa quyền từ cha mẹ của nó, đó là điều không mong muốn. Lưu ý: ACL của thư mục được thay đổi thông qua caclslệnh, nhưng cờ thừa kế của nó không bị thay đổi.
LiuYan 刘

Tôi nghĩ rằng cần phải là C: \\ theo các tài liệu SetACL.
cdmckay

@cdmckay: không chắc chắn. Nó nói: "Nếu tên đối tượng kết thúc bằng dấu gạch chéo ngược và bạn đặt nó trong dấu ngoặc kép, hãy đảm bảo thoát dấu gạch chéo ngược cuối cùng bằng dấu gạch chéo ngược khác". Nhưng tôi không kèm theo nó trong dấu ngoặc kép.
Daniel Gehriger

1
Tính đến 2016/01/08, nó là cần thiết để xác định một điều gì cho hành động ủy thác hoặc chủ sở hữu không được thiết lập. Các -actn trusteedòng cần phải được -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g". Ngay cả sau đó, nó không đặt chính xác bất cứ thứ gì Cygwin chọn cho nhóm (ảnh tĩnh hiển thị là "không xác định" trong /bin/ls -l).
Makyen

1
@Makyen: Tôi gặp vấn đề tương tự với cygwin và đã khắc phục nó -rec cont_objvì nó cũng áp dụng các thay đổi trên các tệp.
Denis Bakharev

3
  1. Không có cách nào được hỗ trợ để thay đổi SID của máy tính hoặc thay đổi SID của tài khoản cục bộ để nó không khớp với SID của máy tính.

  2. Từ ngữ của câu hỏi của bạn ngụ ý rằng bạn đang cài đặt lại hệ điều hành thường xuyên, điều mà bạn không cần phải làm. Nếu bạn gặp vấn đề lặp đi lặp lại đòi hỏi phải cài đặt lại, có thể đáng để tìm ra nguyên nhân gây ra chúng thay vì chỉ cài đặt lại mỗi lần.

  3. Một số nhóm sử dụng SID nổi tiếng có nghĩa là chúng không thay đổi khi máy tính được cài đặt lại. Vì vậy, bạn có thể làm cho vấn đề của mình đơn giản hơn bằng cách chọn các quyền trước thời hạn để họ sử dụng các nhóm này. Một số nhóm này có thể hữu ích bao gồm Quản trị viên, Người dùng quyền lực, Người dùng, Người dùng được xác thực và TƯƠNG TÁC.

  4. Một cách chậm nhưng dễ dàng để đặt lại quyền cho toàn bộ cây thư mục là sao chép nó:

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

    Điều này phải được chạy từ một dấu nhắc lệnh nâng cao. Sử dụng tùy chọn / b làm cho robocopy sử dụng đặc quyền khôi phục để bỏ qua bảo mật trên các tệp. Tạo c:\new-copytrước khi bạn bắt đầu và đặt quyền như mong muốn.

    Bạn có thể sử dụng lệnh này để xóa thư mục gốc sau khi bạn đã sao chép nó:

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

Vì vậy, nếu tôi làm điều này với tư cách quản trị viên và sao chép các tệp từ một vị trí người dùng cũ sang vị trí người dùng mới, liệu nó có đặt tge SUD của mỗi tệp để tạo ra người dùng mới không?.
trusktr

@trusktr: phụ thuộc vào ý của bạn; quyền sở hữu các tệp được gán cho người dùng quản trị viên đang thực hiện sao chép, nhưng các quyền được kế thừa từ thư mục mẹ. Thông thường, chỉ có vấn đề quyền.
Harry Johnston

Về cơ bản, điều tôi muốn làm là sao chép tất cả các tệp từ một vị trí tên người dùng Windows C: \ Users \ sang một vị trí tên người dùng Windows C: \ Users \ mới để tất cả các tệp đó thuộc về người dùng mới (chỉ cần di chuyển sang Windows mới cài đặt cơ bản và muốn giữ các tệp người dùng trước đó của tôi). Đó là cùng một tên người dùng trong cả cũ và mới. Một bản sao đơn giản của các tập tin từ nơi này sang nơi khác như quản trị viên sẽ thực hiện thủ thuật? Tôi tò mò muốn biết liệu SID của các tệp sẽ thay đổi thành SID của người dùng mới hay không vì tôi đang sử dụng NTFS-3G để ánh xạ tệp SID tới người dùng Linux của tôi.
trusktr

@trusktr: quyền sở hữu sẽ không phải là vấn đề trong trường hợp đó, nhưng hồ sơ người dùng chứa nội dung (đáng chú ý nhất là tổ hợp đăng ký của người dùng) không thể được di chuyển theo cách đó. Robocopy sẽ ổn khi có quyền, nhưng tôi khuyên bạn nên sao chép từng thư mục riêng lẻ (ví dụ: Tài liệu, Máy tính để bàn, v.v.) chứ không phải toàn bộ thư mục <username>. Để lại các thư mục ẩn như AppData - đảm bảo bạn giữ một bản sao, nhưng không sao chép chúng trên đầu tài khoản mới.
Harry Johnston

Lý tưởng nhất là tôi muốn giữ thư mục <tên người dùng> của mình trên một phân vùng riêng (phân vùng Windows cũ) và đặt thư mục <tên người dùng đó thành thư mục chính cho người dùng <tên người dùng> của Windows mới của tôi.
trusktr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.