我正在尝试将 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
– 目录的权限位,以八进制表示
如果不指定选项,则默认为dir_mode=0755,file_mode=0644
。
这些选项适用于挂载中的所有文件和目录。此 FUSE 文件系统无法更改特定文件或目录的权限,因此chmod
不执行任何操作。
此外,gcsfuse 还具有额外的访问限制,限制了挂载文件系统的用户的访问。详细信息:
作为一种安全措施,fuse 本身将文件系统访问限制为安装文件系统的用户(参见保险丝.txt)。因此,gcsfuse 默认显示所有文件为调用用户所有。因此,您应该以将使用文件系统的用户身份调用 gcsfuse,而不是以 root 身份。
如果你知道自己在做什么,你可以用以下方法覆盖这些行为:
allow_other
fuse 支持的 mount 选项以及gcsfuse 支持的--uid
和--gid
标志。请注意,这可能存在安全隐患!
这就是您无法从其他用户访问该挂载的原因。要允许其他用户访问该挂载,请allow_other
在挂载选项中指定。
答案2
我能够通过以下方式解决问题:我必须转到 Cloud API 访问范围并在 VM 配置下验证它是否具有对存储的读写或完全访问权限。这涉及在列出我的实例的 gcloud 控制台上按编辑。在页面底部,有存储限制,我将其更改为“完整”。就这样。