最近,我和一位存储专家合作了一个项目,该项目涉及对公司多年来使用的大型文件共享进行审查。我们经常会遇到目录或文件无法访问的情况(使用域管理员帐户),原因如下:
- 损坏的 ACL
- 管理员组(或系统用户)的访问权限已被撤销或拒绝
- 文件名 + 路径太长(超过最大路径)
有一些工具可以帮助解决这些情况,来自微软(例如 TAKEOWN.EXE 和 ICALCS.EXE)或第三方(例如执行文件)。有时还需要其他技巧,例如在 SYSTEM 帐户下运行以下命令之一:执行程序。甚至只是弄清楚要做什么步骤以及按照什么顺序做都是一个挑战......
例如,我希望能够使用如下流程来解决问题:
- 路径是否太长?如果是,则使用前缀构建路径
\\?\
,然后再次测试。 - ACL 是否已损坏?如果是,请正确重新排序 ACE 并删除所有未知项,然后再次测试。
- 管理员组是否被拒绝访问?如果是这样,请取得所有权,重新添加管理员组和系统帐户的权限,然后再次测试。
- 是否仍然失败?如果失败,请删除所有 ACE 并仅应用继承的权限,然后再次检查。(这有点像最后的手段,因为它经常会打开原本更严格的权限。)
- 它是目录吗?如果是,则该过程需要对其中的文件继续递归...
手动执行上述步骤非常麻烦,而且当我们有数百个目录需要修复时,这样做也不合理。我曾尝试编写脚本来协助完成这些工作,但发现很难让脚本“聪明”地做出决定,因此通常更容易采用一种粗略的修复方法,例如仅恢复继承的权限。
有人能推荐其他有助于此过程的软件和/或脚本吗?或者,您如何解决此类权限问题?
答案1
我建议使用文件访问控制- 它能够使用 SeBackupPrivelege 设置 ACL,因此不需要您运行命令的用户拥有更改给定对象的 ACL 的权限。此外,它本身支持 NTFS-5 后的继承功能,并且易于编写脚本,因此使用一些包装脚本逻辑,它应该可以满足您的要求。