Windows 中是否有与 chmod rx (no w access) 等效的命令

Windows 中是否有与 chmod rx (no w access) 等效的命令

我一直在尝试使用 Windows 10伊卡克尔斯实用程序来执行此操作。我在这里进行了一些搜索,我发现,但这不是我的具体问题。我尝试为这个问题添加评论,但我没有足够的声誉。

作为 Windows 10 Professional 计算机上的管理员,我想阻止本地用户删除可执行程序,同时仍提供可执行访问权限(如 Linux chmod rx 命令)。我已将文件所有者设置为管理员。我一直在尝试使用该实用程序实现这一点,如下所示。

对于指定的(非管理员)用户,以下所有操作都会阻止文件被删除,但也会禁用可执行访问权限

  • icacls /拒绝用户:W
  • icacls /拒绝用户:M
  • icacls /拒绝用户:(D)
  • icacls /拒绝用户:(WO)
  • icacls /deny user:F 后跟 /grant user:(RX)

以下允许可执行访问,但也允许删除文件

  • icacls /拒绝用户:(WDAC)

我尝试做的事情是否可行?似乎可执行文件和写入访问权限相同?

答案1

是的,有可能——就是这样所有系统可执行文件已设置。您可以执行 notepad.exe,但无法写入,因为您只被授予(RX)该文件的权限。

但你的每一次尝试都是错误的,因为你假设/deny删除了权限位。这不是它所做的——它明确否认,Linux 文件模式中不存在这一概念。ACL 中的显式“拒绝”条目始终比“允许”条目具有更高的优先级,因此在授予F用户 /denied(完全控制)权限后,任何 /grant 权限都无法覆盖该权限。

(Unix 文件模式甚至 POSIX ACL 都是独有的 - 要么你被授予“所有者”权限或者“组”权限,但不能同时授予两者——因此删除和拒绝权限之间没有区别。但是,Windows 样式的 ACL 是附加的,因为您被授予授予您匹配的所有 SID 的所有权利,因此需要有一个“明确拒绝”来覆盖更广泛的授权。)

现在理论上/deny Foo:W仍会执行您想要的操作(即使这不是正确的方法)。但由于一些历史设计问题,WM宏(每个宏都扩展为几个不同的权限位)不能在“拒绝”ACE 中使用因为它们略有重叠R(在同步右侧,这很模糊,许多工具甚至不会显示它)。另一篇文章的评论有更长的解释。

做你想做的事的正确方法是移除从所有访问条目中删除不需要的权限,而不是添加拒绝。遗憾的是,icacls 缺少从条目中清除或“取消授予”特定权限的选项,因此您必须删除/remove授予过多权限的整个条目,然后重新授予/grant相同用户或组的读取/执行权限。

例如,如果您的目录已授予(例如)“用户”组读写权限,那么您需要/remove Users在后面跟上/grant Users:(OI)(CI)(RX)


还请记住,重命名或删除文件不一定是文件本身的权利 - 它是父目录,通过“写入”文件列表(即...目录)来重命名文件。

因此,为了使您的保护有用,它需要在目录本身上定义(并由文件继承) - 尝试限制目录中的单个项目的写操作是没有意义的,仍然允许每个人将这些项目移到一边并用新项目替换它们。

答案2

我想我找到答案了。解释这里

这可以防止 exe 文件被删除或修改,并授予其对本地目录的读/写访问权限。

概括:

  • icacls 目录/继承:d /grant:r 用户:(OI)(IO)
  • icacls 目录/删除:g 用户/C
  • icacls 目录/删除:d 用户/C
  • icacls 目录/grant:r 用户:(RX)
  • icacls 目录 /deny 用户:(DE)
  • cd 目录
  • icacls exe-file /inheritance:d /grant:r "用户:(OI)(IO)"
  • icacls exe-file /remove:g "用户"
  • icacls exe-file /remove:d "用户"
  • icacls exe-file /grant:r "用户:(RX)"
  • icacls exe-file /deny "用户":(DE)

不像 chmod 7555 那么简单 ;<)

相关内容