DN distinguished name和DACL SACL的含义(转)
DN-- distinguished name和DACL SACL的含義
很多人雖然會使用dsadd等命令添加用戶,但是dsadd的命令說明里面并沒有涉及到dc,cn,ou的含義,很多人都不明白,這里是微軟的技術支持人員的回信,希望對大家有幫助。
CN,OU,DC都是LDAP連接服務器的端字符串中的區別名稱(DN,distinguished name);
LDAP連接服務器的連接字串格式為:ldap://servername/DN
其中DN有三個屬性,分別是CN,OU,DC
LDAP是一種通訊協議,如同HTTP是一種協議一樣的!
在 LDAP 目錄中。
DC (Domain Component)
CN (Common Name)
OU (Organizational Unit)
An LDAP 目錄類似于文件系統目錄. 下列目錄:
DC=redmond,DC=wa,DC=microsoft,DC=com
如果我們類比文件系統的話,可被看作如下文件路徑:
Com\Microsoft\Wa\Redmond
例如:CN=test,OU=developer,DC=domainname,DC=com
在上面的代碼中cn=test 可能代表一個用戶名, ou=developer 代表一個active directory中的 組織單位。這句話的含義可能就是說明test這個對象處在domainname. com域的developer組織單元中。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
任意訪問控制列表( Discretionary ACL )、系統訪問控制列表( System ACL )。任意訪問控制列表包含了用戶和組的列表,以及相應的權限,允許或拒絕。每一個用戶或組在任意訪問控制列表中都有特殊的權限。而系統訪問控制列表是為審核服務的,包含了對象被訪問的時間
他們都是在sd中的!
什么是sd呢?先來看看安全對象吧
安全對象Securable Object是擁有SD的Windows的對象。
所有的被命名的Windows的對象都是安全對象。一些沒有命名的對象是安全對象,如:進程和線程,也有安全描述符SD。安全對象Securable Object是擁有SD的Windows的對象。
在Windows系統中,其是用一個安全描述符(Security Descriptors)的結構來保存其權限的設置信息,簡稱為SD,其在Windows SDK中的結構名是“SECURITY_DESCRIPTOR”,這是包括了安全設置信息的結構體。一個安全描述符包含以下信息:
? 一個安全標識符(Security identifiers),其標識了該信息是哪個對象的,也就是用于記錄安全對象的ID。簡稱為:SID。
? 一個DACL(Discretionary Access Control List),其指出了允許和拒絕某用戶或用戶組的存取控制列表。 當一個進程需要訪問安全對象,系統就會檢查DACL來決定進程的訪問權。如果一個對象沒有DACL,那么就是說這個對象是任何人都可以擁有完全的訪問權限。
? 一個SACL(System Access Control List),其指出了在該對象上的一組存取方式(如,讀、寫、運行等)的存取控制權限細節的列表。
? 還有其自身的一些控制位。
DACL和SACL構成了整個存取控制列表Access Control List,簡稱ACL,ACL中的每一項,我們叫做ACE(Access Control Entry),ACL中的每一個ACE
Windows訪問控制鏈表
訪問控制鏈表(ACL)
一個ACL是一個ACE鏈表。每個ACL中的ACE標示一個托管以及指定允許的訪問權限、否定或托管的設計。一個對象的安全描述符號包含兩種類型的ACL,一個是DACL,一個是SACL。
一個目錄訪問控制鏈表(DACL)標示允許或拒絕訪問一個安全對象的托管。當一個進程常識訪問一個安全對象的時候,系統檢查對象的DACL中的ACE來決定是否賦予訪問權限。如果對象沒有DACL,系統賦予完全的訪問權限,如果對象的DACL沒有ACE,那么系統拒絕所有訪問對象的嘗試,因為DACL不允許任何訪問權限。系統檢查ACE序列直到找到一到多個ACE,或者直到任何請求的訪問權限被否定。更多的信息參見:DACL怎么樣控制一個對象的。對于創建DACL的信息,見創建一個DACL。
一個系統訪問控制鏈表(SACL)是管理員登錄嘗試訪問一個安全對象。每個ACE指定一個指定的托管嘗試的訪問類型,這個訪問會導致系統產生一個安全事件日志。一個SACL中的ACE能夠產生訪問嘗試失敗或成功的時候產生評估記錄,在將來的release中,一個SACL在一個未授權用戶嘗試訪問一個對象的時候發出一個警告。更多SACL的信息參見Audit Generation和SACL訪問權限。
不要嘗試直接使用一個ACL來工作。為了確保ACL能夠語義正確的,使用適當的函數來創建和操縱ACL。更多的信息參見:從ACL中取得信息和創建或修改一個ACL。
ACL也提供訪問控制微軟的Active Directory目錄服務對象。活動目錄服務接口(ADSI)包括創建和修改ACL內容的程序。更多信息參見:控制訪問活動目錄對象。
ACE
一個訪問控制實體(ACE)是ACL中的一個元素。一個ACL可能包含0到多個ACE。每個ACE通過一個指定的托管來控制或監視一個對象。更多關于添加、刪除、改變ACE,見修改ACL對象。
Window Me/98/95:不支持訪問控制
有6種類型的ACE,三種被所有的安全對象支持,其他類型是對象特定的ACE,由目錄服務對象支持。
所有ACE類型都包含下面訪問控制信息:
1. 一個安全標示符號(SID)來標示ACE應用的托管
2. 一個訪問掩碼指定ACE控制的訪問權限
3. 一個指示ACE類型的標志位
4. 一系列位標志決定是否子容器或對象可以繼承ACE從基本對象到ACL附著的對象。
下表列出了三個所有安全對象支持的ACE類型:
|
Type |
Description |
|
訪問拒絕ACE |
用在一個DACL中拒絕到一個托管的訪問權限 |
|
訪問允許ACE |
用在一個DACL中允許到托管的訪問權限 |
|
系統評估ACE |
用在SACL中,當托管嘗試檢查指定訪問權限時產生一個評估記錄 |
對于對象指定的ACE,參見對象指定ACE。
注意,系統警告ACE對象現在不支持。
托管
一個托管是一個用戶帳戶、組帳戶或登錄會話到一個ACE應用。每個ACL中的ACE都有一個SID來標示托管。用戶帳戶包含人使用的帳戶或程序帳戶(例如,Window服務用來登錄到本地計算機的)。組帳戶不能用來登錄到計算機,但在ACE中非常有用,用來拒絕或允許一到多個用戶帳戶的訪問權限。一個登錄SID表示當前的登錄會話用來允許和拒絕訪問權限,直到用戶登出。
NT4.0和后來版本中訪問控制函數使用TRUSTEE結構體來表示一個托管。這個結構體能使你用一個字符串或一個SID來表示一個托管。如果你使用一個名字,從TRUSTEE結構創建ACE的函數執行SID緩沖區分配工作并且查詢SID對應的帳戶名稱。有兩個助手函數,BuildTrusteeWithSid和BuildTrusteeWithName,可以用SID或名字來初始化一個TRUSTEE結構。BuildTrusteeWithObjectsAndSid和BuildTrusteeWithObjectsAndName允許你使用一個對象指定的ACE信息來初始化一個TRUSTEE結構體。其他3個助手函數,GetTrusteeFrorm、GetTrusteeName和GetTrusteeType,返回TRUSTEE結構各成員的值。
Window XP/2000:TRUSTEE的ptstrName成員可以是一個指向OBJECTS_AND_NAME或OBJECTS_AND_SID結構體的指針。這些結構體說明對象指定ACE的信息,除了托管的名字和SID之外。這可以象SetEntriesInAcl和GetExplicitEntriesFromAcl這樣的函數存儲對象指定ACE的信息到EXPLICIT_ACCESS結構體的Trustee成員中。
TRUSTEE結構體:
typedef struct _TRUSTEE {
PTRUSTEE pMultipleTrustee;
MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
TRUSTEE_FORM TrusteeForm;
TRUSTEE_TYPE TrusteeType;
LPTSTR ptstrName;
} TRUSTEE, *PTRUSTEE;
訪問權限和訪問掩碼
一個訪問權限是一個標志位對應到一個特殊操作集合,這個集合表示線程可以在安全對象上執行的操作。例如:注冊表鍵KEY_SET_VALUE訪問權限,對應到線程在這個鍵下設置的值的能力。如果線程想在一個對象執行一個操作,但沒有必要的訪問權限,系統不執行操作。
一個訪問掩碼是一個32位的值,它對應到對象支持的訪問權限。所有的Windows NT/2000/XP安全對象使用一個Windows訪問掩碼格式,這個格式包含下面的訪問權限位:
1.通用訪問權限
2.標準訪問權限
3. SACL訪問權限
4.目錄服務訪問權限
當一個線程想打開一個對象的句柄,線程通常指定一個訪問掩碼來請求一系列的訪問權限。例如,需要設置和查詢注冊表鍵的程序可以使用一個訪問掩碼來請求KEY_SET_VALUE和KEY_QUERY_VALUE訪問權限來打開該鍵。
下面表顯示了操作每種類型安全對象的信息:
|
對象類型 |
安全描述符號函數 |
|
NTFS上的文件或目錄系統 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
命名管道和匿名管道 |
GetSecurityInfo, SetSecurityInfo |
|
控制臺屏幕緩沖區 |
Not supported. |
|
進程和線程 |
GetSecurityInfo, SetSecurityInfo |
|
文件映射對象 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
Access tokens |
SetKernelObjectSecurity, GetKernelObjectSecurity |
|
Windows管理對象 (windows工作站和桌面) |
GetSecurityInfo, SetSecurityInfo |
|
注冊表鍵 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
Windows服務 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
本地和遠程打印機 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
網絡共享 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
進程間同步對象 (事件, mutexes, semaphores, and waitable timers) |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
|
作業對象 |
GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo, SetSecurityInfo |
通用訪問權限
安全對象使用Windows訪問掩碼格式,四個高位說明通用訪問權限。每個安全對象類型映射到這些位到一系列標準和對象特殊訪問權限。例如:一個Window文件對象映射GENERIC_READ位到READ_CONTROL和SYNCHRONIZE標準訪問權限和FILE_READ_DATA、FILE_READ_EA和FILE_READ_ATTRIBUTES對象指定訪問權限。其他類型對象映射GENERIC_READ位到與類型對象適應的一些訪問權限。
你可以在你打開一個對象句柄的時候使用通用訪問權限來指定需要的訪問類型;這通常比指定所有對應標準和特指權限要簡單。
下表顯示了通用訪問權限定義的常量。
|
常量 |
解釋 |
|
GENERIC_ALL |
讀、寫和執行訪問 |
|
GENERIC_EXECUTE |
執行 |
|
GENERIC_READ |
讀 |
|
GENERIC_WRITE |
寫 |
應用程序定義的私有安全訪問對象能使用通用訪問權限。
安全描述符
安全描述符包含了安全對象相關的安全信息。安全描述父由一個SECURITY_DESCRIPTOR結構體組成,它關聯到一個安全對象。一個安全描述符包含下面的安全信息:
1. 擁有者或基本組對象的安全ID(SIDs)
2. DACL指定特殊用戶或組的允許或拒絕的訪問權限
3. SACL指定對象通用評估記錄嘗試的訪問類型
4. 一個控制位集合,說明安全描述符的含義或它每個成員
程序不需要直接操作安全描述符的內容。Windows API提供設置和返回安全描述符號的函數。另外,有用來創建和初始化一個新對象安全描述符號的函數。
Windows NT 3.51和更早的版本,Windows ME/98/95:參見:低級訪問控制。
工作在活動目錄對象上安全描述符程序能使用Windows的安全函數或ADSI(活動目錄服務接口)提供的安全接口。更多ADSI的信息參見:訪問控制如何在活動目錄中工作?
DACL是怎么控制訪問對象的?
當一個線程想訪問一個安全對象時候,系統要么允許訪問,要拒絕訪問。如果對象沒有DACL,系統賦予訪問權限,否則系統查找DACL中的該線程的ACE。每個對象DACL中的ACE指定托管的訪問允許或拒絕的訪問權限,它可以是一個用戶帳戶、組帳戶或登錄會話。
系統比較ACE中的托管和線程訪問標記的托管標示。一個訪問標記包含SID來說明用戶和用戶輸入的組帳戶。一個標記也包含一個登錄SID,來表示當前的登錄會話。在訪問檢查期間,系統忽略不可用的組SID。更多可用不可用信息以及拒絕SID,見訪問標記中的SID屬性。
通常,系統使用現成餓基本訪問標記來請求訪問。然而,如果現成正在扮演其他用戶,系統使用現成的扮演標記。
系統家產序列中的每個ACE,直到下面的情況發生:
1. 一個顯式拒絕任何與線程訪問標記中列出托管不同的訪問ACE出現
2. 線程訪問標記中列出的一個或多個允許訪問的ACE出現,這個標記顯式賦予所有權限。
3. 所有的ACE都檢查過,并且至少一個訪問權限沒有顯式的允許,這種情況下暗示拒絕。
下圖描述一個DACL對象允許訪問一個線程而拒絕訪
問另一個線程。
對于線程A,系統讀ACE1并且立即拒絕訪問,因為訪問拒絕ACE應用到線程訪問標記中的用戶。這種情況下,系統并沒有檢查ACE2和3。對于線程B,ACE1沒有應用,因此系統處理ACE2,其允許寫操作,并且ACE3允許讀和執行操作。
因為系統在請求訪問并顯式允許或拒絕的時候停止檢查,DACL中的ACE順序非常重要。注意,如果ACE順序與例子中的不同,系統可能分配訪問權限給A。對于系統對象,操作系統定義一個首選的DACL中ACE的順序。
總結
以上是生活随笔為你收集整理的DN distinguished name和DACL SACL的含义(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dwarf2结构在gcc中的应用及调试器
- 下一篇: 牛腩新闻发布系统(一):SQLHelpe