使用 icacls 时 /deny DE,W 出现异常行为

使用 icacls 时 /deny DE,W 出现异常行为

我有以下场景,其中我(admin)对已经从父文件夹继承了修改权限的(DE,W)以下文件夹应用了拒绝权限:test_foldertest_user

B:\>icacls test_folder
test_folder     test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

B:\>icacls test_folder /deny test_user:(DE,W)

B:\>icacls test_folder
test_folder     test_user:(DENY)(W,D)
                test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

我期望的最终结果是test_user能够具有读取/执行访问权限, test_folder但不能删除/重命名该文件夹以及向其中添加文件夹/文件。

但结果是根本test_folder看不到。我仍然可以看到 ( )。test_usertest_folderadmin

然而我否认的DE是:

B:\>icacls test_folder
test_folder     test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

B:\>icacls test_folder /deny test_user:(DE)

B:\>icacls test_folder
test_folder     test_user:(DENY)(D)
                test_user:(I)(OI)(CI)(M)
                admin:(I)(OI)(CI)(M)

test_user能够看到test_folder。因此某种程度上W造成了问题。

知道为什么会发生这种情况吗?

答案1

(W)都是(M)宏;它们扩展为多个实际访问标志。

尤其(W)是像文件_通用_写入授予以下权利:

  • “同步”(S)
  • “写入数据”(WD)
  • “附加数据”(AD)
  • “编写 EA”(WEA)
  • “写入属性”(WA)

“同步”权限相当模糊(甚至没有在 GUI 中显示),但它对于几乎任何类型的文件访问都是必需的——读取和写入都需要它。写作,因此包括在“(R)” 和 “(W)”套。

因此,当您拒绝(W)访问时,您最终也会拒绝“同步”权限,而这是许多程序对文件进行操作所必需的。

微软的文件访问文档还注意到这一点:

请注意,您不能使用拒绝访问的 ACE 来仅拒绝对文件的 GENERIC_READ 或 GENERIC_WRITE 访问。这是因为对于文件对象,GENERIC_READ 或 GENERIC_WRITE 的通用映射都包含 SYNCHRONIZE 访问权限。如果 ACE 拒绝受托者的 GENERIC_WRITE 访问权限,而受托者请求 GENERIC_READ 访问权限,则请求将失败,因为请求隐式包含 SYNCHRONIZE 访问权限,而 ACE 隐式拒绝该访问权限,反之亦然。不要使用拒绝访问的 ACE,而应使用允许访问的 ACE 来明确允许允许的访问权限。

如果必须使用“拒绝”ACE,则需要单独拒绝 (W) 包含的其他四个权限,即(WD,AD,WEA,WA),但请注意,这样的 ACE 往往会使 ACL 编辑工具有些困惑。(许多工具仍会将其折叠为通用的“写入”,您将无法分辨出区别。)

较旧的cacls工具在这里特别有用,因为它不了解许多新的宏/别名,因此向您显示了所有单独的访问权限。或者,PowerShell 的Get-Acl粒度通常太细以至于无法使用,但在这种情况下,它的粒度刚好足够有用:

PS C:\> icacls 测试 /grant “用户:(OI)(CI)(右,左)
PS C:\> icacls 测试 /deny “用户:(OI)(CI)(女)

PS C:\> Get-Acl 测试| fl
使用权 :FOO\user 拒绝写入,同步
         NT AUTHORITY\SYSTEM 允许完全控制
         BUILTIN\Administrators 允许完全控制
         FOO\user 允许读取和执行,同步

PS C:\> cacls 测试  
C:\test FOO\user (OI)(CI)(DENY)(特殊访问:)
                                  同步
                                  文件写入数据
                                  文件附加数据
                                  文件写入_EA
                                  文件写入属性
        FOO\user:(OI)(CI)(DENY)(特殊访问:)
                                  删除
                                  同步
        BUILTIN\管理员:(OI)(CI)F
        NT 权限\系统:(OI)(CI)F

相关内容