共享文件系统上的用户(称他为 user01)尝试将文件设置为只能由他读取。我可以输入该目录,并且 ls -l 会生成如下输出:
ls -l
-rwx------ 1 user01 gp 16035 Dec 21 2015 Output.cpp
显然我没有这个文件的读取权限,但我可以复制/读取它! (我不会在这里发布输出,但我可以 emacs/cat/cp 文件并毫无问题地查看内容)作为参考,我什至不是同一组 (gp) 的成员,我应该没有该文件系统的特殊 sudo 权限。
这怎么可能?
答案1
在简单的情况下,对于由本地磁盘上的文件组成的文件系统,文件系统驱动程序 1 根据文件系统格式读取存储在磁盘上的权限元数据(传统的 Unix 用户和组所有权以及 rwxrwxrwx 权限、访问控制列表等),并根据这些权限决定是否授予访问权限。但是,当磁盘上表示和应用程序之间存在更多层时,用于访问控制的权限元数据和通过元数据访问接口报告的权限元数据可能不匹配。
当您运行时ls
,它使用元数据访问接口来显示权限和所有权。当文件系统是远程文件系统时,本地文件系统驱动程序向远程文件系统发送元数据查询。当您尝试使用远程文件系统访问文件时(例如,通过在应用程序中打开文件来读取文件时),本地文件系统驱动程序会向远程文件系统发送读取请求。如果远程文件系统的响应不一致,则两者可能不一致。
当远程文件系统支持本地文件系统不支持的元数据时,远程文件系统的响应可能会不一致。例如,如果远程服务器具有本地客户端没有的帐户,则文件系统无法准确报告元数据。当服务器和客户端运行不同的操作系统(例如Windows服务器和Linux客户端,反之亦然)时,这种情况很常见。
在您的情况下,显然,远程文件系统服务器未按照 user01 所需的方式配置,或者服务器上的权限没有预期的那么严格。例如,可能有一个额外的前交叉韧带授予(某些)远程用户访问权限的条目。如果远程文件系统只能报告 Unix 权限,但不能报告更丰富的 ACL,您会看到一个由用户拥有的文件,没有“组”或“其他”权限,并且所有者不是您,但可能存在授予您权限的 ACL 条目。
1这可以细分为特定类型的文件系统驱动程序和通用层(通常称为虚拟FS),但这取决于系统,所以我故意不在这里进行区分。