当我将文件从一个位置复制到另一个位置时,目标位置会保留原始权限还是会采用复制的文件的权限?
答案1
在 Windows 中,默认情况下,复制的文件不会保留明确设置的权限。例如,文件 C:\Temp\temp.txt 为某个用户明确设置了写入权限,但其复制实例上不会有此权限。
复制的实例将获得适用于其新路径的任何继承权限。例如,当 temp.txt 被复制为 temp2.txt 时,C:\Temp 上的任何继承权限仍将适用。
因此,对您的问题最接近的答案是该文件将获得“所复制文件的权限”。
答案2
如果您要制作新副本,它将继承目标文件夹的 ACL。有一个隐藏的 Explorer 设置,ForceCopyAclwithFile
它会告诉它也要复制 ACL。
一些模糊相关的文章:
- http://blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
- http://blogs.msdn.com/b/oldnewthing/archive/2013/09/24/10451467.aspx
- http://blogs.msdn.com/b/oldnewthing/archive/2015/10/14/10647632.aspx
一方面,您的问题的标题 – “Windows 安全设置是在文件上还是在位置上?” – 没有任何意义。
如果设置在文件上,并不意味着它们会被复制自动地。如果设置是在某个位置,这并不意味着它们不能被复制。实际上,复制函数首先复制内容,然后调整时间戳,然后复制 ACL……
另一方面,重要的是其他除了 ACL 之外的安全机制,例如强制访问控制,如 SELinux 或 AppArmor(均在 Linux 上)。也就是说,SELinux 将 MAC 信息附加到文件,并在重命名文件时保留该信息;而 AppArmor 规则是基于文字路径编写的,无论存在什么文件。