chmod 777 不会将权限更改为 777

log*_*976 8 linux permissions

我正在尝试将 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
Run Code Online (Sandbox Code Playgroud)

我也试过详细开关

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
Run Code Online (Sandbox Code Playgroud)

我也不明白为什么我不能使用 sudo

kylefoley@kfoley76:/mnt/disks/temp_dir$ sudo chmod 777 fix_mistakes
chmod: cannot access 'fix_mistakes': Permission denied
Run Code Online (Sandbox Code Playgroud)

即使我以 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
Run Code Online (Sandbox Code Playgroud)

我还应该补充一点,这个错误必须与有问题的目录是 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
Run Code Online (Sandbox Code Playgroud)

Del*_*tik 15

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 本身限制了安装文件系统的用户对文件系统的访问(参见fuse.txt)。因此,默认情况下 gcsfuse 将所有文件显示为调用用户所有。因此,您应该以将使用文件系统的用户而不是 root 用户身份调用 gcsfuse。

如果您知道自己在做什么,则可以使用allow_otherfuse 支持的挂载选项--uid--gidgcsfuse 支持的和 标志覆盖这些行为。小心,这可能有安全隐患!

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

这就是您无法从其他用户访问安装的原因。要允许其他用户访问挂载,请allow_other在您的挂载选项中指定。