Warum bleiben Dateiberechtigungen erhalten, wenn Dateien auf demselben Volume verschoben werden?

9

Gelegentlich haben wir das Problem, dass eine Datei andere Berechtigungen hat als der Ordner, in dem sie sich befindet.

Jetzt fand ich heraus, dass es einen KB-Artikel gibt , der den Grund dafür erklärt:

Standardmäßig erbt ein Objekt Berechtigungen von seinem übergeordneten Objekt, entweder zum Zeitpunkt der Erstellung oder wenn es kopiert oder in seinen übergeordneten Ordner verschoben wird. Die einzige Ausnahme von dieser Regel tritt auf, wenn Sie ein Objekt in einen anderen Ordner auf demselben Volume verschieben. In diesem Fall bleiben die ursprünglichen Berechtigungen erhalten.

Der Benutzer hat die Datei also von einem Ordner in einen anderen verschoben und die Berechtigungen aus dem ursprünglichen Ordner wurden beibehalten.

Meine Frage ist jetzt: Warum gibt es diese Ausnahme? Was ist der Grund dafür?

VVS
quelle

Antworten:

8

Ich habe dies in einem Blog-Beitrag http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/ erklärt, aber es wird auch unten erklärt.

Wenn eine Datei kopiert wird, muss sie eine brandneue Datei erstellen und ihr einen neuen Satz von Berechtigungen zuweisen, damit sie die Berechtigungen aus dem übergeordneten Ordner erhält, wie Sie wissen.

Wenn eine Datei auf ein anderes Volume verschoben wird, wird sie tatsächlich auf das neue Volume kopiert und die alte Datei gelöscht. Daher wird derselbe Vorgang wie oben wiederholt, da es sich erneut um eine neue Datei handelt und Berechtigungen festgelegt werden müssen.

Wenn die Datei innerhalb desselben Volumes verschoben wird, geschieht nichts wirklich (auf Festplattenebene). Es ändert nur den logischen Pfad der Datei. Die tatsächlichen Daten und physischen Dateien auf der Festplatte wurden nicht berührt oder geändert. Haben Sie jemals bemerkt, dass das Verschieben einer 5-GB-Datei in einen anderen Ordner auf demselben Laufwerk fast sofort erfolgt? Aus diesem Grund hat sich der Zeiger darauf, wo die Datei logisch vorhanden ist, geändert, da er sich tatsächlich nicht bewegt hat. Da es in keiner Weise geändert wurde, ändern sich auch die Berechtigungen nicht.

Dies ist der Grund für dieses Verhalten.

Edit: Etwas, das ich vergessen habe zu erwähnen ... Der MS-Artikel ist nicht ganz korrekt. MS Zitat:

Standardmäßig erbt ein Objekt Berechtigungen von seinem übergeordneten Objekt, entweder zum Zeitpunkt der Erstellung oder wenn es kopiert oder in seinen übergeordneten Ordner verschoben wird. Die einzige Ausnahme von dieser Regel tritt auf, wenn Sie ein Objekt in einen anderen Ordner auf demselben Volume verschieben. In diesem Fall bleiben die ursprünglichen Berechtigungen erhalten.

Das obige Zitat gilt nur für Objekte, denen EXPLICITLY definierte sec-Berechtigungen erteilt wurden (Vererbung deaktivieren). Wie in meinen Kommentaren erwähnt, geht es darum, die ACL-Einträge so effizient wie möglich zu halten. Betrachten Sie das folgende Beispiel:

Nehmen wir an, Sie haben einen Ordner festgelegt, in dem Benutzer nur Rechte ändern können, um die Erklärung einfach zu halten. Darunter befinden sich Tausende von Dateien, für die keine explizite Berechtigungen festgelegt wurden. Es ist nicht sehr effizient, ACLs für jede Datei zu erstellen, da es sich genau um dieselben Dauerwellen handelt. Daher wird EIN ACL-Eintrag für den Ordner festgelegt. Dieses nächste Bit ist sehr wichtig zu verstehen; Die Dateien selbst haben KEINE ACL-PERMS. Wenn Sie also eine dieser Dateien in einen neuen Ordner auf demselben Volume verschieben, behauptet MS, dass die Dauerwellen damit verschoben werden (wie oben angegeben). Fragen Sie sich das ... wie? Es gab überhaupt keine Dauerwellen in der Datei, über die man sich bewegen konnte. Dies ist tatsächlich falsch und ich habe es gerade getestet, um es zu bestätigen. Angenommen, der Zielordner, in den Sie die Datei verschieben, verfügt über Dauerwellen, damit nur alle Gruppen Rechte ändern können. Da die Datei keine ACL direkt hat, erbt sie die ACL des übergeordneten Ordners. Dies bedeutet, dass die Dauerwellen von Benutzeränderungen (alter Ordner) auf alle Änderungen (neuer Ordner) geändert wurden.

Beachten Sie den Unterschied? Dieses Mal hat das Verschieben einer Datei in einen anderen Ordner auf demselben Volume die Dauerwellen geändert, was laut MS nicht der Fall ist. Habe ich seit 2000 einen Fehler in der MS-Dokumentation gefunden?

Sehen Sie sich nun dasselbe Szenario an, wenn Sie explizite Berechtigungen verwenden. Wenn Sie explizite Berechtigungen für eine Datei in diesem Ordner festlegen (Vererbung deaktiviert), die beispielsweise Benutzern den Lesezugriff verweigert, wird jetzt ein NEUER ACL-Eintrag speziell für diese Datei erstellt. Wenn Sie die Datei an einen neuen Speicherort verschieben, ist ein ACL-Eintrag direkt damit verbunden. In diesem Fall behält das Verschieben einer Datei an einen neuen Speicherort auf demselben Volume ihre Berechtigungen (wie von MS behauptet)!

Mucker
quelle
+1 Beide sind gute Antworten, aber Ihre sind mehr auf den Punkt. Ich mag Ihren Kommentar darüber, wie sich die 5-GB-Datei sofort bewegt. Gutes Bild.
KCotreau
Ich neige dazu zu denken, dass "keine Kopie stattfindet" der Hauptgrund ist, warum ACL nicht berührt wird.
VVS
1
Es gibt keinen technischen Grund, warum eine Änderung der Dateisystemtabelle den entsprechenden ACL-Eintrag nicht beeinflussen sollte. Ich denke, diese Erklärung ist richtig. Aber ich denke auch, dass es die Wirkung beschreibt, nicht die eigentliche Ursache. Die Ursache ist das ACL-eigene Sicherheitsmodell, das pro Volume basiert. Verschiebungs- / Kopiervorgänge zwischen verschiedenen Volumes werden als Übertragung von Berechtigungen und Änderungen innerhalb desselben Volumes als privilegunabhängig verstanden. Standardmäßig natürlich.
Ein Zwerg
1
Und logischerweise werden die Berechtigungen für eine Datei bei der Erstellung festgelegt. Beachten Sie beim Ändern der Berechtigungen für einen Ordner, dass Sie die Berechtigungen an alle untergeordneten Objekte weitergeben müssen. Aus diesem Grund öffnet Windows manchmal ein Dialogfeld, in dem alle untergeordneten Objekte geändert werden, wenn viele vorhanden sind.
Surfasb
1
@ Mucker: Sorry, aber deine Erklärung ist einfach falsch. Windows immer speichert die ACLs mit den Dateien, auch wenn sie geerbt sind. Aus Sicht des Dateisystems werden sie immer mit der Datei verschoben, wenn die Datei innerhalb desselben Volumes verschoben wird. Abhängig von bestimmten Systemeinstellungen springt der Windows Explorer nach dem Verschieben ein und passt die Berechtigungen an. Aber das ist Explorer und hat nichts mit dem Dateisystem zu tun. Und noch schlimmer: Es hängt von der Windows-Version und (wie bereits erwähnt) bestimmten Systemeinstellungen ab. Siehe blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Paul Groke
6

Wenn Sie Dateien innerhalb desselben Volumes verschieben , ordnen Sie Ihr Dateisystem traditionell neu . Durch Ändern der Dateiberechtigungen auf der Ebene des Verzeichnisses können Sie diese Datei sperren, sobald der Verschiebevorgang abgeschlossen ist. Dies ist unerwünscht, wenn Sie beispielsweise versehentlich eine Datei auf ein System oder einen Ordner mit besonderen Eigentumsrechten verschoben oder anderweitig geschützt haben. Es gibt keine andere Möglichkeit, den Fehler zu korrigieren, als den Besitz der Datei zu übernehmen (wenn Sie über die Berechtigungen verfügen) oder sich mit einem privilegierten Konto anzumelden. In Anbetracht des normalen täglichen Betriebs eines Computers konnten Sie feststellen, dass Sie keine Kontrolle über Ihr Dateisystem hatten.

Dieses Verhalten tritt häufig bei den meisten (wenn nicht allen) Betriebssystemen auf, die ACL verwenden. Es garantiert den normalen Betrieb des Dateisystems innerhalb eines Volumes durch Benutzer und Anwendungen gleichermaßen.

Umgekehrt geben Sie beim Verschieben von Dateien zwischen Volumes traditionell eine Datei zur Kontrolle durch etwas oder eine andere Person ab. Wie Sie wissen, ist es sinnvoll, dass die Datei dann die Berechtigungen für den Zielordner enthält, wodurch das Ziel die erforderlichen Berechtigungen erhält, um sein eigenes Dateisystem nach eigenem Ermessen neu anzuordnen.

Das ist natürlich nicht immer wünschenswert. Aus diesem Grund können Verschiebungs- und Kopiervorgänge mit speziellen Vererbungsregeln für Berechtigungen definiert werden. Aus dem gleichen Artikel:

  • Verwenden Sie das Dienstprogramm Xcopy.exe mit dem Schalter / O oder / X, um die Berechtigungen beim Kopieren oder Verschieben von Dateien und Ordnern beizubehalten. Die ursprünglichen Berechtigungen des Objekts werden zu vererbbaren Berechtigungen am neuen Speicherort hinzugefügt.

  • Verwenden Sie das Dienstprogramm Xcopy.exe mit den Schaltern –O und –X, um die ursprünglichen Berechtigungen eines Objekts zu vererbbaren Berechtigungen hinzuzufügen, wenn Sie ein Objekt kopieren oder verschieben.

Ein Zwerg
quelle
"Dies ist unerwünscht, wenn Sie beispielsweise versehentlich eine Datei auf ein System oder einen Ordner mit besonderen Eigentumsrechten verschoben oder anderweitig geschützt haben." - Sie verschieben also eine Datei, z. B. in einen Ordner mit Schreibberechtigungen, und können die Datei trotzdem zurück verschieben. Warum ist dies bei verschiedenen Volumes nicht wünschenswert?
VVS
1
@VVS, da ACL ein dateisystembasiertes Sicherheitsmodell ist. Jedes Volume enthält ein eigenes Dateisystem und folglich eine eigene ACL-Tabelle. Aus Sicht der ACL-Sicherheit entspricht ein anderes Volume einem anderen "Benutzer". Durch Verschieben einer Datei auf ein anderes Volume übertragen Sie die Kontrolle auf diesen "Benutzer". Aber Sie haben immer noch die Möglichkeit, dies nicht zu tun, wenn Sie dies tatsächlich wünschen. Es ist nur so, dass das Standardverhalten ACL-Sicherheitsbedenken berücksichtigt.
Ein Zwerg
1

OK Dies ist der wahre Tiefpunkt. Erstens - sprechen wir über einen einzelnen PC oder einen Server? Ich gehe davon aus, dass es sich um einen Server handelt. Also ... als Wintel-Administrator von Unternehmen A erstellen Sie ein Dateisystem auf einem Netzlaufwerk auf Ihrem neuen Server. Sie basieren auf Abteilungen, dh jede Abteilung hat einen Ordner und jeder Ordner hat aufgrund von Vertraulichkeitsproblemen eine eigene eindeutige ACL, wie es wahrscheinlich die Norm ist - ja? Wenn Sie also eine Datei in den Ordner einer anderen Abteilung verschieben möchten, warum um alles in der Welt möchten Sie dann NICHT, dass sie die Dauerwellen ihres neuen Ordners erbt? Was ich meine ist ... warum haben Sie ein auf Berechtigungen basierendes Dateisystem, wenn Sie es nicht verwenden werden? Ich kann Ihnen ein Beispiel aus der Praxis geben, bei dem es wichtig ist, dass verschobene Dateien / Ordner immer die ACL des übergeordneten Ordners erben. Fragen Sie mich einfach.

Verschieben von Dateien innerhalb eines Volumes oder Verschieben von Vol. X nach Vol. Y ... Was ist der wesentliche Unterschied? Sie verschieben den Speicherort einiger Dateien - über verschiedene Volumes hinweg oder nicht, soweit ich sehen kann, in einer Unternehmensumgebung einen kleinen Unterschied. Der wahre Grund, warum einer standardmäßig die Vererbung einschließt und der andere nicht, wurde von Mucker bereits erwähnt - das ist "Effizienz". Durch Ziehen und Ablegen von Dateien innerhalb eines Volumes wird lediglich der Indexeintrag geändert. Die Dateien werden nicht verschoben und ihre ACL-Informationen bleiben allein. Ermöglicht eine einfache Bedienung. Wenn Dateien über Volumes verschoben werden, müssen die Dateien und ihre ACLs jedoch neu definiert werden. Daher ist es sinnvoll, dies ordnungsgemäß zu tun und die Vererbung einzuschließen, da dies keinen vermeidbaren Overhead verursacht.

Ich kann nicht verstehen, warum Microsoft dieses Problem nicht behebt. Wäre es zu schwierig, ein Dialogfeld als Teil des Drag & Drop des Explorers einzuschließen? Etwas wie "Sie haben Dateien an einen Speicherort mit unterschiedlichen Zugriffsrechten verschoben. Möchten Sie die Berechtigungen des neuen übergeordneten Ordners erben? J oder N?"

Grüße, Stonegiant

Stonegiant
quelle