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

verboseスイッチも試してみました

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

ルートユーザーとしてログインした場合でも

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

また、このバグは、問題のディレクトリが gcloud から入手できる gcsfuse マウント ディスクであるという事実と関係があるはずだということも付け加えておきます。権限を変更するその他の試みは正常に機能しました。

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– ファイルのパーミッションビット(8進数)
  • dir_mode– ディレクトリの権限ビット(8進数)

ソース: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 自体は、ファイルシステムをマウントしたユーザーのみにファイルシステムへのアクセスを制限します (cf.ヒューズ.txt)。このため、gcsfuse はデフォルトで、すべてのファイルを呼び出し元ユーザーが所有するファイルとして表示します。したがって、root ではなく、ファイル システムを使用するユーザーとして gcsfuse を呼び出す必要があります。

何をしているのか分かっているなら、これらの動作をallow_otherfuse でサポートされているマウント オプションと、 gcsfuse でサポートされている--uidフラグ --gid。セキュリティに影響する可能性があるため注意してください。

ソース:アクセス許可

このため、他のユーザーからマウントにアクセスすることはできません。他のユーザーがマウントにアクセスできるようにするには、allow_otherマウント オプションで指定します。

答え2

私は次の方法でこの問題を解決できました。Cloud API アクセス スコープに移動し、VM 構成でストレージの読み取り/書き込みまたはフル アクセスがあることを確認する必要がありました。これには、インスタンスを一覧表示する gcloud コンソールで編集を押すことが必要でした。ページの下部にストレージの制限があったので、これを「フル」に変更しました。これで解決しました。

関連情報