複製鏈接
請複製以下鏈接發送給好友

安全描述符

鎖定
包含和被保護對象相關聯的安全信息數據結構。安全描述符包括誰擁有對象,以何種方式訪問以及何種審查訪問類型等信息
中文名
安全描述符
專    業
存儲或傳輸安全描述符
性    質
信息的文本格式
表    示
一個空ACL

安全描述符簡介

安全描述符包含自主決定的訪問控制表(DACL),裏面包含有訪問控制項(ACE),因此可以允許或拒絕特定用户或用户組的訪問。它們還包含一個系統訪問控制列表(SACL)以控制對象訪問請求的日誌(logging)。ACE可以顯式應用於對象,或者從父對象繼承。ACE的順序在ACL中很重要,拒絕訪問的ACE應該比允許訪問的ACE更早出現。安全描述符還包含對象所有者。
強制完整性控制就是通過新類型的ACE在安全描述符上實現。 [1] 

安全描述符字符串格式

安全描述符字符串是一種用來存儲或傳輸安全描述符中的信息的文本格式,應用到SACL的安全描述符控制標記,sacl_flags使用和dacl_flags字符串相同的控制位字符串。描述安全描述符的DACL或SACL包含的一個ACE項的字符串。安全描述符字符串中可以省略不需要的部分,譬如,如果輸入安全描述符中未設置SE_DACL_PRESENT標記,ConvertSecurityDescriptorToStringSecurityDescriptor的輸出字符串中將不包含D:部分。安全描述符字符串不支持NULL ACLs。為表示一個空ACL,安全描述符字符串中包含S:或D:標記而不含其他字符串信息 [1] 

安全描述符應用

文件和文件夾的權限可以使用各種工具編輯,這包括Windows ExplorerWMI,以及命令行工具如Cacls、XCacls、ICacls、SubInACL,免費的Win32控制枱FILEACL,自由實用工具SetACL,以及其他實用工具。要編輯一個安全描述符,用户需要有該對象的WRITE_DAC訪問權限,該權限通常默認授予管理員和該對象的所有者。 [2] 

安全描述符數據結構

typedef struct _SECURITY_DESCRIPTOR {  UCHAR  Revision;  UCHAR  Sbz1;  SECURITY_DESCRIPTOR_CONTROL  Control; //其自身的一些控制位  PSID  Owner; //Owner安全標識符(Security identifiers) 相當於UUID,標識用户、用户羣、計算機帳户  PSID  Group; //Group安全標識符(Security identifiers) 相當於UUID  PACL  Sacl; //(System Access Control List),其指出了在該對象上的一組存取方式(如,讀、寫、運行等)的存取控制權限細節的列表。  PACL  Dacl; //(Discretionary Access Control List),其指出了允許和拒絕某用户或用户組的存取控制列表。 如果一個對象沒有DACL,那麼就是説這個對象是任何人都可以擁有完全的訪問權限。 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;typedef struct _ACL {    BYTE  AclRevision;    BYTE  Sbz1;    WORD   AclSize;    WORD   AceCount;    WORD   Sbz2;} ACL, *PACL;
獲取對象上的安全設置,或修改對象上的安全設置的Windows API。如:GetNamedSecurityInfo, SetNamedSecurityInfo,GetSecurityInfo, SetSecurityInfo。
底層安全描述符函數:
  • 對於文件、目錄、郵槽命名管道,可以使用其專用函數GetFileSecurity和SetFileSecurity函數來獲取或設置文件對象的SD,以設置其訪問權限。
  • 對於進程、線程、訪問token、文件映射對象、信號量事件互斥鎖可等待定時器,使用 GetKernelObjectSecurity與SetKernelObjectSecurity函數
  • 對於Window Station與桌面,使用GetUserObjectSecurity與SetUserObjectSecurity函數
  • 對於註冊表鍵,使用RegGetKeySecurity與RegSetKeySecurity函數
  • 對於Windows服務對象,使用QueryServiceObjectSecurity and SetServiceObjectSecurity函數
  • 對於打印機對象,使用GetPrinter and SetPrinter函數的PRINTER_INFO_2結構參數。
  • 對於網絡共享,使用NetShareGetInfo and NetShareSetInfo 的網絡502級別。
  • 對於進程創建的私有對象,使用CreatePrivateObjectSecurity, DestroyPrivateObjectSecurity, GetPrivateObjectSecurity and SetPrivateObjectSecurity函數 [2] 
參考資料
  • 1.    What Are Security Descriptors and Access Control Lists?. Microsoft. [2008-07-16].
  • 2.    FILEACL v3.0.1.6. Microsoft. 2004-03-23