Я пытаюсь изменить права доступа 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 и с флагами--uid
и--gid
поддерживается gcsfuse. Будьте осторожны, это может иметь последствия для безопасности!
Вот почему вы не можете получить доступ к монтированию от другого пользователя. Чтобы разрешить другим пользователям получить доступ к монтированию, укажите allow_other
в параметрах монтирования.
решение2
Я смог решить проблему следующим образом: мне пришлось перейти в Cloud API Access Scopes и проверить в конфигурации виртуальной машины, что у нее есть доступ на чтение и запись или полный доступ к хранилищу. Для этого нужно было нажать «изменить» на консоли gcloud, где перечислены мои экземпляры. Внизу страницы было ограничение для хранилища, которое я изменил на «полное». Это сработало.