可能是 (Unix/Linux 中设置的文件权限在 Windows 或任何其他操作系统中有效吗?) 但...
假设我们有一个文件(最好在 Linux/Unix 操作系统中,但我相信这也适用于 Windows)。
据我所知,文件权限保留在文件本身内,最终写入文件的某些位。
现在假设我设置了一个只读文件 ( chmod 744
),当连接到我的“主机”操作系统的另一个用户打开它并尝试写入它时,操作系统是否检查文件的权限信息(其中的实际位)并决定要执行什么操作接下来做什么?
如果是这样,被阻止执行这些检查的“定制”操作系统是否能够实际访问它?
答案1
据我所知,文件权限保留在文件本身内,最终写入文件的某些位。
他们不是。文件权限,如所有者、组和其他人的所有权和读、写或执行权限,不是文件的一部分,而是文件系统的一部分。文件名也是如此。如果传输文件,权限不会隐式传输,而是执行这些操作的应用程序也必须做出特定的努力来传输这些元信息。
有关文件的这些元信息由操作系统中的文件系统层解释,并且仅由操作系统强制执行。因此,可以通过使用修改后的操作系统,有时甚至通过使用特殊选项挂载文件系统来绕过它们。
如果您确实想保护文件的内容,那么您需要对其进行加密。
答案2
是的,只是操作系统强制执行文件权限。
请记住,物理磁盘驱动器只为操作系统提供了一大块内存供读写。操作系统的工作是将这个大块分成单独的文件。从逻辑上讲,文件上的任何权限都只能由操作系统强制执行。
如果您拔下磁盘并将其放入另一台机器中,它就可以用它做任何事情。它可以完全忽略所有文件权限。实际上,在 Linux 中挂载磁盘非常容易,从而忽略实际权限。
这就是为什么保护磁盘的唯一方法是对其进行加密。通过加密,您可以防止另一台机器完全理解磁盘上写入的内容,从而防止另一台机器更改内容(除了擦除它并重新启动)。
据我所知,文件权限保留在文件本身内,最终写入文件的某些位。
这在技术上是不正确的。它们存储在文件的元数据中,而不是其内容中。但你的想法是正确的:权限与文件打包在同一文件系统上,不受其他地方控制。
答案3
操作系统最终决定是否实施访问控制。对于网络文件系统,服务器通常强制执行权限。
如果文件系统位于操作系统具有完全访问权限的本地磁盘上,则正在运行的操作系统可以执行有关权限的任何操作。在极端情况下,直接写入原始设备而不是通过文件系统访问文件。
如果文件位于远程文件系统上,服务器通常会强制执行访问控制。即使客户端决定忽略已知权限(例如尝试写入只读文件),服务器也可以决定不执行该操作并返回错误。