當屬於其群組時,無法使用 640 權限管理文件

當屬於其群組時,無法使用 640 權限管理文件

我花了幾個小時試圖找出為什麼事情進展不順利,但我現在放棄了,所以我就在這裡。

我的設定/問題:我有一個透過 SSH 連線的遠端 VPS(pub/priv 金鑰,無密碼)。
用戶是 debian。
在這個 VPS 上,我運行一個postgres:14.3-alpinedocker 容器。

該 docker 在 /home/debian 中安裝了兩個磁碟區:
postgres-certs
postgres-data

docker中使用者的使用者/群組id是70。這裡
您可能知道有關憑證的安全性規則,因此,如上面連結中所述,我已將權限設定為postgres-certs資料夾 640:

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 中,這兩個資料夾中的定義相同
如果我嘗試在這些資料夾之一中查找文件,這就是我得到的結果(如果我執行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 連接,甚至重新啟動),我還停止了我的容器以確保它不會造成任何麻煩。
我只是不明白為什麼我不能在這些文件夾中找到該死的文件,而它們具有組讀取權限並且我在組中......
如果你們能找出問題所在,那就太好了。

答案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

相反,您可以維護目錄的預設權限集。

相關內容