在 NTFS 驱动器中,以前的行为是,当移动文件时,如果移动到同一卷上的文件夹,它将保留原始文件的权限。
我根据经验知道这一点,并且可以从这里看到: https://support.microsoft.com/en-us/kb/310316
但今天我试图向同事展示这种行为,但就是不起作用。每次文件都只会拥有与其关联的新文件夹的权限。
我在 3 台不同的机器上试过了,但还是不行。什么时候变的?不,之前提到的注册表设置没有设置。
知道这是何时发生改变的吗?
[编辑]
仅举一个例子来更清楚
假设我的 C 盘中有这些文件夹。
- C:\共享
- \在职的
- \最终的
我有四个组: - 实习生 - 员工 - 经理 - 职员(包含前 3 个成员)。
现在,让我们考虑权限(简化)。
- C:\共享
- 不继承
- 明确允许管理员完全控制
- 明确允许修改经理
- C:\共享\工作
- 继承自共享
- 明确允许修改员工
- C:\Shared\Final
- 继承自共享
- 明确允许向员工朗读
现在,假设我在工作文件夹中有一个名为 Bullshit.doc 的文件。
以前,如果将文件从工作文件夹移动(剪切/粘贴)到最终文件夹,它将保留原始权限,即经理和员工可以修改,而实习生没有权限。
现在,当我尝试移动 Bullshit.doc 时,它将简单地从 Final 文件夹继承权限,即,它只是原谅实习生无权访问。
我的问题是:这变了,不是吗?还是我疯了?我 99% 确定它就像 KB 中描述的一样工作。
我知道我以前遇到过类似的问题,当上级用户在文件夹之间移动文件(具有不同的权限集)时,然后抱怨实习生无法读取文件。我不得不多次解释说剪切/粘贴不起作用,他们需要复制/粘贴/删除。这肯定是在 Windows 2003 上,但我至少可能是 2008 R2。
[编辑 2] 现在有图片了!!!
好的,所以我决定尝试复制。使用实际文件而不是简单示例。就是这样...
是时候将文件移动到目标位置了。原始文件夹只是一个临时文件夹。让我们检查目标文件夹的权限。
嗯……与我预期的不一样。即使它只是一个文件,从我在上面 KB 中收集到的信息来看,它应该保留权限。这就是我记得它的行为方式。
但似乎情况已经发生了变化。我找不到官方消息来源来说明事情发生的时间。
这让我怀疑我的理智。
答案1
NTFS仍在不断发展和变化。我相信对继承权限处理方式的更改最早出现在 Vista 中,并在 Windows 7 中进一步发展。您链接中的注册表设置源自 XP,因此据我所知,它在较新版本中被忽略。
要了解复制/移动文件时发生的情况,首先必须了解隐式权限和显式权限之间的区别。
隐式权限继承自父文件夹,因此与父文件夹一起存储。它们不与子文件夹一起存储,因此不可移动/复制。换句话说,这些权限仅在子文件夹位于其父文件夹中时适用,因为它们来自父文件夹。
显式权限手动提供给文件夹/文件并存储在 访问控制列表(ACL)作为 NTFS 属性。它们可被视为属于该项目,并且在某些情况下,如果目标文件系统也是 NTFS,则可能随之移动。
NTFS 架构的一些后果是:
- 当文件夹/文件复制,将在目标文件夹的 NTFS 表中创建新的目标条目。因此,复制的文件将失去所有显式权限,并且只会从其新的父文件夹继承。
- 当文件/文件夹移动到同一个体积内,其 NTFS 条目将被移动,并包含所有包含的属性和权限。因此,它将保留所有显式权限,但会失去其旧继承的权限,而获得其新父文件夹的权限。
- 当文件夹/文件在不同卷之间移动,移动将被视为复制,不会保留任何原始权限。与复制的唯一区别是,复制完成后会删除源。
- 仅具有继承权限的文件/文件夹没有移动权限。此类项目将始终从父文件夹继承其权限。
- 文件夹/文件可能被标记为不从其父级继承权限。在这种情况下,其所有权限都作为 ACL 存储,即显式权限。
这与大多数既定的文档相悖,文档通常声称当文件夹/文件在同一卷内移动时,它将保留其原始的 NTFS 权限,包括隐式和显式权限。这在旧版本的 Windows 中可能曾经是真的,但我和发帖人都证实,在 Windows 7 和 Windows 10 中,隐式权限不再如此。
有关错误记录的移动规则的示例,请参阅文章 在 Windows 2008 R2 和 Windows 7 上移动或复制文件时如何处理文件和文件夹权限。这篇文章是我下面与发帖人进行讨论的来源,我们一起发现了 NTFS 中控制复制和移动的真正规则。
答案2
harrymc 的出色而全面的解释还需要补充一个重要细节,这个细节最终导致了分裂行为,即文件移动有时表现为 2003 风格,有时表现为 2008 风格。
2008/Vista 及更高版本中更新的 NTFS 卷内移动方式并不是彻底的改革,而只是在后台添加了第二个步骤。
步骤1)MFT 已更新;文件已移动并保留原始权限
(就像 2003/XP 及更早版本一样。这些操作系统上的移动在此步骤停止。)
第2步)ACL 已更新为删除原始父文件夹的继承权限并应用新父文件夹的继承权限。
(这是 2008/Vista 添加的附加步骤,以便文件具有目标文件夹的权限。)
但是,如果执行此动作的用户有调整权利,并且没有明确拥有更改权限没错,第 2 步将会失败(但不会告诉您),而您最终会采取老式的行为,因此看起来事情又回到了 2003 年。
在相同情况下,如果有人复制文件然后删除原始文件(文件系统处理卷之间移动的方式相同),一切都会按您预期的方式进行。
没有任何优雅的解决方案——你要么给用户更改权限权利如此第2步可以成功,或者在同一文件服务器卷上不同权限文件夹之间移动的任何文件将保留其原始权限,直到被强制重新传播。