NTFS 权限 - 创建文件和文件夹但阻止删除和修改

NTFS 权限 - 创建文件和文件夹但阻止删除和修改

目标:用户可以在其中创建文件但不能修改或删除文件的共享文件夹。用户还应能够创建子文件夹。

我已授予我的安全组以下高级 NTFS 权限:

  • 遍历文件夹/执行文件
  • 列出文件夹/读取数据
  • 读取属性
  • 读取扩展属性
  • 创建文件/写入数据
  • 读取权限

通过反复试验,我发现不是授予“写入属性”,这将阻止用户修改/删除现有文件(这正是我想要的)。但是,我真的很想知道为什么这样做有效。我唯一的理论是删除/修改文件会改变文件的属性?以下是类似的讨论

编辑 - 我的问题的第二部分无关紧要,我以为我只选择了“创建文件/写入数据”,但我也选择了“创建文件夹/附加数据”。

此外,我希望用户能够在根目录中创建子文件夹,我发现通过授予“创建文件/写入数据”权限,就可以实现这一点。但同样,名称表明此权限应该只允许创建文件,而不是文件夹,所以我不明白它为什么会起作用?微软对“创建文件/写入数据”属性的解释是“对于文件夹,指定用户是否可以在文件夹内创建文件。对于文件,指定用户是否可以更改文件或覆盖数据。”没有提到在文件夹内创建子文件夹的能力?

所以基本上,我已经实现了我想要做的事情,但不明白它为什么有效?

答案1

通过反复试验,我发现不授予“写入属性”可以防止用户修改/删除现有文件(这正是我想要的)。但是,我真的很想知道为什么这样做有效。

这是一个精确的功能如何发生文件修改。当您修改文件时,操作系统实际上并不会修改您正在编辑的文件。它会用您更改的副本替换您正在编辑的文件。因此,本质上,文件修改会获取原始文件的副本,将其加载到内存中(您修改它的地方),删除原始文件,并在同一位置创建一个具有相同名称的新文件。这就是为什么Delete修改文件需要 NTFS 权限的原因 - 事实上,如果您检查Advanced permissionsNTFS 对象,则没有Modify权限 - 修改实际上只是删除和写入。

因此,为了创建文件的新副本,必须写入此新文件的文件属性……当然,写入属性需要Write attributesNTFS 权限。这就是为什么您无法在没有 NTFS 权限的情况下修改文件的原因Write attributes

具体来说,感谢与 Fitzroy 的聊天, 这NTFS 文件属性需要写入在用户的安全上下文中(没有权限,这是不可能的Write Attributes),在修改文件时,而不是在创建全新文件时,将是文件的。根据 Microsoft Core Team 开发人员之一的说法,LastModificationTime这是属性的一部分Standard Information

答案2

确实如此:没有“写入属性”权限会导致用户无法修改其文件。根据 Microsoft 文档,这毫无道理。但是修改一份文件并不意味着删除并重新创建它。当应用程序打开文件进行修改时,操作系统不会删除该文件。但是,操作系统会锁定文件以防止并发修改。我猜锁定文件属于“更改文件属性”的概念。因此,无法更改属性会导致无法修改文件。

对于您问题的第二部分,我无法重现。有两种不同的权限适用于文件夹:“创建文件/...”和“创建文件夹/...”,它们在我的测试期间根据文档工作。

相关内容