2009-05-08 8 views
6

Unsere App verwendet eine Komponente, die eine Lizenzdatei in dem Verzeichnis mit unserer ausführbaren Datei benötigt, die zufällig eine .NET WinForms App ist, obwohl ich denke, dass es für diese Frage unerheblich ist. Bei der Installation auf einigen XP Pro-Rechnern (nur drei von einigen hundert bis jetzt) ​​löst die Komponente eine Lizenzausnahme aus. Daher habe ich die Lizenzdatei neu generiert und an den Komponentenhersteller (EMC Captiva) gesendet, wo der Hersteller behauptet, der Fehler sei darauf zurückzuführen, dass die Gruppe "Benutzer" keine Leseberechtigungen für die Datei besitzt. Der Benutzer, der den Fehler entdeckt, ist zufällig ein lokaler Administrator, aber das ist neben dem Punkt, da ich immer noch neugierig auf die allgemeinere Frage bin.Wo speichert Windows ACLs und ACLs folgen einer Datei von einem Computer zum anderen?

Also meine Frage ist, sind ACLs in einer Datei gespeichert, so dass sie die Datei während ihrer gesamten Lebensdauer folgen, vor allem, wenn die Lizenzdatei auf meinem Rechner (Maschine 1) generiert wurde, in Subversion (Maschine 2) gespeichert, überprüft außerhalb der Quellcodeverwaltung von TeamCity (Maschine 3), von InstallShield (Maschine 4) in ein Installationsprogramm gepackt und schließlich auf dem Computer des Kunden (Maschine 5) bereitgestellt, wo es von einem Administrator installiert wurde? Was ist, nachdem ich die Datei auf meinem Dev-Computer (Maschine 1) erzeugt habe, sie über ihre Support-Site (Maschine 2) zum Komponentenhersteller hochlädt und der Support-Mitarbeiter sie zur Inspektion zu ihrer Maschine herunterlädt (Maschine 3)?

Ich weiß es nicht sicher (weshalb ich es hier frage), aber ich nahm an, dass jeder Windows-Rechner ACLs in einem zentralen Verzeichnis/list/table speichert, das von NTFS verwaltet und nicht in der Datei gespeichert wird. Was passiert mit der ACL der ursprünglichen Datei, wenn sie von einem Computer auf einen anderen kopiert wird, in Subversion gespeichert wird, in ein MSI gepackt wird usw.? Kann mir jemand auf gute Referenzen hinweisen, wo ich das nachlesen kann?

+0

Was möchten Sie tun? Was wäre die Verpackung von ACLs in ein MSI-Paket? Sie können nicht kontrollieren, was Personen mit einer Datei tun, wenn sie Ihren eigenen Computer verlassen hat, wenn Sie das vorhaben. – Tomalak

+1

Wie gesagt: Die ACL ist * nicht Bestandteil der Datei *. TortoiseSvn kann die ACL nicht einmal sehen. – Tomalak

+0

Das scheint der Anbieter der Komponenten zu sein, aber ich kaufe es nicht. – flipdoubt

Antwort

13

ACLs werden im Teil einer NTFS-Partition gespeichert, die alle Hintergrundinstallationen durchführt - die MFT (Master File Table).

Die ACL folgt keiner Datei, da sie nicht Teil der Datei ist (genau wie der Dateiname Metadaten). Die Datei kann Partitionstypgrenzen (NTFS-> FAT) überschreiten, die ACL kann dies nicht.

Jetzt, wenn Sie eine Datei innerhalb einer NTFS-Partition verschieben, können Sie den Eindruck erhalten, dass ACLs tatsächlich die Datei herum folgen. Dies liegt daran, dass während einer Verschiebung nur der Dateiname in der MFT geändert wird. Alles andere bleibt gleich.

Wenn Sie eine Datei kopieren oder auf eine andere Partition oder einen anderen Computer verschieben (was eigentlich eine Kopie + Löschoperation ist), erbt die kopierte Datei standardmäßig die Berechtigungen ihres neuen Containers (nur die vererbbaren)).

Es gibt jedoch Tools, die in der Lage sind, die ACL einer Datei nach einem Kopiervorgang beizubehalten (einfach durch erneutes Erstellen in der Zieldatei nach dem Kopiervorgang), sogar über Partitionen oder Computergrenzen hinweg. xcopy kann dies unter anderem tun.

Da jedoch eine ACL SIDs enthalten kann, die "domäneneigen" sind, ist ein ACL-Eintrag möglicherweise nicht sinnvoll für den Zielcomputer, der nicht zur selben Domäne gehört (z. B. wenn ein NTFS-formatiertes USB-Laufwerk mitgenommen wird)). In diesem Fall hat der ACL-Eintrag keine Auswirkung.

Andere SIDs sind "gut bekannt", wie die SID "SYSTEM". Diese werden tatsächlich über Domänengrenzen hinweg erkannt.

+0

+1 Sie sagten genau, was ich sagen wollte .. :) – RobS

+0

Sie stimmen also zu, dass der Komponentenanbieter, der mir Support anbietet, wahrscheinlich nicht dieselbe ACL sieht, die der Benutzer auf seinem Zielcomputer sieht, richtig? Kannst du auch einige Online-Ressourcen vorschlagen, in denen ich mehr darüber lesen kann, was du gesagt hast? – flipdoubt

+1

Ein Überblick: http://www.pcguide.com/ref/hdd/file/ntfs/secAccess-c.html – RobS