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 и с флагами --uidи --gidподдерживается gcsfuse. Будьте осторожны, это может иметь последствия для безопасности!

Источник:https://github.com/GoogleCloudPlatform/gcsfuse/blob/d25be2491879e3745c3ed3d8e816774defc1cc5c/docs/mounting.md#access-permissions

Вот почему вы не можете получить доступ к монтированию от другого пользователя. Чтобы разрешить другим пользователям получить доступ к монтированию, укажите allow_otherв параметрах монтирования.

решение2

Я смог решить проблему следующим образом: мне пришлось перейти в Cloud API Access Scopes и проверить в конфигурации виртуальной машины, что у нее есть доступ на чтение и запись или полный доступ к хранилищу. Для этого нужно было нажать «изменить» на консоли gcloud, где перечислены мои экземпляры. Внизу страницы было ограничение для хранилища, которое я изменил на «полное». Это сработало.

Связанный контент