web-dev-qa-db-ja.com

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
8
logic1976

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. Fuse.txt )。このため、gcsfuseはデフォルトで、呼び出し元のユーザーが所有しているすべてのファイルを表示します。したがって、rootとしてではなく、ファイルシステムを使用するユーザーとしてgcsfuseを呼び出す必要があります。

何をしているのかわかっている場合は、Fuseでサポートされている allow_other マウントオプションと、gcsfuseでサポートされている--uidおよび--gidフラグを使用して、これらの動作を上書きできます。 。注意してください、これはセキュリティに影響を与える可能性があります!

ソース: https://github.com/GoogleCloudPlatform/gcsfuse/blob/d25be2491879e3745c3ed3d8e816774defc1cc5c/docs/mounting.md#access-permissions

これが、別のユーザーからマウントにアクセスできない理由です。他のユーザーがマウントにアクセスできるようにするには、マウントオプションでallow_otherを指定します。

15
Deltik

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

3
logic1976