在我们的网络共享上,存在各种损坏的权限继承。
仅举一例:文件夹“D:\Shares\PublicRelations”对组“PublicRelations”和“HR”具有完全访问权限(均设置了完全继承)。但是文件夹“D:\Shares\PublicRelations\SomeTopic”缺少组“HR”的继承权限,尽管继承处于活动状态。
可能发生这种情况,当有人将“HR”添加到顶部文件夹并且由于某种原因传播失败时。
是否有任何工具可以自动修复此类问题?
理想情况下,我只需使用参数“D:\Shares”调用它即可。然后它将遍历所有目录并在必要时修复所有继承的权限。
答案1
icacls <folder> /t /reset
将使用默认的可继承权限重置所有权限。
答案2
我最终用 C# 编写了代码:
- 获取SeBackupPrivilege和SeRestorePrivilege(允许用户在任何地方读写)。
- 重写路径以使 Windows 处理长文件名(对于本地路径:前缀@“\\?\”)
- 遍历目录树
- 对于每个元素加载 ACL
- 添加一条显式规则,然后再次将其删除。这会诱使库认为 ACL 已更改。
- 编写 ACL
- IO 库将在写入不变的 ACL 时修复继承问题。
我还实现了一个检查,看看是否需要修复。但要让它可靠地运行需要做一些工作:
- 您需要正确解释传播和继承标志。
- 有时,权限会在下行过程中合并,有时则不会。最后,我只是检查了它们的含义是否相同。
- 处理特殊权限“GENERIC_(READ|WRITE|EXECUTE|ALL)”
它在 100 万个文件共享中发现并修复了大约 40,000 个错误。