Freigeben über


Dateisicherheit und Zugriffsrechte

Da Dateien absicherbare Objekte sind, wird der Zugriff auf sie durch das Zugriffssteuerungsmodell geregelt, das den Zugriff auf alle anderen absicherbaren Objekte unter Windows steuert. Eine ausführliche Erläuterung dieses Modells finden Sie unter Zugriffssteuerung.

Sicherheitsbeschreiber

Sie können einen Sicherheitsdeskriptor für eine Datei oder ein Verzeichnis angeben, wenn Sie die Funktion CreateFile, CreateDirectory oder CreateDirectoryEx aufrufen. Wenn Sie NULL für den Parameter lpSecurityAttributes angeben, erhält die Datei oder das Verzeichnis einen Standardsicherheitsdeskriptor. Die Zugriffssteuerungslisten (Access Control Lists, ACL) in der Standardsicherheitsbeschreibung für eine Datei oder ein Verzeichnis werden vom übergeordneten Verzeichnis geerbt. Beachten Sie, dass eine Standardsicherheitsbeschreibung nur zugewiesen wird, wenn eine Datei oder ein Verzeichnis neu erstellt wird, und nicht, wenn sie umbenannt oder verschoben werden.

Rufen Sie zum Abrufen der Sicherheitsbeschreibung eines Datei- oder Verzeichnisobjekts die GetNamedSecurityInfo - oder GetSecurityInfo-Funktion auf. Rufen Sie die SetNamedSecurityInfo - oder SetSecurityInfo-Funktion auf, um die Sicherheitsbeschreibung eines Datei- oder Verzeichnisobjekts zu ändern.

Dateizugriffsrechte

Die gültigen Zugriffsrechte für Dateien und Verzeichnisse umfassen die DELETE-, READ_CONTROL-, WRITE_DAC-, WRITE_OWNER- und SYNCHRONIZE-Standardzugriffsrechte. In der Tabelle in "Dateizugriffsrechtkonstanten" sind die Zugriffsberechtigungen aufgeführt, die spezifisch für Dateien und Verzeichnisse sind.

Obwohl das Zugriffsrecht SYNCHRONIZE in der Liste Standardzugriffsrechte als das Recht definiert ist, ein Dateihandle in einer der wait-Funktionen anzugeben, sollten Sie bei asynchronen Datei-E/A-Vorgängen auf das Ereignishandle warten, das in einer ordnungsgemäß konfigurierten OVERLAPPED-Struktur enthalten ist, anstatt das Dateihandle mit dem Zugriffsrecht SYNCHRONIZE zur Synchronisierung zu verwenden.

Im Folgenden finden Sie die allgemeinen Zugriffsrechte für Dateien und Verzeichnisse:

Generisches Zugriffsrecht Zugeordnete Zugriffsrechte Generische Bedeutung
FILE_GENERIC_EXECUTE FILE_EXECUTE
FILE_READ_ATTRIBUTES
STANDARD_RIGHTS_EXECUTE
SYNCHRONISIEREN
Ausführen des Zugriffs
FILE_GENERIC_READ FILE_READ_ATTRIBUTES
FILE_READ_DATA
FILE_READ_EA
STANDARD_RIGHTS_READ
SYNCHRONISIEREN
Lesezugriff
FILE_GENERIC_WRITE FILE_APPEND_DATA
FILE_WRITE_ATTRIBUTES
FILE_WRITE_DATA
FILE_WRITE_EA
STANDARD_RIGHTS_WRITE
SYNCHRONISIEREN
Schreibzugriff

Windows vergleicht die angeforderten Zugriffsrechte und Informationen im Zugriffstoken des Threads mit den Informationen in der Sicherheitsbeschreibung des Datei- oder Verzeichnisobjekts. Wenn der Vergleich nicht verhindert, dass alle angeforderten Zugriffsrechte gewährt werden, wird ein Handle für das Objekt an den Thread zurückgegeben, und die Zugriffsrechte werden gewährt. Weitere Informationen zu diesem Prozess finden Sie unter Interaktion zwischen Threads und absicherbaren Objekten.

Standardmäßig wird die Autorisierung für den Zugriff auf eine Datei oder ein Verzeichnis von den ACLs in der Sicherheitsbeschreibung streng gesteuert, die dieser Datei oder diesem Verzeichnis zugeordnet ist. Insbesondere wird die Sicherheitsbeschreibung eines übergeordneten Verzeichnisses nicht verwendet, um den Zugriff auf untergeordnete Dateien oder Verzeichnisse zu steuern. Das FILE_TRAVERSE-Zugriffsrecht kann durch das Entfernen des BYPASS_TRAVERSE_CHECKING-Rechts von Benutzer*innen erzwungen werden. Dies wird im Allgemeinen nicht empfohlen, da viele Programme Fehler beim Verzeichnisdurchlauf nicht ordnungsgemäß behandeln. Die primäre Zweck des FILE_TRAVERSE-Zugriffsrecht für Verzeichnisse besteht darin, die Konformität mit bestimmten IEEE- und ISO POSIX-Standards zu ermöglichen, wenn Interoperabilität mit UNIX-Systemen erforderlich ist.

Das Windows-Sicherheitsmodell bietet die Möglichkeit, dass ein untergeordnetes Verzeichnis einen oder mehrere Zugriffssteuerungseinträge (Access Control Entries, ACEs) der Sicherheitsbeschreibung des übergeordneten Verzeichnisses erbt oder daran gehindert wird, diese zu erben. Jeder ACE enthält Informationen, die bestimmen, wie er geerbt werden kann und ob dies Auswirkungen auf das erbende Verzeichnisobjekt hat. Beispielsweise steuern einige geerbte ACEs den Zugriff auf das geerbte Verzeichnisobjekt, die als effektive ACEs bezeichnet werden. Alle anderen ACEs haben die Bezeichnung Nur erben.

Das Windows-Sicherheitsmodell erzwingt auch die automatische Vererbung von ACEs an untergeordnete Objekte gemäß den ACE-Vererbungsregeln. Diese automatische Vererbung bestimmt zusammen mit den Vererbungsinformationen in jedem ACE, wie Sicherheitseinschränkungen in der Verzeichnishierarchie nach unten weitergegeben werden.

Beachten Sie, dass Sie einen ACE für Zugriffsverweigerung nicht verwenden können, um nur GENERIC_READ- oder nur GENERIC_WRITE-Zugriff auf eine Datei zu verweigern. Dies liegt daran, dass für Dateiobjekte die generischen Zuordnungen für GENERIC_READ oder GENERIC_WRITE das SYNCHRONIZE-Zugriffsrecht enthalten. Wenn ein ACE einem Vertrauensnehmer den GENERIC_WRITE-Zugriff verweigert und der Vertrauensnehmer GENERIC_READ-Zugriff anfordert, schlägt die Anforderung fehl, da die Anforderung implizit einen SYNCHRONIZE-Zugriff umfasst, der vom ACE implizit verweigert wird und umgekehrt. Verwenden Sie anstelle von ACEs, die Zugriff verweigern, ACEs, die Zugriff erlauben, um die erlaubten Zugriffsrechte ausdrücklich zuzulassen.

Eine weitere Möglichkeit zum Verwalten des Zugriffs auf Speicherobjekte ist Verschlüsselung. Die Implementierung der Dateisystemverschlüsselung unter Windows ist Encrypted File System (bzw. EFS). EFS verschlüsselt ausschließlich Dateien und keine Verzeichnisse. Der Vorteil der Verschlüsselung besteht in einem zusätzlichen Schutz für Dateien, der auf dem Datenträger und nicht über das Dateisystem und die standardmäßige Windows-Architektur für Zugriffssteuerung angewendet wird. Weitere Informationen zur Dateiverschlüsselung finden Sie unter Dateiverschlüsselung.

Sichern und Wiederherstellen von Zugriffsrechten

Zumeist ist die Möglichkeit, die Sicherheitseinstellungen eines Datei- oder Verzeichnisobjekts zu lesen und zu schreiben, auf Prozesse im Kernelmodus beschränkt. Sie möchten selbstredend nicht, dass ein Prozess eines Benutzers den Besitz oder den Zugriff auf Ihre private Datei oder Ihr privates Verzeichnis ändern kann. Eine Sicherungsanwendung wäre jedoch nicht in der Lage, ihren Auftrag zur Sicherung Ihrer Datei zu erfüllen, wenn die Zugriffsbeschränkungen, die Sie für Ihre Datei oder Ihr Verzeichnis festgelegt haben, es dem Benutzermodusprozess der Anwendung nicht erlauben, diese zu lesen. Sicherungsanwendungen müssen in der Lage sein, die Sicherheitseinstellungen von Datei- und Verzeichnisobjekten zu überschreiben, um eine vollständige Sicherung zu gewährleisten. Ähnlich verhält es sich, wenn eine Sicherungsanwendung versucht, eine Sicherungskopie Ihrer Datei über die datenträgerresidente Kopie zu schreiben und Sie dem Prozess der Sicherungsanwendung Schreibrechte explizit verweigern. Dann kann der Wiederherstellungsvorgang nicht abgeschlossen werden. Auch in diesem Fall muss die Sicherungsanwendung in der Lage sein, die Zugriffssteuerungseinstellungen Ihrer Datei zu überschreiben.

Die Zugriffsberechtigungen SE_BACKUP_NAME und SE_RESTORE_NAME wurden spezifisch erstellt, um diese Möglichkeit zum Sichern von Anwendungen zu bieten. Wenn diese Berechtigungen im Zugriffstoken des Sicherungsanwendungsprozesses gewährt und aktiviert wurden, kann CreateFile aufgerufen werden, um Ihre Datei oder Ihr Verzeichnis für die Sicherung zu öffnen, und dabei den READ_CONTROL-Standardzugriffsrecht als Wert des dwDesiredAccess-Parameters anzugeben. Um den aufrufenden Prozess jedoch als Sicherungsprozess zu bestimmen, muss der Aufruf von CreateFile das FILE_FLAG_BACKUP_SEMANTICS-Flag im dwFlagsAndAttributes-Parameter enthalten. Die vollständige Syntax des Funktionsaufrufs ist wie folgt:

HANDLE hFile = CreateFile( fileName,                   // lpFileName
                           READ_CONTROL,               // dwDesiredAccess
                           0,                          // dwShareMode
                           NULL,                       // lpSecurityAttributes
                           OPEN_EXISTING,              // dwCreationDisposition
                           FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
                           NULL );                     // hTemplateFile

Dadurch kann der Sicherungsanwendungsprozess Ihre Datei öffnen und die Standardsicherheitsprüfung außer Kraft setzen. Zum Wiederherstellen der Datei verwendet die Sicherungsanwendung beim Öffnen der zu schreibenden Datei die folgende CreateFile-Aufrufsyntax .

HANDLE hFile = CreateFile( fileName,                   // lpFileName
                           WRITE_OWNER | WRITE_DAC,    // dwDesiredAccess
                           0,                          // dwShareMode
                           NULL,                       // lpSecurityAttributes
                           CREATE_ALWAYS,              // dwCreationDisposition
                           FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
                           NULL );                     // hTemplateFile

Es gibt Situationen, in denen eine Sicherungsanwendung die Zugriffssteuerungseinstellungen einer Datei oder eines Verzeichnisses ändern können muss. Beispielsweise, wenn sich die Zugriffssteuerungseinstellungen der datenträgerresidenten Kopie einer Datei oder eines Verzeichnisses von denen der Sicherungskopie unterscheiden. Dies wäre der Fall, wenn diese Einstellungen nach der Sicherung der Datei oder des Verzeichnisses geändert oder diese beschädigt wurden.

Das im Aufruf von CreateFile angegebene FILE_FLAG_BACKUP_SEMANTICS Flag gibt der Sicherungsanwendungsvorgang die Berechtigung zum Lesen der Zugriffssteuerungseinstellungen der Datei oder des Verzeichnisses. Mit dieser Berechtigung kann der Sicherungsanwendungsprozess dann GetKernelObjectSecurity und SetKernelObjectSecurity aufrufen, um die Zugriffssteuerungseinstellungen zu lesen und zurückzusetzen.

Wenn eine Sicherungsanwendung Zugriff auf die Zugriffssteuerungseinstellungen auf Systemebene haben muss, muss das ACCESS_SYSTEM_SECURITY Flag im an CreateFile übergebenen dwDesiredAccess-Parameterwert angegeben werden.

Sicherungsanwendungen rufen BackupRead auf, um die dateien und Verzeichnisse zu lesen, die für den Wiederherstellungsvorgang angegeben sind, und BackupWrite , um sie zu schreiben.

Standardzugriffsrechte