我在我的实验室里测试了一些东西:我创建了一个帐户,然后向域添加了一个拒绝 ACL,应用于该域和所有后代对象,拒绝完全控制。但是,我发现使用 adfind 作为被拒绝的帐户,我仍然能够列出用户(但一些属性被隐藏了)!
我发现仅对用户应用拒绝完全控制 ACL 会导致用户被隐藏。但是,继承的权限显示并似乎拒绝一切。
为什么继承的 ACL 不足以阻止用户列表?
本例中的平台是windows server 2008 R2。
我在我的实验室里测试了一些东西:我创建了一个帐户,然后向域添加了一个拒绝 ACL,应用于该域和所有后代对象,拒绝完全控制。但是,我发现使用 adfind 作为被拒绝的帐户,我仍然能够列出用户(但一些属性被隐藏了)!
我发现仅对用户应用拒绝完全控制 ACL 会导致用户被隐藏。但是,继承的权限显示并似乎拒绝一切。
为什么继承的 ACL 不足以阻止用户列表?
本例中的平台是windows server 2008 R2。
用户可以查看容器的所有子对象,除非他们在容器上被拒绝查看子对象的权限。
控制对象可见性
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675746%28v=vs.85%29.aspx
“Active Directory 域服务提供了向被拒绝某些权限的用户隐藏对象的能力。如果对象被隐藏,则使用用户凭据运行的应用程序将无法枚举或绑定到该对象。
“如果用户被授予对容器的 ADS_RIGHT_ACTRL_DS_LIST 访问控制权限,则用户可以查看容器的任何子对象。同样,如果用户被拒绝对容器的 ADS_RIGHT_ACTRL_DS_LIST 访问控制权限,则用户无法查看任何子对象容器的子对象。这允许隐藏整个容器的内容。”
事实证明,显式允许 ACL 优先于继承的拒绝 ACL,并且每个对象上都有用于经过身份验证的用户的显式 ACL。唉; 做到这一点的唯一方法是剥夺经过身份验证的用户对需要隐藏的任何内容的权限,或者为每个此类对象添加显式 ACL。
唉,这使得拒绝用户访问以枚举域中的任何内容变得异常困难。
我知道这已经过时了,但也许我的回答会帮助那些需要它的人指明正确的方向(我现在正在与一家已经实施 AD 环境的公司一起经历同样的事情)。
内置的Authenticated Users组将被授予读取 Active Directory 对象属性的能力,这将优先于从父 OU / 容器继承的显式 DENY 权限。这都是基于AD最初的构建方式以及创建林/域时权限结构的设计方式。阅读这篇文章了解更多信息:
在 Active Directory 中隐藏数据
而这个来自同一系列(关于如何做)......
在 Active Directory 中隐藏数据,第 3 部分:在林中启用列表对象模式
基本上,您可以通过 ADSIedit 更改 dsHeuristics 位来启用列表对象模式(将第 3 位从 0 更改为 1)。然后摆脱经过身份验证的用户(这样它就不会自动应用于 AD 对象)。那么您的 DENY 权限将优先。但是,更改此设置将导致 AD 需要更多时间来评估权限,因此请确保这是您想要执行的操作。对于“平均”域,延迟可以忽略不计。
注意:另外,请双重确定这是您想要执行的操作(我建议您在首次构建域时执行此操作,而不是在使用域之后执行此操作)。除非您在首次创建域时预先执行此操作,否则您可能会破坏组策略、查询 AD 的应用程序等。此类事情应预先计划并在域上实施,以确保获得适当的权限应用程序在部署时就可以正常工作。这完全取决于您想要获得的粒度,但如果您在已经投入生产的域上实施它,它很容易破坏一切。