我在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 员工有用