Dateisicherheit und Zugriffsrechte
Da Dateien sicherungsfähige Objekte sind, wird der Zugriff auf sie durch das Zugriffssteuerungsmodell geregelt, das den Zugriff auf alle anderen sicherungsfähigen Objekte in Windows steuert. Eine detaillierte Erläuterung dieses Modells finden Sie unter Access Control.
Sie können einen Sicherheitsdeskriptor für eine Datei oder ein Verzeichnis angeben, wenn Sie die Funktion CreateFile, CreateDirectoryEx oder CreateDirectoryEx aufrufen. Wenn Sie NULL für den lpSecurityAttributes-Parameter angeben, ruft die Datei oder das Verzeichnis einen Standardsicherheitsdeskriptor ab. Die Zugriffssteuerungslisten (ACL) im Standardsicherheitsdeskriptor für eine Datei oder ein Verzeichnis werden von ihrem übergeordneten Verzeichnis geerbt. Beachten Sie, dass ein Standardsicherheitsdeskriptor nur zugewiesen wird, wenn eine Datei oder ein Verzeichnis neu erstellt wird und nicht, wenn sie umbenannt oder verschoben wird.
Um die Sicherheitsbeschreibung eines Datei- oder Verzeichnisobjekts abzurufen, rufen Sie die Funktion "GetNamedSecurityInfo " oder "GetSecurityInfo " auf. Um die Sicherheitsbeschreibung eines Datei- oder Verzeichnisobjekts zu ändern, rufen Sie die Funktion "SetNamedSecurityInfo " oder "SetSecurityInfo " auf.
Die gültigen Zugriffsrechte für Dateien und Verzeichnisse umfassen die DELETE-, READ_CONTROL-, WRITE_DAC-, WRITE_OWNER- und SYNCstandardzugriffsrechte. Die Tabelle in Dateizugriffsrechtkonstanten listet die Zugriffsrechte auf, die für Dateien und Verzeichnisse spezifisch sind.
Obwohl das SYNCHRONISIERUNGszugriffsrechtin der Standardzugriffsberechtigungsliste als Recht definiert ist, um einen Dateihandpunkt in einer der Wartenfunktionen anzugeben, sollten Sie beim Verwenden asynchroner Datei-I/O-Vorgänge auf den Ereignishandpunkt warten, der in einer ordnungsgemäß konfigurierten ÜBERLAPPENDEN Struktur enthalten ist, anstatt den Dateihandpunkt mit dem SYNCHRONISIEREN-Zugriff rechts für die Synchronisierung zu verwenden.
Im Folgenden finden Sie die generischen Zugriffsrechte für Dateien und Verzeichnisse.
| Zugriff rechts | BESCHREIBUNG |
|---|---|
| FILE_GENERIC_EXECUTE |
FILE_READ_ATTRIBUTES STANDARD_RIGHTS_EXECUTE SYNCHRONIZE |
| FILE_GENERIC_READ |
FILE_READ_DATA FILE_READ_EA STANDARD_RIGHTS_READ SYNCHRONIZE |
| FILE_GENERIC_WRITE |
FILE_WRITE_ATTRIBUTES FILE_WRITE_DATA FILE_WRITE_EA STANDARD_RIGHTS_WRITE SYNCHRONIZE |
Windows vergleicht die angeforderten Zugriffsrechte und die Informationen im Zugriffstoken des Threads mit den Informationen im Sicherheitsdeskriptor des Datei- oder Verzeichnisobjekts. Wenn der Vergleich nicht alle angeforderten Zugriffsrechte verbietet, wird ein Handle zum Objekt an den Thread zurückgegeben und die Zugriffsrechte gewährt. Weitere Informationen zu diesem Prozess finden Sie unter Interaktion zwischen Threads und Sicherungsobjekten.
Standardmäßig wird die Autorisierung für den Zugriff auf eine Datei oder ein Verzeichnis streng durch die ACLs im Sicherheitsdeskriptor gesteuert, der dieser Datei oder diesem Verzeichnis zugeordnet ist. Insbesondere wird der Sicherheitsdeskriptor eines übergeordneten Verzeichnisses nicht verwendet, um den Zugriff auf untergeordnete Dateien oder Verzeichnisse zu steuern. Das FILE_TRAVERSEAccess-Recht kann erzwungen werden, indem die BYPASS_TRAVERSE_CHECKINGPrivilege von Benutzern entfernt werden. Dies wird im allgemeinen Fall nicht empfohlen, da viele Programme nicht ordnungsgemäß Verzeichnis-Traversalfehler behandeln. Die primäre Verwendung für das FILE_TRAVERSE Zugriffsrecht auf Verzeichnissen besteht darin, die Einhaltung bestimmter IEEE- und ISO POSIX-Standards zu ermöglichen, wenn die Interoperabilität mit Unix-Systemen eine Anforderung ist.
Das Windows Sicherheitsmodell bietet eine Möglichkeit, ein untergeordnetes Verzeichnis zu erben oder zu verhindern, eine oder mehrere der ACEs im Sicherheitsdeskriptor des übergeordneten Verzeichnisses zu erben. Jede ACE enthält Informationen, die bestimmen, wie sie geerbt werden kann, und ob sie auswirkungen auf das erbende Verzeichnisobjekt haben wird. Beispielsweise werden einige geerbte ACEs-Steuerelementzugriff auf das geerbte Verzeichnisobjekt, und diese werden als effektive ACEs bezeichnet. Alle anderen ACEs werden als erbgeschützte ACEs bezeichnet.
Das Windows Sicherheitsmodell erzwingt auch die automatische Vererbung von ACEs auf untergeordnete Objekte gemäß den ACE-Vererbungsregeln. Diese automatische Vererbung zusammen mit den Vererbungsinformationen in jedem ACE bestimmt, wie Sicherheitseinschränkungen über die Verzeichnishierarchie übergeben werden.
Beachten Sie, dass Sie keine Zugriffs verweigerte ACE 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 sowohl für GENERIC_READ als auch für GENERIC_WRITEdas SYNC-Zugriffsrecht enthalten. Wenn ein ACE den GENERIC_WRITE Zugriff auf einen Trustee verweigert, und die Trustee-Anforderungen GENERIC_READ Zugriff, schlägt die Anforderung fehl, da die Anforderung implizit den SYNC-Zugriff enthält, der implizit vom ACE verweigert wird und umgekehrt. Verwenden Sie anstelle von Zugriffs verweigerten ACEs zugriffsgeschützte ACEs, um die zulässigen Zugriffsrechte explizit zuzulassen.
Eine weitere Möglichkeit zum Verwalten des Zugriffs auf Speicherobjekte ist verschlüsselung. Die Implementierung der Dateisystemverschlüsselung in Windows ist das verschlüsselte Dateisystem oder EFS. EFS verschlüsselt nur Dateien und nicht Verzeichnisse. Der Vorteil der Verschlüsselung besteht darin, dass es zusätzlichen Schutz für Dateien bietet, die auf den Medien angewendet werden und nicht über das Dateisystem und die Standard-Windows Zugriffssteuerungsarchitektur. Weitere Informationen zur Dateiverschlüsselung finden Sie unter Dateiverschlüsselung.
In den meisten Fällen ist die Möglichkeit, die Sicherheitseinstellungen eines Datei- oder Verzeichnisobjekts zu lesen und zu schreiben, auf Kernelmodusprozesse beschränkt. Klar möchten Sie nicht, dass ein Benutzerprozess den Besitz oder die Zugriffsbeschränkung für Ihre private Datei oder Ihr Verzeichnis ändern kann. Eine Sicherungsanwendung kann jedoch nicht ihren Auftrag ausführen, ihre Datei zu sichern, wenn die Zugriffseinschränkungen, die Sie in Ihrer Datei oder ihrem Verzeichnis platziert haben, den Benutzermodusprozess der Anwendung nicht erlaubt, sie zu lesen. Backup Anwendungen müssen die Sicherheitseinstellungen von Datei- und Verzeichnisobjekten außer Kraft setzen können, um eine vollständige Sicherung sicherzustellen. Wenn eine Sicherungsanwendung versucht, eine Sicherungskopie Ihrer Datei über die datenträgerbasierte Kopie zu schreiben, und Sie verweigern explizit schreibberechtigungen für den Sicherungsanwendungsprozess, kann der Wiederherstellungsvorgang nicht abgeschlossen werden. In diesem Fall muss die Sicherungsanwendung die Zugriffssteuerungseinstellungen Ihrer Datei außer Kraft setzen können.
Die SE_BACKUP_NAME und SE_RESTORE_NAME Zugriffsberechtigungen wurden speziell erstellt, um diese Möglichkeit zur Sicherung von Anwendungen bereitzustellen. Wenn diese Berechtigungen im Zugriffstoken des Sicherungsanwendungsprozesses gewährt und aktiviert wurden, kann sie dann CreateFile aufrufen, um Ihre Datei oder Ihr Verzeichnis für die Sicherung zu öffnen, indem sie den Standard-READ_CONTROL Zugriff rechts als Wert des dwDesiredAccess-Parameters angibt. Um den Aufrufvorgang jedoch als Sicherungsprozess zu identifizieren, muss der Aufruf von CreateFile das FILE_FLAG_BACKUP_SEMANTICS Flag im DwFlagsAndAttributes-Parameter enthalten. Die vollständige Syntax des Funktionsaufrufs ist die folgende:
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. Um Ihre Datei wiederherzustellen, würde die Sicherungsanwendung die folgende CreateFile-Aufrufssyntax verwenden, wenn Sie Ihre Datei öffnen, um geschrieben zu werden.
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 kann. Ein Beispiel ist, wenn sich die Zugriffssteuerungseinstellungen der datenträgerbasierten Kopie einer Datei oder eines Verzeichnisses von der Sicherungskopie unterscheiden. Dies würde passieren, wenn diese Einstellungen nach der Sicherung der Datei oder des Verzeichnisses geändert wurden oder wenn es beschädigt wurde.
Das im Aufruf von CreateFile angegebene FILE_FLAG_BACKUP_SEMANTICS Flag ermöglicht den Sicherungsanwendungsprozess, die Zugriffssteuerungseinstellungen der Datei oder des Verzeichnisses zu lesen. 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 Einstellungen für die Zugriffssteuerung auf Systemebene haben muss, muss das ACCESS_SYSTEM_SECURITY-Flag im an CreateFile übergebenen dwDesiredAccess-Parameterwert angegeben werden.
Backup Anwendungen rufen BackupRead auf, um die Dateien und Verzeichnisse zu lesen, die für den Wiederherstellungsvorgang angegeben sind, und BackupWrite, um sie zu schreiben.
Zugehörige Themen