设置 NTFS 权限以共享根目录中断继承

设置 NTFS 权限以共享根目录中断继承

我在 Windows 2012 R2 中遇到了一个问题,在共享根目录上设置 NTFS 权限会破坏继承,而 NTFS 权限实际上已被新的 ACE 取代。我唯一能说明这一点的方法就是展示我如何重现这个问题。

首先,让我们把份额从等式中去掉——这样一切都正常了。

我在 C:\ 下创建了一个名为 Data 的文件夹。如果我获取当前 ACL,则一切看起来都是正确的。

C:\>icacls c:\data
c:\data NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
    BUILTIN\Administrators:(I)(OI)(CI)(F)
    BUILTIN\Users:(I)(OI)(CI)(RX)
    BUILTIN\Users:(I)(CI)(AD)
    BUILTIN\Users:(I)(CI)(WD)
    CREATOR OWNER:(I)(OI)(CI)(IO)(F)

现在,我要添加一个 ACE——一个非常基本的 ACE。

C:\>icacls c:\data /grant everyone:(RX)
processed file: c:\data
Successfully processed 1 files; Failed processing 0 files

我可以通过重新运行第一个命令来验证这是否有效。

C:\>icacls c:\data
c:\data Everyone:(RX)
        NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
        BUILTIN\Administrators:(I)(OI)(CI)(F)
        BUILTIN\Users:(I)(OI)(CI)(RX)
        BUILTIN\Users:(I)(CI)(AD)
        BUILTIN\Users:(I)(CI)(WD)
        CREATOR OWNER:(I)(OI)(CI)(IO)(F)

到目前为止没有问题。我现在已经删除了 ACE,并使用以下命令将 C:\Data 驱动器共享为数据:

Net share Data=C:\Data /grant:Everyone,full

检查此共享的 ACL,我发现它们与 C:\Data 相同 - 正如它们应该的那样。

C:\>hostname
mgmt57

C:\>icacls \\mgmt57\data
\\mgmt57\data NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
              BUILTIN\Administrators:(I)(OI)(CI)(F)
              BUILTIN\Users:(I)(OI)(CI)(RX)
              BUILTIN\Users:(I)(CI)(AD)
              BUILTIN\Users:(I)(CI)(WD)
              CREATOR OWNER:(I)(OI)(CI)(IO)(F)

再次,我添加与第一个相同的 ACE,但这次添加的是共享。

C:\>icacls \\mgmt57\data /grant everyone:(RX)
processed file: \\mgmt57\data
Successfully processed 1 files; Failed processing 0 files

当我验证 ACL 时,您将看到问题。

C:\>icacls \\mgmt57\data
\\mgmt57\data Everyone:(RX)

Successfully processed 1 files; Failed processing 0 files

本地磁盘上也存在同样的问题。

C:\>icacls c:\data
c:\data Everyone:(RX)

Successfully processed 1 files; Failed processing 0 files

我现在能纠正此 ACL 的唯一方法是选中下面突出显示的框。

数据的高级安全设置

现在,问题是 - 如何在共享的根上使用 ICACLS 而不损坏 ACL,正如我在这里所说明的那样?

我可以确认:

  • 这不是一个服务器的问题——我在许多服务器上都重现了这个问题。
  • 数据中心版和标准版都存在这个问题 - 但我还没有尝试过 Windows 2012 R2 以外的任何其他操作系统。
  • 服务器已完全更新补丁
  • 如果我将 ACE 添加到根目录下的子文件夹(例如,如果我设置 \\server\share\folder 的 ACL),则不会出现此问题,这意味着我当前的解决方法是将 ACL 设置为 \\server\c$\data。注意:此解决方法要求您是相关服务器的管理员,这就是为什么它不是一个解决方案。在我的用例中,设置权限的个人不是管理员,但通过 NTFS 拥有足够的权限来添加新的 ACE
  • 共享权限与问题无关
  • 我上面示例中使用的 NTFS 权限也不相关 - 问题发生在添加到共享根目录的任何 NTFS 权限上。
  • 使用 ICACLS 以外的方法(例如 Powershell 和 Set-ACL)会产生相同的结果
  • 只有继承被破坏 - 分配给根文件夹的其他权限保持不变。例如,如果我添加两个权限,我将同时看到它们,并且所有继承的权限都将消失。
  • 该问题不仅仅是表面上的——如果我将一个我不是其成员的组添加到共享根目录,然后尝试使用 Windows 资源管理器浏览本地等效项,我会收到以下错误:

您目前无权访问此文件夹

抱歉问了这么长的问题,但我想表明我已经付出了很多努力来隔离这个问题。我还没有找到有同样问题的人。

答案1

这是设计使然。如果您尝试使用 Windows 资源管理器设置权限,您将看到以下消息:

Windows 安全

解决方法是唯一的解决方案。

相关内容