无法在属于其组的情况下对具有 640 权限的文件进行 cat 操作

无法在属于其组的情况下对具有 640 权限的文件进行 cat 操作

我花了几个小时试图找出为什么事情出错了,但现在我放弃了,所以我来到这里。

我的设置/问题:我有一个远程 VPS,我通过 SSH(公钥/私钥,无密码)连接到它。
用户是 debian。
在这个 VPS 上,我运行一个postgres:14.3-alpinedocker 容器。

这个docker在/home/debian中挂载了两个卷:
postgres-certs
postgres-data

docker 中用户的用户/组 id 为 70。更多信息这里
您可能知道证书有安全规则,因此,如上面的链接所述,我已将权限 640 设置为postgres-certs文件夹:

drw-r-----  2    0   70 4096 jun  7 22:45 postgres-certs
drwxr----- 19   70 1000 4096 jun 11 20:40 postgres-data

如您所见,两个文件夹都具有组读取权限。
请找到我的组:

debian@db-dev:~$ id
uid=1000(debian) gid=1000(debian) groups=1000(debian),70(docker-pg-alpine),998(docker)

如你所见,我位于第 70 组和第 1000 组中,这两个文件夹中的定义相同
如果我尝试在其中一个文件夹中 cat 一个文件,我会得到以下结果(当然,如果我使用 sudo 的话,它会起作用):

debian@db-dev:~$ cat postgres-certs/server.crt 
cat: postgres-certs/server.crt: Permission denied

只是为了证明该文件具有与他的目录相同的权限:

debian@db-dev:~$ sudo ls -ln postgres-certs/server.crt 
-rw-r----- 1 0 70 2903 jun  7 22:44 postgres-certs/server.crt

是的,我已经注销(断开 ssh,甚至重新启动),我也停止了我的容器以确保它不会造成任何麻烦。
我只是不明白为什么我不能在这些文件夹中 cat 一个文件,而他们有组读取权限并且我在这些组中......
如果你们能找出问题所在,那就太好了。

答案1

要访问文件,您需要x设置目录。

  • 对于文件,如果文件是程序,则 (x) 允许您执行。

  • 对于目录,(x)允许您进入目录并访问文件。


根据手册chmod,(x)允许目录的搜索权限。

字母 rwxXst 为受影响的用户选择文件模式位:读取(r)、写入(w)、执行(或搜索目录)(x)、仅当文件是目录或某些用户已经具有执行权限时才执行/搜索(X)、在执行时设置用户或组 ID(s)、限制删除标志或粘滞位(t)。

根据这个Unix 文件系统文档,(x) 允许您进入目录并访问文件。

对于目录,执行权限允许您进入该目录(即,通过 cd 进入该目录),并访问其中的任何文件。


备查,你可以使用:

sudo chmod g+x ~/postgres-certs

为目录的组添加(x)权限。

但是,您不应该将权限更改为 650,而应该使用:

sudo cat postgres-certs/server.crt

这样您就可以维护目录的默认权限集。

相关内容