簡介
安全描述符包含自主決定的訪問控制表(DACL),裡面包含有訪問控制項(ACE),因此可以允許或拒絕特定用戶或用戶組的訪問。它們還包含一個系統訪問控制列表(SACL)以控制對象訪問請求的日誌(logging)。ACE可以顯式套用於對象,或者從父對象繼承。ACE的順序在ACL中很重要,拒絕訪問的ACE應該比允許訪問的ACE更早出現。安全描述符還包含對象所有者。
強制完整性控制就是通過新類型的ACE在安全描述符上實現。
字元串格式
安全描述符字元串是一種用來存儲或傳輸安全描述符中的信息的文本格式,套用到SACL的安全描述符控制標記,sacl_flags使用和dacl_flags字元串相同的控制位字元串。描述安全描述符的DACL或SACL包含的一個ACE項的字元串。安全描述符字元串中可以省略不需要的部分,譬如,如果輸入安全描述符中未設定SE_DACL_PRESENT標記,ConvertSecurityDescriptorToStringSecurityDescriptor的輸出字元串中將不包含D:部分。安全描述符字元串不支持NULL ACLs。為表示一個空ACL,安全描述符字元串中包含S:或D:標記而不含其他字元串信息。
套用
檔案和資料夾的許可權可以使用各種工具編輯,這包括Windows Explorer、WMI,以及命令行工具如Cacls、XCacls、ICacls、SubInACL,免費的Win32控制台FILEACL,自由實用工具SetACL,以及其他實用工具。要編輯一個安全描述符,用戶需要有該對象的WRITE_DAC訪問許可權,該許可權通常默認授予管理員和該對象的所有者。
數據結構
獲取對象上的安全設定,或修改對象上的安全設定的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函式