尽管文件位于我的组中并且设置了组读取权限,但无法读取该文件

尽管文件位于我的组中并且设置了组读取权限,但无法读取该文件

我在unix/linux机器上遇到一个奇怪的问题:

我是一个组的成员,我们将其称为 A 组,并且某个文件(具有不同的所有者)也属于 A 组。该文件的权限是

-rw-rw----

所以我希望我应该能够打开该文件,但我不能:当我尝试查看文件的内容(使用 cat )时,我会收到“权限被拒绝”错误消息。

既然权限似乎是正确的,那么还有什么可能导致这种情况呢?是否存在“压倒一切”的权限限制?如果是这样,我怎么知道?

答案1

自从您被添加到 A 组后,您是否已注销并重新登录?

如果没有,您当前的登录进程将仅具有登录时的组成员身份,此后不会有任何更改。并且该登录的任何子进程都将具有相同的组成员身份(即,如果您登录到 X,则每个应用程序包括您的终端模拟器和 shell)

您可以通过在另一个控制台或通过 ssh 或类似的方式再次登录来测试这一点exec sudo -u $(id -u -n) -i(有效地杀死当前 shell 并用新 shell 替换 - 属于该 shell 的任何后台进程都将被孤立)

答案2

正如您在评论中指出的,您没有 的读取权限/home/username。但要阅读/home/username/path1/path2/file,你需要执行整个路径的权限。

要对此进行调试,请namei -l /home/username/path1/path2/file以读取该文件的用户身份运行。

答案3

对于 NFS,这取决于您使用哪种安全模式,但在传统模式中,用户所属的组列表由客户端发送到服务器,并且可以发送的组数量有限制(这是16 我上次检查)。

因此,客户说:我的 uid 1234,顺便说一句,我是组 12、13、14 的成员...如果您所在的组超过 16 个,则该列表将被截断,并且会有组服务器不知道您是其中的成员。

这大概就是它的解释。只有本地和/或远程计算机的系统管理员可以通过更改安全模型或 NFS 服务器的设置或减少您所属的组数量来解决此问题。

答案4

您需要对路径的每个部分都有“x”权限

每个部分就像一个房间。要对房间的内容执行某些操作,您必须进入资源管理器(X 权限,如果与单词 explore 相关联,它可能是助记符)

因此,要简单地 cat /a/b/c.txt,您必须在 /、/a 和 /a/b 目录上有 X

然后,您被授权探索 b 房间,并且您必须拥有(在本例中您拥有)文件上的 r 。

我知道这个问题不会添加更多信息,但我希望考试对像我这样的未来 Google 员工有用

相关内容