代码之家  ›  专栏  ›  技术社区  ›  David Archer Chris Spicer

是否有API仅在特定文件夹上设置NTFS ACL而不向下流动权限?

  •  1
  • David Archer Chris Spicer  · 技术社区  · 16 年前

    1) 我无法在本地访问这些服务器,因为它们实际上由另一家公司拥有和管理。

    SNAP NAS servers

    解决了这个问题后,我最终滚动了自己的ACL审计报告工具,该工具将从指定的顶级路径开始在文件系统中递归,并将在ACL上遇到的所有组/用户上吐出HTML报告,并在树中显示权限的变化。在开发这个工具时,我发现网络开销是执行这些操作最糟糕的部分,通过多线程处理,我可以实现更高的性能。

    然而,我仍然坚持要找到一个好的工具来执行ACL修改和清理。您的标准开箱即用工具(cacls、xcacls、Explorer)似乎是单线程的,在网络上运行时会受到严重的性能损失。我曾考虑过推出自己的ACL设置程序,该程序是多线程的,但我熟悉的唯一API是。NET FileSystemAccessRule的东西,问题是,如果我在一个文件夹上设置权限,它会自动希望“向下流动”权限。这会导致一个问题,因为我想使用多线程自己进行“流动”。

    1) 是否有一种方法可以设置一个适用于当前文件夹和所有子文件夹的ACL(您的标准“适用于文件、文件夹和子文件夹”ACL),但不会自动向下传递到子对象?基本上,我希望能够告诉Windows“是的,这个ACL应该应用于子对象,但现在,只需直接在这个对象上设置它”。

    2) 有人知道以多线程方式执行ACL修改的任何好的算法或方法吗?我的直觉是,理论上任何对文件系统的递归遍历都应该有效,特别是如果你只是在顶级文件夹上定义一个新的ACL,并且只是想“清理”所有子文件夹。您可以在顶层标记新的ACL,然后向下递归删除任何显式的ACE,然后向下“流动”继承的权限。

    (仅供参考,这个问题是 partially duplicated 来自ServerFault,因为这实际上既是一个系统管理员问题,也是一个编程问题。关于另一个问题,我问是否有人知道任何可以在网络上快速设置ACL的工具。)

    1 回复  |  直到 9 年前
        1
  •  0
  •   David Archer Chris Spicer    16 年前

    在a中找到了答案 MS KB article :

    以及使用Active Directory的文件夹 资源工具包实用程序ADsSecurity。DLL, 不自动向下传播 现有文件夹的子树 以及文件。

    您无法使用ADSI的原因 设置ACE向下传播到现有ACE 文件和文件夹是因为 ADSSecurity.dll使用低级 文件夹上的安全描述符。那里 没有可以使用设置的标志 将ACE向下传播到现有ACE 文件和文件夹。这 SE_DACL_AUTHERIT_REQ控制标志 SE_DACL_AUTO_INHERITED标志 关联的安全描述符 与文件夹。

    因此,我必须使用低级别的SetFileSecurity Win32 API函数(它在 MSDN entry )设置ACL,这应该可以防止它自动向下流动。

    当然,我宁愿用勺子把我的眼球挖出来,也不愿尝试P/Invoke一些遗留的Win32 API及其所有缺点,这样我最终可能只使用一个名为 FILEACL 这与CACLS类似,但可以选择使用SetFileSecurity API,这样更改就不会自动向下传播。