Bestandsbeveiligings- en toegangsrechten
Omdat bestanden zijn beveiligbare objecten, wordt de toegang tot deze objecten geregeld door het toegangsbeheermodel dat de toegang tot alle andere beveiligbare objecten in Windows regelt. Zie Access Controlvoor een gedetailleerde uitleg van dit model.
U kunt een beveiligingsdescriptor opgeven voor een bestand of map wanneer u de CreateFile-aanroept, CreateDirectory-of functie CreateDirectoryEx. Als u NULL- opgeeft voor de parameter lpSecurityAttributes, krijgt het bestand of de map een standaardbeveiligingsdescriptor. De toegangsbeheerlijsten (ACL) in de standaardbeveiligingsdescriptor voor een bestand of map worden overgenomen van de bovenliggende map. Houd er rekening mee dat een standaardbeveiligingsdescriptor alleen wordt toegewezen wanneer een bestand of map nieuw is gemaakt en niet wanneer de naam ervan wordt gewijzigd of verplaatst.
Als u de beveiligingsdescriptor van een bestand of mapobject wilt ophalen, roept u de functie GetNamedSecurityInfo of GetSecurityInfo aan. Als u de beveiligingsdescriptor van een bestand of mapobject wilt wijzigen, roept u de functie SetNamedSecurityInfo of SetSecurityInfo- aan.
De geldige toegangsrechten voor bestanden en mappen omvatten de DELETE-, READ_CONTROL, WRITE_DAC, WRITE_OWNERen SYNCHRONISERENstandaardtoegangsrechten. De tabel in Bestandstoegangsrechtenconstanten bevat de toegangsrechten die specifiek zijn voor bestanden en mappen.
Hoewel het synchroon toegangsrecht is gedefinieerd in de standaardtoegangsrechten lijst als het recht om een bestandsgreep op te geven in een van de wachtfuncties, moet u bij het gebruik van asynchrone bestands-I/O-bewerkingen wachten op de gebeurtenisgreep in een correct geconfigureerde OVERLAPPENDE structuur in plaats van de bestandsgreep te gebruiken met het SYNCHRONISEREN toegangsrecht voor synchronisatie.
Hier volgen de algemene toegangsrechten voor bestanden en mappen.
Toegangsrecht | Beschrijving |
---|---|
FILE_GENERIC_EXECUTE |
FILE_READ_ATTRIBUTES STANDARD_RIGHTS_EXECUTE synchroniseren |
FILE_GENERIC_READ |
FILE_READ_DATA FILE_READ_EA STANDARD_RIGHTS_READ synchroniseren |
FILE_GENERIC_WRITE |
FILE_WRITE_ATTRIBUTES FILE_WRITE_DATA FILE_WRITE_EA STANDARD_RIGHTS_WRITE synchroniseren |
Windows vergelijkt de aangevraagde toegangsrechten en de informatie in het toegangstoken van de thread met de informatie in de beveiligingsdescriptor van het bestand of mapobject. Als de vergelijking niet alle aangevraagde toegangsrechten verbiedt, wordt een ingang aan het object geretourneerd naar de thread en worden de toegangsrechten verleend. Zie Interactie tussen threads en beveiligbare objectenvoor meer informatie over dit proces.
Standaard wordt autorisatie voor toegang tot een bestand of map strikt beheerd door de ACL's in de beveiligingsdescriptor die aan dat bestand of die map is gekoppeld. In het bijzonder wordt de beveiligingsdescriptor van een bovenliggende map niet gebruikt om de toegang tot een onderliggend bestand of een onderliggende map te beheren. Het FILE_TRAVERSEtoegangsrecht kan worden afgedwongen door de BYPASS_TRAVERSE_CHECKINGbevoegdheid van gebruikers te verwijderen. Dit wordt niet aanbevolen in het algemene geval, omdat veel programma's directory-doorkruisingsfouten niet correct verwerken. Het primaire gebruik voor het FILE_TRAVERSE toegangsrecht voor directory's is om naleving van bepaalde IEEE- en ISO POSIX-standaarden mogelijk te maken wanneer interoperabiliteit met Unix-systemen een vereiste is.
Het Windows-beveiligingsmodel biedt een manier om een onderliggende map over te nemen of om te voorkomen dat een of meer ACL's worden overgenomen in de beveiligingsdescriptor van de bovenliggende directory. Elke ACE bevat informatie die bepaalt hoe deze kan worden overgenomen en of dit van invloed is op het overnemende mapobject. Sommige overgenomen ACL's beheren bijvoorbeeld de toegang tot het overgenomen directory-object, en deze worden effectieve ACL'sgenoemd. Alle andere ACL's worden ACL's met alleen-overnemengenoemd.
Het Windows-beveiligingsmodel dwingt ook de automatische overname van ACL's af op basis van de ACE-overnameregels. Deze automatische overname, samen met de overname-informatie in elke ACE, bepaalt hoe beveiligingsbeperkingen worden doorgegeven aan de adreslijsthiërarchie.
Houd er rekening mee dat u geen toegangs geweigerde ACE kunt gebruiken om alleen GENERIC_READ of alleen GENERIC_WRITE toegang tot een bestand te weigeren. Dit komt doordat voor bestandsobjecten de algemene toewijzingen voor zowel GENERIC_READ als GENERIC_WRITE het synchroon toegangsrecht bevatten. Als een ACE GENERIC_WRITE toegang weigert tot een beheerder en de beheerder GENERIC_READ toegang aanvraagt, mislukt de aanvraag omdat de aanvraag impliciet SYNC- toegang omvat die impliciet wordt geweigerd door de ACE en vice versa. Gebruik toegangsbeheerlijsten in plaats van toegang geweigerde ACL's om expliciet de toegestane toegangsrechten toe te staan.
Een ander middel om de toegang tot opslagobjecten te beheren, is versleuteling. De implementatie van bestandssysteemversleuteling in Windows is het versleutelde bestandssysteem of EFS. EFS versleutelt alleen bestanden en niet mappen. Het voordeel van versleuteling is dat het extra beveiliging biedt voor bestanden die op de media worden toegepast en niet via het bestandssysteem en de standaardarchitectuur voor Windows-toegangsbeheer. Zie File Encryptionvoor meer informatie over bestandsversleuteling.
In de meeste gevallen is de mogelijkheid om de beveiligingsinstellingen van een bestand of mapobject te lezen en te schrijven beperkt tot kernelmodusprocessen. Het is duidelijk dat u niet wilt dat een gebruikersproces de eigendoms- of toegangsbeperking voor uw privébestand of map kan wijzigen. Een back-uptoepassing kan echter geen back-up maken van het bestand als de toegangsbeperkingen die u hebt geplaatst in uw bestand of map, het gebruikersmodusproces van de toepassing niet toestaat om het te lezen. Back-uptoepassingen moeten de beveiligingsinstellingen van bestands- en mapobjecten kunnen overschrijven om een volledige back-up te garanderen. Als een back-uptoepassing probeert een back-upkopie van uw bestand te schrijven via de schijf-residente kopie en u schrijfbevoegdheden voor het back-uptoepassingsproces expliciet weigert, kan de herstelbewerking niet worden voltooid. In dit geval moet de back-uptoepassing ook de instellingen voor toegangsbeheer van uw bestand kunnen overschrijven.
De SE_BACKUP_NAME- en SE_RESTORE_NAME-toegangsbevoegdheden zijn specifiek gemaakt om deze mogelijkheid te bieden om back-ups te maken van toepassingen. Als deze bevoegdheden zijn verleend en ingeschakeld in het toegangstoken van het back-uptoepassingsproces, kan het vervolgens CreateFile aanroepen om uw bestand of map voor back-up te openen, waarbij het standaard-READ_CONTROL toegangsrecht wordt opgegeven als de waarde van de parameter dwDesiredAccess. Als u het aanroepproces echter wilt identificeren als een back-upproces, moet de aanroep naar CreateFile- de vlag FILE_FLAG_BACKUP_SEMANTICS in de parameter dwFlagsAndAttributes bevatten. De volledige syntaxis van de functie-aanroep is het volgende:
HANDLE hFile = CreateFile( fileName, // lpFileName
READ_CONTROL, // dwDesiredAccess
0, // dwShareMode
NULL, // lpSecurityAttributes
OPEN_EXISTING, // dwCreationDisposition
FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
NULL ); // hTemplateFile
Hierdoor kan het back-uptoepassingsproces uw bestand openen en de standaardbeveiligingscontrole overschrijven. Als u het bestand wilt herstellen, gebruikt de back-uptoepassing de volgende CreateFile aanroepsyntaxis bij het openen van het bestand dat moet worden geschreven.
HANDLE hFile = CreateFile( fileName, // lpFileName
WRITE_OWNER | WRITE_DAC, // dwDesiredAccess
0, // dwShareMode
NULL, // lpSecurityAttributes
CREATE_ALWAYS, // dwCreationDisposition
FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
NULL ); // hTemplateFile
Er zijn situaties waarin een back-uptoepassing de instellingen voor toegangsbeheer van een bestand of map moet kunnen wijzigen. Een voorbeeld is wanneer de instellingen voor toegangsbeheer van de schijf-residente kopie van een bestand of map afwijken van de back-upkopie. Dit zou gebeuren als deze instellingen zijn gewijzigd nadat er een back-up van het bestand of de map is gemaakt of als deze is beschadigd.
De FILE_FLAG_BACKUP_SEMANTICS vlag die is opgegeven in de aanroep van CreateFile geeft het back-uptoepassingsproces toestemming om de instellingen voor toegangsbeheer van het bestand of de map te lezen. Met deze machtiging kan het back-uptoepassingsproces vervolgens GetKernelObjectSecurity aanroepen en SetKernelObjectSecurity- om de instellingen voor toegangsbeheer te lezen en opnieuw in te stellen.
Als een back-uptoepassing toegang moet hebben tot de instellingen voor toegangsbeheer op systeemniveau , moet de vlag ACCESS_SYSTEM_SECURITY worden opgegeven in de parameterwaarde dwDesiredAccess die is doorgegeven aan CreateFile.
Back-uptoepassingen roepen BackupRead aan om de bestanden en mappen te lezen die zijn opgegeven voor de herstelbewerking en BackupWrite om ze te schrijven.
Verwante onderwerpen