我对整个 Windows 文件安全方案有些困惑。我有 unix 背景,所以我不完全理解文件权限/安全设置与属性之间的关系;特别是文件可以具有的只读属性。
例如,如果我以管理员身份登录到我的电脑,并且我有一个允许管理员完全控制的文件,但设置了只读属性,这意味着我无法写入该文件?除了删除只读属性之外,还有其他方法可以写入我本应完全控制的文件吗?如果没有,那么如果您实际上没有完全控制权,那么拥有完全控制权有什么好处?
答案1
文件权限决定了您对文件的访问权限 - 顾名思义。完全控制允许您创建、删除、附加、更改权限、更改属性等。
文件和文件夹可以具有附加属性,就像大多数 *nix 文件系统上的文件一样。在两个平台上,“隐藏”就是一个例子。
在 Windows 上,一些附加属性包括系统、只读、存档、加密和压缩。当您拥有完全控制权(或修改权)时,您可以更改这些属性,但正如您所发现的,只读文件就是只读的,即使对于拥有完全控制权的人来说也是如此。虽然完全控制权使您能够更改文件的属性,但它不会自动覆盖它们,就像ls
在 *nix 上默认不向 root 用户显示隐藏文件一样。
答案2
权限是一种安全控制。无论哪个安全主体尝试执行操作,属性都会适用。
属性远多于您在命令提示符中看到的属性。这些属性包括文件是否为链接、是否加密、目录(一种文件类型)以及完整性(低、中或高)。
文件属性常量
http://msdn.microsoft.com/en-us/library/windows/desktop/gg258117%28v=vs.85%29.aspx
FILE_ATTRIBUTE_ARCHIVE
32(0x20)作为存档文件或目录的文件或目录。应用程序通常使用此属性来标记要备份或删除的文件。
FILE_ATTRIBUTE_COMPRESSED
2048(0x800)压缩的文件或目录。对于文件,文件中的所有数据都经过压缩。对于目录,压缩是新创建的文件和子目录的默认设置。
FILE_ATTRIBUTE_DEVICE
64(0x40)此值保留供系统使用。
FILE_ATTRIBUTE_DIRECTORY
16(0x10)标识目录的句柄。
FILE_ATTRIBUTE_ENCRYPTED
16384(0x4000)已加密的文件或目录。对于文件,文件中的所有数据流都已加密。对于目录,新创建的文件和子目录默认加密。
FILE_ATTRIBUTE_HIDDEN
2 (0x2) 文件或目录已隐藏。它不包含在普通目录列表中。
FILE_ATTRIBUTE_INTEGRITY_STREAM
32768(0x8000)目录或用户数据流配置了完整性(仅在 ReFS 卷上受支持)。它不包含在普通目录列表中。如果文件被重命名,完整性设置将保留在文件中。如果复制了文件,则如果源文件或目标目录已设置完整性,则目标文件将具有完整性设置。
Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:在 Windows Server 2012 之前不支持此标志。
FILE_ATTRIBUTE_NORMAL
128(0x80)未设置其他属性的文件。此属性仅单独使用时有效。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
8192(0x2000)该文件或目录不会被内容索引服务索引。
FILE_ATTRIBUTE_NO_SCRUB_DATA
131072(0x20000)后台数据完整性扫描器(又称为清理器)不会读取用户数据流。在目录上设置时,它仅提供继承。此标志仅在存储空间和 ReFS 卷上受支持。它不包含在普通目录列表中。
Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:在 Windows 8 和 Windows Server 2012 之前不支持此标志。
FILE_ATTRIBUTE_OFFLINE
4096(0x1000)文件数据并非立即可用。此属性表示文件数据已物理移动到离线存储。此属性由远程存储(分层存储管理软件)使用。应用程序不应随意更改此属性。
FILE_ATTRIBUTE_READONLY
1(0x1)只读文件。应用程序可以读取该文件,但不能写入或删除它。目录不支持此属性。有关详细信息,请参阅您无法在 Windows Server 2003、Windows XP、Windows Vista 或 Windows 7 中查看或更改文件夹的只读或系统属性。
FILE_ATTRIBUTE_REPARSE_POINT
1024(0x400)具有关联重新解析点的文件或目录,或者作为符号链接的文件。
FILE_ATTRIBUTE_SPARSE_FILE
512(0x200)稀疏文件。
FILE_ATTRIBUTE_SYSTEM
4(0x4)操作系统使用部分或独占的文件或目录。
FILE_ATTRIBUTE_TEMPORARY
256(0x100)用于临时存储的文件。如果有足够的缓存内存,文件系统会避免将数据写回大容量存储,因为应用程序通常会在句柄关闭后删除临时文件。在这种情况下,系统可以完全避免写入数据。否则,数据会在句柄关闭后写入。
FILE_ATTRIBUTE_VIRTUAL
65536(0x10000)此值保留供系统使用。
答案3
我将给出一个更长的答案,但一般来说,您所指的属性是 DOS FAT 文件系统时代的文件遗留设置。FAT 将这些属性存储为文件的文件系统目录条目的一部分。NTFS 有自己的一组属性,这些属性封装了较旧的属性。默认情况下,任何具有文件访问权限的用户都可以修改它们,并可用于防止意外覆盖数据。
权限是 NTFS 特有的,这些权限的更改可以根据每个用户进行控制(因此用户不能从只读更改为可写)。具体来说,如果您查看 attrib 命令(它显示了旧版和新添加的属性,如 Windows 更高版本中的完整性),则可以在权限中设置只读访问权限,但在属性中不设置只读。同样有趣的是(如果不是很重要的话),由于抽象,从技术上可以启用旧版属性(存储在 $standard_information NTFS 属性中),而不必在正常 GUI 中显示它们。
具体来说,完全控制权限允许您更改任何 NTFS 权限。设置只读属性可防止更改,除非将其删除。
在 Windows 下,FAT 属性将优先于 NTFS 属性。