Bagaimana cara mengikat SID pengguna lama ke pengguna baru agar tetap memiliki kepemilikan dan izin file NTFS setelah baru menginstal ulang Windows?

18

Setiap kali kami menginstal ulang Windows, itu akan membuat SID baru untuk pengguna, bahkan nama pengguna sama seperti sebelumnya.

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

Masalah yang mengganggu setelah menginstal ulang adalah NTFS file owership dan izin pada hard drive disk masih terkait dengan SID pengguna lama.

Saya ingin mempertahankan pengaturan kepemilikan dan izin file NTFS, kemudian ingin membiarkan pengguna baru mengambil SID pengguna lama, sehingga saya dapat mengakses file seperti sebelumnya tanpa masalah izin.

The caclstool baris perintah tidak dapat digunakan dalam situasi seperti itu, karena file tidak milik pengguna baru, sehingga akan gagal dengan Akses ditolak kesalahan. dan itu tidak dapat mengubah kepemilikan.

Bahkan jika saya dapat mengubah kepemilikan melalui SubInACLalat, caclstidak dapat menghapus izin pengguna lama karena pengguna lama tidak ada pada instalasi baru, dan tidak dapat menyalin izin pengguna lama ke pengguna baru.

Jadi, bisakah kita hanya mengikat SID pengguna lama ke pengguna baru di Windows yang baru diinstal?

Batch uji sampel

@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 !
LiuYan 刘 研
sumber
Mengapa Anda menentang hanya mengambil kepemilikan file?
Ramhound
Jika hanya kepemilikan yang diambil, beberapa file masih tidak dapat diakses karena izin masih diatur ke SID pengguna lama.
LiuYan 刘 研
@LiuYan 刘 研 Tetapi setelah Anda mengambil kepemilikan, Anda harus dapat mengedit semua izin.
Iszi
1
@IsziRoryorIsznti, benar jika ada beberapa file dan semua izin diwarisi dari orang tua. tetapi ketika ada banyak file, dan hampir setiap file memiliki pengaturan izin individu (seperti file di bawah Cygwin), maka saya tidak bisa begitu saja menggantinya dengan izin yang sama.
LiuYan 刘 研

Jawaban:

11

Anda dapat menggunakan setacl untuk mengganti SID yatim dengan yang baru. Misalnya, gunakan yang berikut ini untuk mengganti SID lama Anda dengan yang baru:

setacl.exe -on C:\ 
           -ot file 
           -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst" 
           -rec cont
Daniel Gehriger
sumber
Alat yang bagus! Itulah yang saya inginkan (walaupun itu tidak mengubah SID pengguna)! Ada dalam daftar must-have saya sekarang! Namun, ada perilaku yang tidak terduga: ketika saya mencoba ini setelah batch pengujian saya (tanpa menghapus direktori dan file), direktori akan mewarisi izin dari orang tua itu, itu sesuatu yang tidak diinginkan. Catatan: ACL direktori diubah melalui caclsperintah, tetapi flag warisannya tidak berubah.
LiuYan 刘 研
Saya pikir itu harus C: \\ menurut dokumen SetACL.
cdmckay
@cdmckay: tidak yakin. Bunyinya: "Jika nama objek diakhiri dengan garis miring terbalik dan Anda melampirkannya dalam tanda kutip, pastikan untuk menghindari garis miring terbalik terakhir dengan garis miring terbalik yang lain". Tapi saya tidak menyertakannya dalam tanda kutip.
Daniel Gehriger
1
Pada 2016-01-08, perlu untuk menentukan apa untuk tindakan wali amanat atau pemilik tidak diatur. The -actn trusteegaris perlu -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g". Bahkan kemudian, itu tidak mengatur dengan benar apa pun yang diambil cygwin untuk grup (masih ditampilkan sebagai "tidak dikenal" di /bin/ls -l).
Makyen
1
@Makyen: Saya punya masalah yang sama dengan cygwin dan memperbaikinya -rec cont_objkarena itu juga menerapkan perubahan pada file.
Denis Bakharev
3
  1. Tidak ada cara yang didukung untuk mengubah SID komputer atau untuk mengubah SID dari akun lokal sehingga tidak cocok dengan komputer.

  2. Kata-kata dari pertanyaan Anda menyiratkan bahwa Anda sering menginstal ulang sistem operasi, yang seharusnya tidak perlu Anda lakukan. Jika Anda mengalami masalah berulang yang membutuhkan instalasi ulang, mungkin ada baiknya mencari tahu apa yang menyebabkannya daripada hanya menginstal ulang setiap kali.

  3. Grup tertentu menggunakan SID terkenal yang artinya mereka tidak berubah ketika komputer diinstal ulang. Jadi, Anda dapat membuat masalah Anda lebih sederhana dengan memilih izin sebelumnya sehingga mereka menggunakan grup ini. Beberapa dari kelompok-kelompok ini yang mungkin berguna termasuk Administrator, Pengguna Power, Pengguna, Pengguna Otentikasi dan INTERACTIVE.

  4. Salah satu cara lambat tapi mudah mengatur ulang izin untuk seluruh pohon folder adalah dengan menyalinnya:

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

    Ini harus dijalankan dari prompt perintah yang ditinggikan. Menggunakan opsi / b membuat robocopy menggunakan restore privilege untuk memintas keamanan pada file. Buat c:\new-copysebelum Anda mulai dan mengatur izin seperti yang diinginkan.

    Anda dapat menggunakan perintah ini untuk menghapus folder asli setelah Anda menyalinnya:

    robocopy /e /b c:\empty-folder c:\original-folder
    
Harry Johnston
sumber
Jadi jika saya melakukan ini sebagai admin dan menyalin file dari lokasi pengguna lama ke lokasi pengguna baru apakah itu mengatur SUD setiap file untuk menambah pengguna baru ?.
trusktr
@ trusktr: tergantung apa yang Anda maksud; kepemilikan file diberikan kepada pengguna admin yang melakukan penyalinan, tetapi izin diwarisi dari folder induk. Biasanya, hanya masalah perizinan.
Harry Johnston
Yah pada dasarnya yang ingin saya lakukan adalah menyalin semua file dari Windows C lama: lokasi \ Users \ username ke Windows C baru: \ Users \ username lokasi sehingga file-file itu semua milik pengguna baru (hanya bermigrasi ke Windows baru instal pada dasarnya, dan ingin menyimpan file pengguna saya sebelumnya). Itu nama pengguna yang sama baik yang lama maupun yang baru. Apakah salinan sederhana dari file dari satu tempat ke tempat lain sebagai admin melakukan trik? Saya ingin tahu apakah SID file akan berubah menjadi SID pengguna baru karena saya menggunakan NTFS-3G untuk memetakan file SID ke pengguna Linux saya.
trusktr
@trusktr: kepemilikan tidak akan menjadi masalah dalam kasus itu, tetapi profil pengguna berisi hal-hal (terutama kumpulan registri pengguna) yang tidak dapat dimigrasi dengan cara itu. Robocopy akan baik-baik saja sejauh izin berjalan, tetapi saya sarankan menyalin setiap folder individu (mis., Dokumen, Desktop, dll.) Daripada seluruh folder <username>. Tinggalkan folder tersembunyi seperti AppData - pastikan Anda menyimpan salinan, tetapi jangan menyalinnya di atas akun baru.
Harry Johnston
Idealnya saya hanya ingin menyimpan folder <username> saya di partisi yang terpisah (partisi Windows lama) dan menjadikan <username> folder folder rumah untuk pengguna saya <username> dari Windows baru saya.
trusktr