![“复制目录更改”在 Active Directory 中实际上授予什么权限?](https://linux22.com/image/548130/%E2%80%9C%E5%A4%8D%E5%88%B6%E7%9B%AE%E5%BD%95%E6%9B%B4%E6%94%B9%E2%80%9D%E5%9C%A8%20Active%20Directory%20%E4%B8%AD%E5%AE%9E%E9%99%85%E4%B8%8A%E6%8E%88%E4%BA%88%E4%BB%80%E4%B9%88%E6%9D%83%E9%99%90%EF%BC%9F.png)
我们需要授予服务 ID 将目录更改复制到 Active Directory 的权限。人们担心我们可能会意外让服务 ID 在 Active Directory 中写入数据,或者有人滥用服务 ID 并更改 Active Directory 数据。
有人知道“复制目录更改”的权利是什么吗?
答案1
http://support.microsoft.com/kb/303972
注意:无论使用哪种方法,为林中的每个域设置“复制目录更改”权限都可以发现 Active Directory 林中域中的对象。但是,启用连接目录的发现并不意味着可以执行其他操作。
要使用非管理帐户在 Active Directory 中创建、修改和删除对象,您可能需要根据需要添加其他权限。例如,要让 Microsoft Metadirectory Services (MMS) 在组织单位 (OU) 或容器中创建新的用户对象,必须明确授予正在使用的帐户“创建所有子对象”权限,因为“复制目录更改”权限不足以允许创建对象。
类似地,删除对象需要删除所有子对象的权限。
其他操作(例如属性流)可能会受到限制,这取决于分配给相关对象的特定安全设置,以及继承是否是一个因素。
答案2
现有的答案不能满足我的好奇心,我也不想让人们从我的目录中得到超出他们需要的信息。所以我做了更多的挖掘。
主要信息在这里:
http://support.microsoft.com/kb/891995
分解:
如果您想将程序的数据库与 AD(如 sharepoint/FIM)同步,您有两种方法可以询问 AD 自上次查询以来发生了什么变化。
您可以使用“DirSync”控件(LDAP 协议扩展)或者您可以去贫民窟并只使用 uSNChanged 轮询 - 但那里有限制。
“DirSync 控制搜索将返回对 Active Directory 对象所做的所有更改,而不管该对象上设置的权限如何。”它甚至会返回逻辑删除的对象。
因此,要使用 DirSync LDAP 控件,您需要“复制目录更改”,或者成为域管理员。
据我所知,唯一可怕的是,他们几乎可以读目录分区中的任何内容,无论标准权限如何。它们不能变任何事物。
但是 - 您的目录中可能有一些敏感的属性。
有关 DirSync 控制扩展的更多信息,请参见此处:
https://msdn.microsoft.com/en-us/library/ms677626(v=vs.85).aspx
真实测试:使用 DirSync 控件连接到 AD
这是您可以自己找到的真正方法。这个人就是那个男人。如果您想亲自看看 - 改编此 powershell 示例,以您授予权限的用户身份运行它,并查询用户对象(或其他内容)。
http://dloder.blogspot.com/2012/01/powershell-dirsync-sample.html
我检查了我们的 Sharepoint 帐户,看看我能得到什么。在我授予权限之前,我在尝试使用 DirSync 控件时遇到了访问被拒绝异常。
一旦我这样做了,我就可以恢复用户帐户中的几乎所有内容:
用户查询中返回的值得注意的安全相关属性,我很确定如果没有提升的权限您通常无法看到这些属性:
- 用户帐户控制
- 用户参数
- msexchuseraccountcontrol
- 最后密码设置
- unicodePwd(空白。因此不返回散列域密码)
- 锁定时间
- 账户到期
- unix用户密码(哎呀。如果你正在使用这个 - 它是可见,但已散列。如果您有疑虑,请阅读此处或使用 unix 密码同步服务。)
我还检查了一个附加有 bitlocker 恢复密码的计算机帐户,但该属性在返回的结果中不可用。
如果您的环境中曾有 Unix 服务并同步过密码,那么您可能在此处有剩余数据。我们的一位长期用户在其帐户中设置了此密码。破解此密码后,只需尝试更改密码即可获得当前密码,这是可行的。
这已从我们的环境中删除,因此新用户在这里没有任何数据。
答案3
事实上,“复制目录更改”权限并不授予 DCPROMO 权限,也不可能使用此权限来拉回用户密码的散列值。
为了获得用户密码哈希的访问权限,必须授予“复制目录更改全部更多信息请参见https://social.technet.microsoft.com/Forums/windowsserver/en-US/cc72be66-30c4-420e-8de3-9085858037bc/difference-between-replicating-directory-changes-replicating-d
答案4
如果它对某人有帮助,我重写了引用的脚本来查询当前机器所在域之外的单独域:
Add-Type -AssemblyName System.DirectoryServices.Protocols
#defaults
$RootDSE = [ADSI]"LDAP://RootDSE"
$dcHostName = $RootDSE.dnsHostName
$distinguishedName = $RootDSE.defaultNamingContext
#or use the lines below for another DC on another domain
$dcHostName = "dc1.contoso.local"
$distinguishedName = (Get-ADDomain "contoso.local").DistinguishedName
$LDAPConnection = New-Object System.DirectoryServices.Protocols.LDAPConnection($dcHostName)
$Request = New-Object System.DirectoryServices.Protocols.SearchRequest($distinguishedName, "(objectclass=*)", "Subtree", $null)
$DirSyncRC = New-Object System.DirectoryServices.Protocols.DirSyncRequestControl($Cookie, [System.DirectoryServices.Protocols.DirectorySynchronizationOptions]::IncrementalValues, [System.Int32]::MaxValue)
$Request.Controls.Add($DirSyncRC) | Out-Null
$MoreData = $true
while ($MoreData) {
$Response = $LDAPConnection.SendRequest($Request)
$Response.Entries | ForEach-Object {
write-host $_.distinguishedName
}
ForEach ($Control in $Response.Controls) {
If ($Control.GetType().Name -eq "DirSyncResponseControl") {
$Cookie = $Control.Cookie
$MoreData = $Control.MoreData
}
}
$DirSyncRC.Cookie = $Cookie
}