共用方式為


檔案安全性和訪問許可權

因為檔案是 安全性實體物件,因此存取它們受到訪問控制模型所規範,該模型會控管 Windows 中所有其他安全性實體物件的存取權。 如需此模型的詳細說明,請參閱 存取控制

當您呼叫 CreateFileCreateDirectory 或 CreateDirectoryEx 函式時,您可以指定檔案或目錄的安全性描述元。 如果您為 lpSecurityAttributes 參數指定 NULL,則檔案或目錄會取得預設的安全性描述元。 檔案或目錄的預設安全性描述元中的訪問控制清單 (ACL) 會繼承自其父目錄。 請注意,只有在新建立檔案或目錄時,才會指派預設的安全性描述元,而不是重新命名或移動它時。

若要擷取檔案或目錄對象的安全性描述元,請呼叫 GetNamedSecurityInfo 或 GetSecurityInfo 函式。 若要變更檔案或目錄對象的安全性描述元,請呼叫 SetNamedSecurityInfo 或 SetSecurityInfo 函式。

檔案和目錄的有效訪問許可權包括 DELETE、READ_CONTROL、WRITE_DACWRITE_OWNERSYNCHRONIZE 標準存取許可權。 檔案訪問許可權常數中的數據表會列出檔案和目錄特有的訪問許可權。

雖然 SYNCHRONIZE 存取權是在標準存取權限清單中定義為在其中一個等候函式中指定檔句柄的許可權,但在使用異步檔案 I/O 作業時,您應該等候正確設定的 OVERLAPPED 結構中包含的事件句柄,而不是使用檔案句柄搭配 SYNCHRONIZE 存取權限進行同步處理。

以下是檔案和目錄的 一般訪問許可權

存取權 描述
FILE_GENERIC_EXECUTE
FILE_EXECUTE
FILE_READ_ATTRIBUTES
STANDARD_RIGHTS_EXECUTE
同步
FILE_GENERIC_READ
FILE_READ_ATTRIBUTES
FILE_READ_DATA
FILE_READ_EA
STANDARD_RIGHTS_READ
同步
FILE_GENERIC_WRITE
FILE_APPEND_DATA
FILE_WRITE_ATTRIBUTES
FILE_WRITE_DATA
FILE_WRITE_EA
STANDARD_RIGHTS_WRITE
同步

 

Windows 會比較要求的訪問許可權和線程存取令牌中的資訊,以及檔案或目錄對象的安全性描述元中的資訊。 如果比較並未禁止授與所有要求的訪問許可權,則會將物件的句柄傳回至線程,並授與訪問許可權。 如需此程式的詳細資訊,請參閱 線程與安全性實體對象之間的互動。

根據預設,存取檔案或目錄的授權是由與該檔案或目錄相關聯之安全性描述元中的 ACL 嚴格控制。 特別是,父目錄的安全性描述元不會用來控制任何子檔案或目錄的存取。 您可以從使用者移除BYPASS_TRAVERSE_CHECKING許可權,以強制執行FILE_TRAVERSE訪問許可權。 一般情況下不建議這麼做,因為許多程式無法正確處理目錄周遊錯誤。 目錄上FILE_TRAVERSE存取權的主要用途,是當與 Unix 系統的互操作性是需求時,能夠符合特定 IEEE 和 ISO POSIX 標準。

Windows 安全性模型提供一種方式,讓子目錄繼承或防止繼承父目錄的安全性描述元中的一或多個 ACE。 每個 ACE 都包含決定其繼承方式的資訊,以及它是否會對繼承的目錄物件產生影響。 例如,某些繼承的 ACE 會控制繼承目錄物件的存取權,這些稱為 有效的 ACE。 所有其他 ACE 稱為 僅限繼承 ACE

Windows 安全性模型也會根據 ACE 繼承規則,強制將 ACE 自動繼承至子物件。 這個自動繼承以及每個 ACE 中的繼承資訊,會決定如何將安全性限制傳遞至目錄階層。

請注意,您無法使用拒絕存取的 ACE 只 拒絕GENERIC_READ 或只 GENERIC_WRITE 檔案的存取權。 這是因為對於檔案物件,GENERIC_READ或GENERIC_WRITE的泛型對應都包含 SYNCHRONIZE 訪問許可權。 如果 ACE 拒絕 GENERIC_WRITE 信任項的存取權,而信任者 要求GENERIC_READ 存取,要求將會失敗,因為要求會隱含包含 ACE 隱含拒絕的 SYNCHRONIZE 存取,反之亦然。 不要使用拒絕存取的 ACE,而是使用允許存取的 ACE 來明確允許的存取權。

管理記憶體物件存取的另一種方法是加密。 Windows 中的文件系統加密實作是加密文件系統或 EFS。 EFS 只會加密檔案,而不是目錄。 加密的優點是,它會為媒體上套用的檔案提供額外的保護,而不是透過文件系統和標準 Windows 訪問控制架構。 如需檔案加密的詳細資訊,請參閱 檔案加密

在大部分情況下,讀取和寫入檔案或目錄物件的安全性設定的能力僅限於內核模式進程。 顯然,您不希望任何使用者進程能夠變更私人檔案或目錄的擁有權或存取限制。 不過,如果檔案或目錄上放置的存取限制不允許應用程式的使用者模式程式讀取檔案,備份應用程式將無法完成備份檔案的工作。 備份應用程式必須能夠覆寫檔案和目錄物件的安全性設定,以確保完整備份。 同樣地,如果備份應用程式嘗試透過磁碟常駐複本寫入檔案的備份複本,而且您明確拒絕對備份應用程式程式的寫入許可權,還原作業便無法完成。 在此情況下,備份應用程式必須能夠覆寫檔案的訪問控制設定。

特別 建立了SE_BACKUP_NAMESE_RESTORE_NAME 訪問許可權,以提供備份應用程式的能力。 如果備份應用程式程式的存取令牌中已授與並啟用這些許可權,則可以呼叫 CreateFile 來開啟檔案或目錄以進行備份,並將標準READ_CONTROL訪問許可權指定為 dwDesiredAccess 參數的值 不過,若要將呼叫進程識別為備份進程,對 CreateFile 的呼叫必須在 dwFlagsAndAttributes 參數中包含FILE_FLAG_BACKUP_SEMANTICS旗標。 函數呼叫的完整語法如下:

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

這可讓備份應用程式程序開啟您的檔案,並覆寫標準安全性檢查。 若要還原檔案,備份應用程式會在開啟要寫入的檔案時,使用下列 CreateFile 呼叫語法。

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

在某些情況下,備份應用程式必須能夠變更檔案或目錄的訪問控制設定。 例如,檔案或目錄磁碟常駐復本的訪問控制設定與備份復本不同時。 如果在備份檔案或目錄之後變更這些設定,或檔案或目錄已損毀,就會發生這種情況。

呼叫 CreateFile 中指定的FILE_FLAG_BACKUP_SEMANTICS旗標會提供備份應用程式進程許可權,以讀取檔案或目錄的訪問控制設定。 有了此許可權,備份應用程式程式就可以呼叫 GetKernelObjectSecurity 和 SetKernelObjectSecurity 來讀取,然後重設訪問控制設定。

如果備份應用程式必須能夠存取系統層級訪問控制設定則必須在傳遞至 CreateFiledwDesiredAccess 參數值中指定ACCESS_SYSTEM_SECURITY旗標。

備份應用程式會呼叫BackupRead來讀取為還原作業指定的檔案和目錄,以及BackupWrite來寫入它們。

標準訪問許可權