【问题标题】:icacls function not overwriting the previous directory permissionsicacls 函数不会覆盖以前的目录权限
【发布时间】:2015-05-18 15:55:13
【问题描述】:

我正在使用以下代码:

icacls C:\testscott\ /grant:r "TestGroup":(NP)F

但是,目录 C:\testscott\ 中的现有权限仍然存在。我认为使用 /grant:r 选项意味着它会覆盖现有权限?

【问题讨论】:

  • 您添加的 ACE 应该 [r] 替换“TestGroup”的现有 ACE,但不会删除继承的权限。我不知道如何将操作与 icacls 结合起来。我会使用3次通行证。复制继承的 ACL 并禁用继承:icacls C:\testscott /inheritance:d。删除“TestGroup”的所有 ACE:icacls C:\testscott /remove "TestGroup"。添加所需的 ACE:icacls C:\testscott\ /grant "TestGroup":(NP)F
  • 请注意,即使这样也不会删除 other 用户和组的现有显式权限。为此,您需要/reset 选项,或使用cacls

标签: windows batch-file permissions folder-permissions icacls


【解决方案1】:

用新分配的权限替换目录上的所有权限:

icacls c:\test /reset
icacls c:\test /inheritance:r /grant Administrators:(OI)(CI)(F)

【讨论】:

  • 我不知道 Scott 是想用显式 ACE 替换仅为 TestGroup 的继承权限,还是替换所有继承的权限。我假设是前者,但我无法在少于 3 次的时间内做到这一点。我很惊讶grant:r 在通过inheritance:d 复制后不起作用。无论哪种方式,我投票结束这个问题作为离题。它属于 superuser.com。
  • 显然在第二次通过时,即使grant:r 不起作用,我也可以将/remove TestGroup/grant TestGroup 组合在一个操作中。但这对我来说似乎是未定义的行为,或者至少是定义不明确的行为。
  • @eryksun:这会使所有批处理问题要么离题要么构思错误,不是吗? :-) Windows 批处理器是为管理任务而设计的,而不是为通用编程而设计的。现在,我个人对批处理编程应该在这里自动偏离主题的主张有一定的同情,但先例另有说明。 :-)
  • @eryksun:是的,但是 icacls 工具是“主要由程序员使用的软件工具”——如果您接受编写批处理脚本就是编程的话。每个人else 只使用 GUI。 (嗯,几乎每个人。)
  • @eryksun:不,在命令行上使用 icacls 不是编程。但是 (a) OP 在批处理脚本中使用它,正在编程; (b) 那是(可能和 IMO)最常见的用例。 (至少对于 windows 标签,我认为既定的先例是在批处理文件中使用命令行实用程序被认为是主题。当然,这仅基于我对先前问题的不可靠记忆。)
猜你喜欢
  • 2015-07-12
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
相关资源
最近更新 更多