
我花了幾個小時試圖找出為什麼事情進展不順利,但我現在放棄了,所以我就在這裡。
我的設定/問題:我有一個透過 SSH 連線的遠端 VPS(pub/priv 金鑰,無密碼)。
用戶是 debian。
在這個 VPS 上,我運行一個postgres:14.3-alpine
docker 容器。
該 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
相反,您可以維護目錄的預設權限集。