Come associare il SID del vecchio utente al nuovo utente affinché rimanga la proprietà e le autorizzazioni dei file NTFS dopo la nuova reinstallazione di Windows?


18

Ogni volta che abbiamo reinstallato Windows, verrà creato un nuovo SID per l'utente, anche se il nome utente è lo stesso di prima.

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

Il fastidioso problema dopo la reinstallazione è la gestione dei file NTFS e le autorizzazioni sul disco rigido sono ancora associate al SID del vecchio utente.

Voglio mantenere l'impostazione di proprietà e autorizzazione dei file NTFS, quindi voglio consentire al nuovo utente di prendere il SID del vecchio utente, in modo da poter accedere ai file come prima senza problemi di autorizzazione.

Lo caclsstrumento da riga di comando non può essere utilizzato in tale situazione, perché il file appartiene a un nuovo utente, quindi fallirà con Accesso negato errore. e non può cambiare la proprietà.

Anche se posso modificare la Owerhip tramite lo SubInACLstrumento, caclsnon riesco a rimuovere l'autorizzazione del vecchio utente perché il vecchio utente non esiste nella nuova installazione e non posso copiare l' autorizzazione del vecchio utente nel nuovo utente.

Quindi, possiamo semplicemente associare il SID del vecchio utente al nuovo utente su Windows appena installato?

Lotto di prova del campione

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

Perché sei contrario a prendere la proprietà del file?
Ramhound,

Se viene acquisita solo la proprietà, alcuni file non sono accessibili perché l'autorizzazione è ancora impostata sul SID del vecchio utente.
LiuYan 刘 研

@LiuYan 刘 研 Ma dopo aver acquisito la proprietà, dovresti essere in grado di modificare tutte le autorizzazioni.
Iszi,

1
@IsziRoryorIsznti, vero se ci sono pochi file e tutte le autorizzazioni sono ereditate dai genitori. ma quando ci sono molti file e quasi ogni file ha un'impostazione di autorizzazione individuale (come i file in Cygwin), non posso semplicemente sostituirli con la stessa autorizzazione.
LiuYan 刘 研

Risposte:


11

È possibile utilizzare setacl per sostituire i SID orfani con uno nuovo. Ad esempio, utilizzare quanto segue per sostituire il vecchio SID con quello nuovo:

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

Strumento carino! Questo è quello che volevo (anche se non ha cambiato il SID dell'utente)! È nella mia lista dei must-have ora! Tuttavia, c'è un comportamento inaspettato: quando l'ho provato dopo il mio batch di test (senza eliminare la directory e il file), la directory erediterà le autorizzazioni dal suo genitore, è qualcosa di indesiderato. Nota: l'ACL della directory viene modificato tramite caclscomando, ma il flag di ereditarietà non viene modificato.
LiuYan

Penso che debba essere C: \\ secondo i documenti SetACL.
cdmckay,

@cdmckay: non sono sicuro. Dice: "Se il nome dell'oggetto termina con una barra rovesciata e lo racchiudi tra virgolette, assicurati di evitare l'ultima barra rovesciata con un'altra barra rovesciata". Ma non lo racchiudo tra virgolette.
Daniel Gehriger,

1
A partire da 08/01/2016, è necessario specificare cosa per l' azione fiduciaria o il proprietario non è impostato. La -actn trusteelinea deve essere -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g". Anche in questo caso, non imposta correttamente tutto ciò che Cygwin raccoglie per il gruppo (le immagini fisse vengono visualizzate come "sconosciute" in /bin/ls -l).
Makyen,

1
@Makyen: ho avuto lo stesso problema con cygwin e l'ho risolto -rec cont_objperché applica anche le modifiche ai file.
Denis Bakharev,

3
  1. Non esiste un modo supportato per modificare il SID del computer o modificare il SID di un account locale in modo che non corrisponda a quello del computer.

  2. La formulazione della tua domanda implica che stai reinstallando frequentemente il sistema operativo, cosa che non dovresti fare. Se si verificano problemi ripetuti che richiedono una reinstallazione, potrebbe valere la pena di capire cosa li sta causando piuttosto che reinstallarli ogni volta.

  3. Alcuni gruppi utilizzano SID noti, il che significa che non cambiano quando si reinstalla il computer. Quindi puoi semplificare il tuo problema scegliendo le autorizzazioni in anticipo in modo che utilizzino questi gruppi. Alcuni di questi gruppi che potrebbero essere utili includono amministratori, utenti esperti, utenti, utenti autenticati e INTERACTIVE.

  4. Un modo lento ma semplice per ripristinare le autorizzazioni per un intero albero delle cartelle è copiarlo:

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

    Questo deve essere eseguito da un prompt dei comandi con privilegi elevati. L'uso dell'opzione / b consente a robocopy di utilizzare il privilegio di ripristino per ignorare la sicurezza dei file. Crea c:\new-copyprima di iniziare e imposta le autorizzazioni come desiderato.

    È possibile utilizzare questo comando per eliminare la cartella originale dopo averla copiata:

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

Quindi, se lo faccio come amministratore e copio i file da una vecchia posizione dell'utente nella nuova posizione dell'utente, imposta SUD di ciascun file per legare il nuovo utente ?.
trusktr,

@trusktr: dipende da cosa intendi; la proprietà dei file viene assegnata all'utente amministratore che sta eseguendo la copia, ma le autorizzazioni vengono ereditate dalla cartella principale. In genere, sono importanti solo le autorizzazioni.
Harry Johnston,

Bene, fondamentalmente, ciò che voglio fare è copiare tutti i file da una vecchia posizione di Windows C: \ Users \ nome utente in una nuova posizione di Windows C: \ Users \ nome utente in modo che tutti quei file appartengano al nuovo utente (solo migrando verso una nuova Windows installare fondamentalmente e volendo conservare i file del mio utente precedente). È lo stesso nome utente sia nel vecchio che nel nuovo. Una semplice copia dei file da un posto all'altro come amministratore farà il trucco? Sono curioso di sapere se i SID dei file cambieranno nel SID del nuovo utente perché sto usando NTFS-3G per mappare i SID dei file al mio utente Linux.
trusktr,

@trusktr: la proprietà non sarà un problema in quel caso, ma il profilo utente contiene elementi (in particolare l'hive del registro dell'utente) che non possono essere migrati in quel modo. Robocopy andrà bene per quanto riguarda le autorizzazioni, ma raccomando di copiare ogni singola cartella (ad esempio, Documenti, Desktop, ecc.) Anziché l'intera cartella <nomeutente>. Tralascia le cartelle nascoste come AppData: assicurati di conservarne una copia, ma non copiarle sopra il nuovo account.
Harry Johnston,

Idealmente, vorrei solo mantenere la mia cartella <nomeutente> su una partizione separata (la vecchia partizione di Windows) e rendere quella cartella <nomeutente> la cartella principale per il mio utente <nomeutente> della mia nuova Windows.
trusktr,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.