Perché le autorizzazioni sui file vengono mantenute quando si spostano i file all'interno dello stesso volume?


9

Occasionalmente, abbiamo il problema che un file ha autorizzazioni diverse dalla cartella in cui si trova.

Ora ho scoperto che c'è un articolo KB che spiega il motivo dietro questo:

Per impostazione predefinita, un oggetto eredita le autorizzazioni dall'oggetto padre, al momento della creazione o quando viene copiato o spostato nella sua cartella padre. L'unica eccezione a questa regola si verifica quando si sposta un oggetto in una cartella diversa sullo stesso volume. In questo caso, le autorizzazioni originali vengono mantenute.

Quindi l'utente ha spostato il file da una cartella all'altra e le autorizzazioni dalla cartella originale sono state mantenute.

La mia domanda ora è: perché esiste questa eccezione? Qual è il ragionamento alla base di questo?

Risposte:


8

L'ho spiegato in un post sul blog http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/ ma è anche spiegato di seguito.

Quando un file viene copiato, deve creare un file nuovo di zecca e assegnargli un nuovo set di autorizzazioni, in modo che ottenga le autorizzazioni dalla cartella principale come sai.

Quando un file viene spostato su un altro volume, ciò che accade effettivamente è che viene copiato nel nuovo volume e il vecchio file viene eliminato. Quindi lo stesso processo viene ripetuto come sopra in quanto è di nuovo un nuovo file e necessita di autorizzazioni impostate.

Quando il file viene spostato all'interno dello stesso volume, non accade nulla (a livello di disco). Cambia solo la posizione del percorso logico del file. I dati effettivi e il file fisico sul disco non sono stati toccati o modificati. Hai mai notato quando sposti un file da 5 GB in un'altra cartella sulla stessa unità, è quasi istantaneo? Questo è il motivo, perché in realtà non si è spostato ma il puntatore al punto in cui esiste il file logicamente è cambiato. Poiché non è stato modificato in alcun modo, anche le autorizzazioni non cambiano.

Questa è la ragione di questo comportamento.

Modifica: qualcosa che ho dimenticato di menzionare ... L'articolo sulla SM non è del tutto esatto. Citazione MS:

Per impostazione predefinita, un oggetto eredita le autorizzazioni dall'oggetto padre, al momento della creazione o quando viene copiato o spostato nella sua cartella padre. L'unica eccezione a questa regola si verifica quando si sposta un oggetto in una cartella diversa sullo stesso volume. In questo caso, le autorizzazioni originali vengono mantenute.

La citazione sopra si applica solo agli oggetti a cui sono state assegnate autorizzazioni sec ESPLICITAMENTE definite (disattiva l'ereditarietà). Come menzionato nei miei commenti, si tratta di mantenere le voci ACL il più efficienti possibile. Considera il seguente esempio:

Per semplificare la spiegazione, supponiamo che tu abbia una cartella impostata per consentire agli utenti di modificare solo i diritti. Al di sotto di questo, ci sono migliaia di file e nessuno di essi ha le autorizzazioni esplicite impostate. Non è molto efficiente creare ACL per ogni file in quanto sono esattamente gli stessi permanenti, quindi imposta UNA voce ACL per la cartella. Il prossimo bit è molto IMPORTANTE da capire; i file stessi non hanno ACL PERMS. Quindi quando sposti uno di questi file in una nuova cartella nello stesso volume, MS afferma che i permanenti si spostano con esso (come sopra la citazione). Chiediti questo .... come? In primo luogo non c'erano permessi sul file da spostare. Questo in realtà non è corretto e l'ho appena testato ora per confermarlo. Supponiamo che la cartella di destinazione in cui si sta spostando il file abbia permanenti per consentire solo al gruppo di tutti i diritti di modifica. Bene poiché il file non ha ACL direttamente, eredita l'ACL della cartella padre. Questo significa che i permessi sono cambiati da modifica utente (vecchia cartella) a modifica di tutti (nuova cartella).

Notare la differenza ?? Questa volta, spostare un file in un'altra cartella nello stesso volume ha effettivamente cambiato i permessi, qualcosa che MS dice che non lo fa. Ho appena trovato un errore nella documentazione MS dal 2000 lol ??

Ora guarda lo stesso scenario quando usi le autorizzazioni esplicite. Se si impostano autorizzazioni esplicite su un file all'interno di questa cartella (ereditarietà disattivata) che, ad esempio, nega agli utenti l'accesso in lettura, ora crea una NUOVA voce ACL specifica per questo file. Ora quando si sposta il file in una nuova posizione, ha una voce ACL direttamente correlata ad esso. In questo caso, spostare un file in una nuova posizione nello stesso volume RIPRENDE le autorizzazioni (come afferma MS)!


+1 Entrambe sono buone risposte, ma la tua è più al punto. Mi piace il tuo commento su come si sposta istantaneamente il file da 5 GB. Buona visuale.
KCotreau,

Tendo a pensare che "non sta accadendo alcuna copia" è il motivo principale per cui ACL non viene toccato.
VVS,

1
Non vi è alcun motivo tecnico per cui una modifica alla tabella del filesystem non dovrebbe influire sulla voce ACL corrispondente. Penso che questa spiegazione sia corretta. Ma penso anche che descriva l'effetto, non la causa reale. La causa è il modello di sicurezza di ACL, basato su volume. Le operazioni di spostamento / copia tra diversi volumi sono intese come trasferimento di privilegi e modifiche all'interno dello stesso volume come agnostiche di privilegio. Di default, naturalmente.
Un nano,

1
E logicamente, le autorizzazioni per un file sono impostate al momento della creazione. Si noti quando si modificano le autorizzazioni su una cartella che è necessario propagare le autorizzazioni a tutti gli oggetti figlio. Ecco perché a volte Windows apre una finestra di dialogo in quanto cambia tutti gli oggetti figlio se ce ne sono molti.
surfasb,

1
@Mucker: mi dispiace, ma la tua spiegazione è semplicemente sbagliata. Windows archivia sempre gli ACL con i file, anche se ereditati. E dal punto di vista del file system, si spostano sempre con il file se il file viene spostato all'interno dello stesso volume. A seconda di alcune impostazioni di sistema, Esplora risorse salterà e regolerà le autorizzazioni dopo lo spostamento. Ma questo è Explorer e non ha nulla a che fare con il file system. E peggio: dipende dalla versione di Windows e (come ho già detto) alcune impostazioni di sistema. Vedi blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Paul Groke

6

Quando si spostano file all'interno dello stesso volume, si sta tradizionalmente riorganizzando il file system . La modifica delle autorizzazioni dei file a livello della directory potrebbe bloccarti fuori da quel file al termine dell'operazione di spostamento. Ciò è indesiderabile se, ad esempio, hai appena spostato accidentalmente un file in un sistema o in una cartella con autorizzazioni di proprietà speciali o altrimenti protetto. Non ci sarebbe modo di correggere l'errore se non quello di assumere la proprietà del file (se si dispone dei privilegi) o accedere con un account privilegiato. Considerando il normale funzionamento quotidiano di un computer, potresti scoprire di non avere alcun controllo sul tuo filesystem.

Questo comportamento è comune nella maggior parte dei sistemi operativi (se non in tutti) che utilizzano ACL. Garantisce le normali operazioni del filesystem all'interno di un volume da parte di utenti e applicazioni.

Al contrario, quando si spostano file tra volumi, tradizionalmente si dà via un file per il controllo da parte di qualcun altro. Ha senso, come ben sapete, che il file incorpori quindi le autorizzazioni della cartella di destinazione, che fornirà alla destinazione le autorizzazioni necessarie per riorganizzare il proprio filesystem come ritengono opportuno.

Naturalmente questo non è sempre desiderabile. Per questo motivo è possibile definire le operazioni di spostamento e copia con regole di ereditarietà delle autorizzazioni speciali. Dallo stesso articolo:

  • Per conservare le autorizzazioni quando i file e le cartelle vengono copiati o spostati, utilizzare l'utilità Xcopy.exe con l'opzione / O o / X. Le autorizzazioni originali dell'oggetto verranno aggiunte alle autorizzazioni ereditabili nella nuova posizione.

  • Per aggiungere le autorizzazioni originali di un oggetto alle autorizzazioni ereditabili quando si copia o si sposta un oggetto, utilizzare l'utilità Xcopy.exe con le opzioni –O e –X.


"Questo è indesiderabile se, ad esempio, hai appena spostato un file in un sistema o in una cartella con autorizzazioni di proprietà speciali o altrimenti protetto." - Quindi si sposta un file, ad esempio in una cartella con autorizzazioni di sola scrittura e si è ancora in grado di spostare il file indietro .. perché non è desiderabile su volumi diversi?
VVS,

1
@VVS perché ACL è un modello di sicurezza basato su filesystem. Ogni volume contiene il proprio filesystem e, di conseguenza, le proprie tabelle ACL. Dal punto di vista della sicurezza ACL, un volume diverso equivale a un "utente" diverso. Spostando un file su un altro volume, si trasferisce il controllo a tale "utente". Ma ti viene comunque data la possibilità di non farlo se davvero lo desideri. È solo che il comportamento predefinito risolve i problemi di sicurezza ACL.
Un nano,

1

OK Questo è il vero basso. Innanzitutto, stiamo parlando di un singolo PC o un server? Presumo che stiamo parlando di un server. Quindi .... come amministratore Wintel della società A crei un filesystem su un'unità di rete sul tuo nuovo server. Lo basi su dipartimenti, cioè ogni dipartimento ha una cartella e ogni cartella ha il suo ACL unico a causa di problemi di riservatezza, come probabilmente è la norma - sì? Pertanto, se hai intenzione di spostare un file nella cartella di un altro reparto, perché mai NON vorresti che ereditasse i permessi della sua nuova cartella? Quello che voglio dire è ... perché avere un filesystem basato sui permessi se non lo userete? Posso darti un esempio di vita reale in cui è importante che i file / le cartelle spostati ereditino sempre l'ACL della cartella principale, basta chiedermelo.

Spostare i file all'interno di un volume o spostarli da vol X a vol Y ... qual è la differenza essenziale? Stai spostando la posizione di alcuni file - su volumi diversi o non fai poca differenza in un ambiente aziendale, per quanto posso vedere. Il vero motivo per cui uno include l'ereditarietà di default e l'altro non è già stato menzionato da Mucker: questa è "efficienza". Trascinare e rilasciare i file all'interno di un volume cambia semplicemente la voce dell'Indice: i file non vengono spostati e le loro informazioni ACL vengono lasciate sole. Effettua un'operazione semplice. Quando i file vengono spostati su più volumi, tuttavia, i file e i loro ACL devono essere ridefiniti, quindi farlo correttamente e includere l'eredità ha un buon senso in quanto non comporta un sovraccarico evitabile.

Non riesco a capire perché Microsoft non risolva questo problema. Sarebbe troppo difficile includere una finestra di dialogo come parte del trascinamento della selezione di Explorer? Qualcosa del tipo "Hai spostato i file in una posizione con diritti di accesso diversi, desideri ereditare le autorizzazioni della nuova cartella principale? Y o N?"

Saluti, Stonegiant

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.