2009-05-08 10 views
6

La nostra app utilizza un componente che richiede un file di licenza nella directory con il nostro eseguibile, che risulta essere un'app .NET WinForms anche se penso che non sia rilevante per questa domanda. Quando viene installato su alcune macchine XP Pro (solo tre su diverse centinaia finora), il componente genera un'eccezione di licenza. Così ho rigenerato il file di licenza e l'ho inviato al fornitore del componente (EMC Captiva), dove il venditore afferma che l'errore è dovuto al fatto che il gruppo "Utenti" non ha permessi di lettura sul file. L'utente che incontra l'errore sembra essere un amministratore locale, ma questo è oltre il punto in quanto sono ancora curioso della domanda più generale.Dove Windows archivia gli ACL e gli ACL seguono un file da una macchina all'altra?

Quindi la mia domanda è, sono ACL memorizzati in un file tale che seguono il file per tutta la sua vita, specialmente quando il file di licenza è stato generato sulla mia macchina di sviluppo (macchina 1), memorizzato in Subversion (macchina 2), controllato fuori dal controllo sorgente di TeamCity (macchina 3), inserito in un programma di installazione da InstallShield (macchina 4) e infine distribuito alla macchina del cliente (macchina 5) in cui è stato installato da un amministratore? Che dire dopo aver generato il file sulla mia macchina di sviluppo (macchina 1), caricarlo sul fornitore del componente tramite il loro sito di supporto (macchina 2) e la persona di supporto lo scarica sulla macchina per ispezione (macchina 3)?

Non lo so per certo (motivo per cui lo sto chiedendo qui), ma supponevo che ogni macchina Windows memorizzasse gli ACL in qualche directory/elenco/tabella centrale gestita da NTFS piuttosto che memorizzata all'interno del file. Cosa succede all'ACL del file originale quando viene copiato da una macchina all'altra, memorizzato in Subversion, inserito in un MSI, ecc.? Qualcuno può indicarmi delle buone referenze dove posso leggere su questo?

+0

Cosa stai cercando di fare? A cosa servono gli ACL di imballaggio in un pacchetto MSI? Non puoi controllare ciò che le persone fanno su un file una volta lasciato il tuo computer, se questo è quello che hai in mente. – Tomalak

+1

Come ho detto: L'ACL non * fa parte del file *. TortoiseSvn non può nemmeno vedere l'ACL. – Tomalak

+0

Questo è ciò che il fornitore di componenti sembra suggerire, ma io non lo compro. – flipdoubt

risposta

13

Gli ACL sono archiviati nella parte di una partizione NTFS che esegue tutto l'impianto idraulico in background: la MFT (Tabella file master).

L'ACL non segue un file in giro, poiché non fa parte del file (proprio come il nome del file è metadata). Il file può attraversare i limiti del tipo di partizione (NTFS-> FAT), l'ACL non può.

Ora se si spostare un file all'interno di una partizione NTFS, si potrebbe avere l'impressione che ACL effettivamente seguano il file in giro. Questo perché durante una mossa, solo il nome del file nella MFT è effettivamente cambiato. Tutto il resto rimane lo stesso.

Se si copia un file o lo si sposta in un'altra partizione o computer (che in realtà è un'operazione di copia + cancella), il file copiato erediterà per impostazione predefinita le autorizzazioni del nuovo contenitore (solo quelle ereditabili, per la precisione).

Tuttavia, esistono strumenti in grado di conservare l'ACL di un file dopo un'operazione di copia (semplicemente ricrattandolo sul file di destinazione dopo l'operazione di copia) anche oltre i limiti della partizione o del computer. xcopy può farlo, tra gli altri.

Tuttavia, poiché un ACL può contenere SID "di proprietà del dominio", una voce ACL potrebbe non essere significativa per il computer di destinazione che non fa parte dello stesso dominio (ad esempio quando si porta a casa un'unità USB formattata NTFS). In tal caso la voce ACL non avrà alcun effetto.

Altri SID sono "ben noti", come il SID "SISTEMA". Questi saranno effettivamente riconosciuti attraverso i confini di dominio.

+0

+1 Hai detto esattamente cosa stavo per dire .. :) – RobS

+0

Quindi sei d'accordo sul fatto che il fornitore di componenti che mi fornisce supporto probabilmente non sta vedendo lo stesso ACL che l'utente vede sul suo computer di destinazione, giusto? Inoltre, puoi suggerire alcune risorse online dove posso leggere di più su ciò che hai detto? – flipdoubt

+1

Una panoramica: http://www.pcguide.com/ref/hdd/file/ntfs/secAccess-c.html – RobS