chmod 777 並未將權限改為 777

chmod 777 並未將權限改為 777

我正在嘗試將 temp_dir 的權限更改為 777。順便說一句,我正在使用Linux。

kylefoley@kfoley76:/mnt/disks$ chmod 777 /mnt/disks/temp_dir
kylefoley@kfoley76:/mnt/disks$ stat -c "%a %n" temp_dir
755 temp_dir

我還嘗試了詳細開關

kylefoley@kfoley76:/mnt/disks$ chmod -v 777 /mnt/disks/temp_dir
mode of '/mnt/disks/temp_dir' changed from 0755 (rwxr-xr-x) to 0777 (rwxrwxrwx)
kylefoley@kfoley76:/mnt/disks$ stat -c "%a %n" temp_dir
755 temp_dir

我也不明白為什麼不能使用sudo

kylefoley@kfoley76:/mnt/disks/temp_dir$ sudo chmod 777 fix_mistakes
chmod: cannot access 'fix_mistakes': Permission denied

即使我以 root 使用者身分登入

kylefoley@kfoley76:/mnt/disks/temp_dir$ sudo -i
root@kfoley76:~# sudo chmod 777 /mnt/disks/temp_dir
chmod: cannot access '/mnt/disks/temp_dir': Permission denied

我還應該補充一點,這個錯誤一定與以下事實有關:有問題的目錄是 gcsfuse 安裝的磁碟,可以從 gcloud 獲得。其他更改權限的嘗試效果很好:

kylefoley@kfoley76:~$ mkdir hey
kylefoley@kfoley76:~$ stat -c "%a %n" hey
755 hey
kylefoley@kfoley76:~$ chmod 777 hey
kylefoley@kfoley76:~$ stat -c "%a %n" hey
777 hey

答案1

gcsfuse 在掛載時設定檔案和目錄權限。具體來說,選項有:

  • file_mode– 檔案的權限位,以八進位表示
  • dir_mode– 目錄的權限位,以八進位表示

來源:https://github.com/GoogleCloudPlatform/gcsfuse/blob/e0a0e0826897b09581c24065fb6a92912ee79d03/flags.go#L78

如果不指定選項,則預設為dir_mode=0755,file_mode=0644

來源:https://github.com/GoogleCloudPlatform/gcsfuse/blob/e0a0e0826897b09581c24065fb6a92912ee79d03/flags.go#L51

這些選項適用於掛載中的所有檔案和目錄。此 FUSE 檔案系統不具備更改特定檔案或目錄權限的功能,因此chmod不執行任何操作。


此外,gcsfuse 還有額外的存取限制,限制對掛載檔案系統的使用者的存取。細節:

作為一項安全措施,fuse 本身限制掛載該檔案系統的使用者對檔案系統的存取(參見保險絲.txt)。因此,gcsfuse 預設顯示呼叫使用者擁有的所有檔案。因此,您應該以將使用檔案系統的使用者身分來呼叫 gcsfuse,而不是以 root 身分。

如果您知道自己在做什麼,則可以使用以下命令覆寫這些行為allow_other受fuse支援的掛載選項以及gcsfuse支援的--uid和 標誌。--gid請小心,這可能會產生安全隱患!

來源:https://github.com/GoogleCloudPlatform/gcsfuse/blob/d25be2491879e3745c3ed3d8e816774defc1cc5c/docs/mounting.md#access-permissions

這就是您無法從其他用戶存取安裝的原因。若要允許其他使用者存取裝載,請allow_other在裝載選項中指定。

答案2

我能夠透過以下方式解決問題:我必須轉到雲端 API 存取範圍並在虛擬機器配置下驗證它是否具有儲存的讀寫或完全存取權限。這涉及在列出我的實例的 gcloud 控制台上按編輯。在頁面底部,有存儲限制,我將其更改為“已滿”。就這樣做到了。

相關內容