Zugriffsrechte beim Kopieren und Verschieben unter Windows mit NTFS

Wer schon mal unter NTFS eine Datei kopiert oder verschoben hat, hat eventuell schon mal ein recht überraschendes Verhaten festgestellt, was dir Zugriffsrechte angeht. Ein mal hatte man Zugriff und das andere mal aufeinmal nicht mehr, obwohl man vorher Zugriff auf die Dateie hatte, nach dem man sie kopiert oder verschoben hatte.

Das liegt daran, wie Windows die Datei beim Kopieren bzw. Verschieben behandelt und was dabei mit der ACL passiert. Wie kopiert Windows eine Datei? Dazu wird die zu kopierende Datei zum Lesen geöffnet, der Inhalt gelesen, am neuen Speicherort eine neue Datei erstellt und der zuvor gelesene Inhalt in die neue Datei geschrieben.
Wie verschiebt Windows eine Datei? Dabei wird nur der Eintrag im Inhaltsverzeichnis geändert, die Datei wird also gar nicht angefasst. Aber das gilt nur, wenn eine Datei innerhalb einer Partition verschoben wird. Wird eine Datei über Partitionsgrenzen hinweg verschoben, passiert das Selbe wie beim Kopieren, nur dass die Quelldatei am Ende gelöscht wird. Warum das so ist, ist auch klar. Die Datei muss neu erstellt werden, damit ein Eintrag im Inhaltsverzeichnis erstellt werden kann, denn die Datei existierte ja vorher nicht auf dieser Partition.

Aber was passiert jetzt mit der ACL, die ja für die Zugriffsrechte verantwortlich ist? Wird eine Dateineu erstellt und hat somit noch keine zugewiesenen Zugriffsrechte, werden die Zugriffsrechte des übergeordenten Objektes über nommen. Wird eine Datei verschoben und hat schon zugewiesene Zugriffsrechte, bleiben diese unverändert erhalten. Wird eine Datei über Partitionsgrenzen hinweg verschoben, wird sie am Ziel neu erstellt und bekommt somit die Zugriffsrechte des Zielordners.

Was bedeutet das jetzt? Ein paar Beispiele. Nehmen wir an Alice hat Lese- und Screibrechte auf eine Datei, die sie kopiert. Sie kopiert diese Datei in einen Ordner, in dem sie nur Leserechte hat. Das hat zur Folge, dass sie die gerade kopierte Datei zwar zum Lesen öffnen, aber sie nicht verändern kann. Und zwar weil, die Datei eben die Zugriffsrechte des übergordneten Objektes, in diesem Fall den Ordner, in dem Alice nur Leserechte hat, übernommen hat.
Ein weiteres Beispiel. Alice hat alleinige Lese- und Schreibrechte auf eine Datei. Sie verschiebt diese Datei nun in einen Ordner auf der gleichen Partiton in dem Bob und Alice Lese- und Schreibrechte haben. Trotz das Bob in dem Ordner Lese- und Schreibrechte hat, kann er die von Alice in den gemeinsamen Ordner verschobene Datei weder lesen noch verändern, weil die Datei in ihrer ACL nur Alice Lese- und Schreibrechte gewährt. Würde Allice die Datei in einen gemeinsamen Order auf einer anderen Partition verschieben, hätte auch Bob Zugriff auf die Datei, da ja die Datei neu erstellt wird und somit die Zugriffsrechte des übergeordneten Ordners bekommt.

Noch mal zusammengefasst:

  1. Wird eine Datei kopiert, bekommt sie die Zugriffsrechte des übergeordneten Ordners.
  2. Wird eine Datei auf der selben Partition verschoben, behält sie ihre Zugriffsrechte.
  3. Wird eine Datei über Partitionsgrenzen hinweg verschoben, bekommt sie die Zugriffsrechte des übergeordneten Ordners.

Aus den oben genannten Gründen wurde das Flag FOF_NOCOPYSECURITYATTRIBS ab Windows 20000 eingeführt. Benutzt man dieses Flag beim Verschieben einer Datei, auch innerhalb einer Partition, werden die Sicherheitsattribute so angepasst, dass sie mit dem übergeordneten Ordner übereinstimmen. Wird dieses Falg nicht angegeben, werden die Zugriffsrechte nach dem oben besprochenen Dateisystemverhalten vergeben.

Quelle: The Old New Thing - What does the FOF_NOCOPYSECURITYATTRIBS flag really do (or not do)?

2010-12-29T23:45:00 +0100, mail+homepage[at]michael-puff.de