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