Windows'u yeni yükledikten sonra eski kullanıcının SID'sini yeni kullanıcıya NTFS dosya sahipliği ve izinleri olarak nasıl bağlayabilirim?


18

Biz Windows yeniden her zaman, hatta kullanıcı adı gibidir kullanıcı için yeni bir SID yaratacak aynı eskisi gibi.

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

Yeniden yüklemeden sonra can sıkıcı sorun NTFS dosya sahipliği ve sabit diskteki izinler hala eski kullanıcının SID'si ile ilişkilidir.

NTFS dosyalarının sahiplik ve izin ayarını korumak, daha sonra yeni kullanıcının eski kullanıcının SID'sini almasına izin vermek istiyorum, böylece izin sorunu olmadan dosyalara daha önce olduğu gibi erişebiliyorum.

caclsYeni kullanıcıya ait dosya yapar çünkü başarısız oldu böylece komut satırı aracı, böyle bir durumda kullanılamaz reddedildi Erişim hatası. ve mülkiyeti değiştiremez.

Ben aracılığıyla owership değiştirebilir bile SubInACLaracı, caclseski kullanıcı yeni yüklemesinde var olmadığından eski kullanıcının iznini kaldıramaz ve olamaz kopyalamak yeni kullanıcıya eski kullanıcıdan izin.

Peki, eski kullanıcının SID'sini yeni yüklenen Windows'ta yeni kullanıcıya bağlayabilir miyiz?

Örnek test partisi

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

Neden sadece dosyanın sahipliğini almaya karşısınız?
Ramhound

Yalnızca sahiplik alınırsa, izin hala eski kullanıcının SID'sine ayarlandığından bazı dosya eşiklerine erişilemez.
LiuYan 刘 研

@LiuYan 刘 研 Ancak sahipliği aldıktan sonra tüm izinleri düzenleyebilmeniz gerekir.
Iszi

1
@IsziRoryorIsznti, az dosya varsa ve tüm izinler ebeveynlerden devralınırsa doğrudur. ancak çok sayıda dosya olduğunda ve hemen hemen her dosyanın bireysel izin ayarı (Cygwin altındaki dosyalar gibi) olduğunda, bunları aynı izinle değiştiremem.
LiuYan 刘 研

Yanıtlar:


11

Artık SID'leri yenisiyle değiştirmek için setacl kullanabilirsiniz . Örneğin, eski SID'nizi yenisiyle değiştirmek için aşağıdakileri kullanın:

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

Güzel bir araç! İstediğim bu (kullanıcı SID'sini değiştirmemesine rağmen)! Şimdi olmazsa olmazlar listemde! Ancak, beklenmedik bir davranış var: Bunu test grubumdan sonra (dizin ve dosyayı silmeden) denediğimde, dizin izinleri üst öğesinden devralır, bu istenmeyen bir şeydir. Not: Dizinin ACL'si caclskomutla değiştirilir , ancak devralma bayrağı değiştirilmez.
LiuYan 刘 研

SetACL belgelerine göre bunun C: \\ olması gerektiğini düşünüyorum.
cdmckay

@cdmckay: emin değilim. Diyor ki: "Nesne adı ters eğik çizgi ile bitiyorsa ve tırnak işaretleri içine alırsanız, son ters eğik çizgiden başka bir ters eğik çizgi ile kaçtığınızdan emin olun". Ama tırnak işaretleri içine almıyorum.
Daniel Gehriger

1
2016-01-08 itibariyle , mütevelli davası için ne belirtileceği belirtilir veya sahip belirlenmez. Hat olması gerekmektedir . O zaman bile, cygwin'in grup için seçtiği her şeyi doğru şekilde ayarlamaz (hareketsiz görüntüler "bilinmeyen" olarak görüntülenir ). -actn trustee-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"/bin/ls -l
Makyen

1
@Makyen: Cygwin ile aynı sorunu yaşadım ve sorunu düzelttim -rec cont_objçünkü dosyalar üzerinde de değişiklikler yapıyor.
Denis Bakharev

3
  1. Bilgisayarın SID'sini değiştirmenin veya yerel bir hesabın SID'sini bilgisayarın hesabıyla eşleşmeyecek şekilde değiştirmenin desteklenen bir yolu yoktur.

  2. Sorunuzdaki sözcükler, işletim sistemini sık sık yeniden yüklediğiniz anlamına gelir; Yeniden yükleme gerektiren tekrarlanan sorunlar yaşıyorsanız, her seferinde yeniden yüklemek yerine bunlara neyin neden olduğunu bulmaya değer olabilir.

  3. Bazı gruplar iyi bilinen SID'ler kullanır; bu, bilgisayar yeniden yüklendiğinde değişmeyecekleri anlamına gelir. Böylece, bu grupları kullanmaları için önceden izinleri seçerek sorununuzu basitleştirebilirsiniz. Yararlı olabilecek bu gruplardan bazıları arasında Yöneticiler, Uzman Kullanıcılar, Kullanıcılar, Kimliği Doğrulanmış Kullanıcılar ve İNTERAKTİF bulunur.

  4. Tüm klasör ağacı için izinleri sıfırlamanın yavaş ama kolay bir yolu, kopyalamaktır:

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

    Bu, yükseltilmiş bir komut isteminden çalıştırılmalıdır. / B seçeneğini kullanmak, robocopy'nin dosyalardaki güvenliği atlamak için geri yükleme ayrıcalığını kullanmasını sağlar. yaratmakc:\new-copyBaşlamadan önce ve izinleri istediğiniz gibi ayarlayın.

    Orijinal klasörü kopyaladıktan sonra silmek için bu komutu kullanabilirsiniz:

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

Bunu yönetici olarak yaparsam ve dosyaları eski bir kullanıcı konumundan yeni kullanıcı konumuna kopyalarsam, her kullanıcının tge SUD'sini yeni kullanıcıyı tge olarak ayarlar mı?
trusktr

@trusktr: ne demek istediğinize bağlı; dosyaların sahipliği kopyayı yapan yönetici kullanıcıya atanır, ancak izinler üst klasörden devralınır. Genellikle, yalnızca izinler önemlidir.
Harry Johnston

Temel olarak yapmak istediğim, eski bir Windows C: \ Users \ kullanıcı adı konumundan tüm dosyaları yeni bir Windows C: \ Users \ kullanıcı adı konumuna kopyalamak, böylece bu dosyaların hepsi yeni kullanıcıya ait (sadece yeni bir Windows'a geçiş) temelde yükleyin ve önceki kullanıcının dosyalarımı tutmak istiyorum). Hem eski hem de yeni kullanıcılarla aynı kullanıcı adı. Yönetici olarak dosyaların bir yerden diğerine basit bir kopyası hile yapar mı? Dosyaların SID'lerinin yeni kullanıcının SID'sine değişip değişmeyeceğini merak ediyorum çünkü dosya SID'lerini Linux kullanıcıma eşlemek için NTFS-3G kullanıyorum.
trusktr

@trusktr: sahiplik bu durumda bir sorun oluşturmaz, ancak kullanıcı profilinde bu şekilde taşınamayan şeyler (özellikle kullanıcının kayıt defteri kovanı) bulunur. Robocopy izinler kadar iyi olacaktır, ancak <username> klasörünün tamamı yerine her bir klasörü (ör. Dokümanlar, Masaüstü vb.) Kopyalamanızı öneririz. AppData gibi gizli klasörleri dışarıda bırakın - bir kopyasını sakladığınızdan emin olun, ancak bunları yeni hesabın üzerine kopyalamayın.
Harry Johnston

İdeal olarak <username> klasörümü ayrı bir bölümde (eski Windows bölümü) tutmak ve yeni <username> kullanıcısı için <username> klasörünü ana klasör yapmak istiyorum.
trusktr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.