全域拒绝ACL不适用?

我在我的实验室testing了一些东西:我创build了一个帐户,然后向该域添加了一个拒绝ACL,并将其应用于所有后代对象,从而拒绝完全控制。 但是,我发现,使用adfind作为被拒绝的帐户,我仍然能够列出用户(但一些属性被隐藏)!

我发现,当仅仅向用户应用拒绝完全控制ACL时,导致用户被隐藏。 但是,inheritance的权限显示并拒绝一切。

为什么inheritance的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访问控制权限,则用户将无法查看任何容器的子对象,这样可以隐藏整个容器的内容。“

事实certificate,明确允许的ACL优先于inheritance的拒绝ACL,并且对于经过authentication的用户在每个对象上都有明确的ACL。 唉; 要做到这一点的唯一方法是剥离需要隐藏的身份validation的用户权限,或者为每个这样的对象添加一个显式的ACL。

这使得禁止用户访问枚举域中的任何东西非常困难,唉。

我知道这是旧的,但也许我的回答会帮助那些需要它在正确的方向(我现在正在经历一个已经实施了AD环境的公司同样的事情)。

内置的Authenticated Users组将被授予读取Active Directory对象的属性的能力,并且优先于从父OU /容器inheritance的显式DENY权限。 这一切都是基于AD最初构build的方式,以及在创build林/域时如何devise权限结构。 阅读这篇文章的更多信息:

隐藏Active Directory中的数据

而这个来自同一系列(关于如何做到这一点)…

隐藏Active Directory中的数据,第3部分:在林中启用列表对象模式

基本上,您可以通过ADSIedit更改dsHeuristics位来启用列表对象模式 (将第三位从0更改为1)。 然后摆脱Authenticated Users (所以它不会自动应用到AD对象)。 那么你的DENY权限将优先。 但是,更改这将导致AD需要更多的时间来评估权限,所以确保这是你想要做的。 对于“平均”领域,延迟是微不足道的。

小心 :另外,请确保这是你想要做的(而且我build议在你第一次构build域时,而不是在它被使用之后做这个)。 除非在第一次创build域时预先执行此操作,否则可能会中断组策略,查询AD的应用程序等。应该预先计划并在域中实施这种types的事情,以便确保适当的权限在应用程序部署时适用于应用程序。 这一切都取决于你希望得到多less粒度,但是如果你在一个已经生产的域上实现它,它可以很容易地破坏一切。