web-dev-qa-db-ja.com

他のユーザーにS3FSバケットディレクトリを使用した許可を許可する

S3FSの使用に問題があります。使っています

ubuntu@ip-x-x-x-x:~$ /usr/bin/s3fs --version
Amazon Simple Storage Service File System 1.71

また、/usr/share/myapp/s3fs-password権限で600にパスワードファイルをインストールしています。

S3バケットの取り付けに成功しました。

Sudo /usr/bin/s3fs -o allow_other -opasswd_file=/usr/share/myapp/s3fs-password -ouse_cache=/tmp mybucket.example.com /bucket

そして、user_allow_other/etc/Fuse.confを有効にしました

rootとしてバケットにファイルを作成しようとしたところ、うまくいきました。

ubuntu@ip-x-x-x-x:~$ Sudo su
root@ip-x-x-x-x:/home/ubuntu# cd /bucket
root@ip-x-x-x-x:/bucket# echo 'Hello World!' > test-`date +%s`.txt
root@ip-x-x-x-x:/bucket# ls
test-1373359118.txt

バケットmybucket.example.comのコンテンツを確認したところ、ファイルが正常に作成されました。

しかし、別のユーザーとしてディレクトリ/bucketに書き込むのに苦労していました。

root@ip-x-x-x-x:/bucket# exit
ubuntu@ip-x-x-x-x:~$ cd /bucket
ubuntu@ip-x-x-x-x:/bucket$ echo 'Hello World!' > test-`date +%s`.txt
-bash: test-1373359543.txt: Permission denied

私は必死に777 the test-1373359118.txtにchmodを試みました。そして、私はファイルに書き込むことができます

ubuntu@ip-x-x-x-x:/bucket$ Sudo chmod 777 test-1373359118.txt
ubuntu@ip-x-x-x-x:/bucket$ echo 'Test' > test-1373359118.txt
ubuntu@ip-x-x-x-x:/bucket$ cat test-1373359118.txt
Test

おかしなことに、バケット内にディレクトリを作成し、chmodを777に設定して、そこにファイルを書き込むことができました。

ubuntu@ip-x-x-x-x:/bucket$ Sudo mkdir -m 1777 test
ubuntu@ip-x-x-x-x:/bucket$ ls
test  test-1373359118.txt
ubuntu@ip-x-x-x-x:/bucket$ cd test
ubuntu@ip-x-x-x-x:/bucket/test$ echo 'Hello World!' > test-`date +%s`.txt
ubuntu@ip-x-x-x-x:/bucket/test$ ls
test-1373360059.txt
ubuntu@ip-x-x-x-x:/bucket/test$ cat test-1373360059.txt
Hello World

しかし、私は試しました

ubuntu@ip-x-x-x-x:~$ Sudo chmod 777 /mybucket
chmod: changing permissions of '/mybucket': Input/output error

うまくいきませんでした。

当初、私はこの/bucketディレクトリを使用して、複数のEC2マシンにあるLAMPスタックからの大きくてめったにアクセスされないファイルを保存することを考えていました。 (AWS PHP SDKを使用して特別な処理ライブラリを作成せずにこれを使用するのに十分適切だと思いますが、それは重要ではありません。)

そのため、/mybucket内のディレクトリを使用してファイルを保存することができます。しかし、/mybucket全体を他のユーザーに許可する方法があるかどうか知りたいのですが。

11
Petra Barus

古いバージョンのS3FSでは許可が問題でした。最新バージョンにアップグレードして動作させます。

質問自体と他の回答ですでに述べたように、マウント中に次のパラメータを渡す必要があります:-o allow_other

例:

s3fs mybucket:/ mymountlocation/ -o allow_other 

また、これを行う前に、/etc/Fuse.confで以下が有効になっていることを確認してください。

user_allow_other

デフォルトでは無効になっています;)

15
codersofthedark

これは私のために働きます:

s3fs ec2downloads:/ /mnt/s3 -o use_rrs -o allow_other -o use_cache=/tmp

最近のバージョンで修正されている必要があります。 githubプロジェクト の最新のクローン(1.78)を使用しています。

7
Chris

いくつかの理由が考えられますが、同じ問題が発生したため、考えられる理由をリストします。ファイルのアクセス許可を見ると、「---------」を継承している可能性があります-アクセス許可/ ACLはありません。

その場合は、ファイルのメタデータに「x-amz-meta-mode」を追加できます。チェックアウトしてください 私の投稿 それを行う方法/動的に行う方法について。

1
George

新しいプロジェクトRioFS(Userspace S3ファイルシステム)を確認することをお勧めします: https://github.com/skoobe/riofs

このプロジェクトは「s3fs」の代替手段であり、「s3fs」と比較した主な利点は、シンプルさ、操作の速度、バグのないコードです。現在 プロジェクト は「テスト」状態ですが、かなり長い間、いくつかの高負荷のファイルサーバーで実行されています。

私たちは、より多くの人々が私たちのプロジェクトに参加し、テストを手伝ってくれることを求めています。私たちの側から、私たちは迅速なバグ修正を提供し、新しい機能を追加するためのあなたの要求に耳を傾けます。

あなたの問題に関して、rootユーザーとして RioFS を実行し、他のユーザーがマウントされたディレクトリへのr/wアクセス権を持つことを許可するには:

  1. /etc/Fuse.confにuser_allow_otherオプションが含まれていることを確認してください
  2. -o "allow_other"パラメーターを指定してRioFSを起動します。

RioFSを起動するためのコマンドライン全体は次のようになります。

Sudo riofs -c /path/to/riofs.conf.xml http://s3.amazonaws.com mybucket.example.com /bucket

AWSACCESSKEYID変数とAWSSECRETACCESSKEY変数の両方をエクスポートするか、riofs.conf.xml構成ファイルに設定してください)。

お役に立てば幸いです。コミュニティに参加していただけるのを楽しみにしています。

1
Paul

centosを使用している場合は、httpd_use_fusefsオプションを有効にする必要があります。それ以外の場合は、s3fsオプションに何を指定しても、httpd経由でアクセスする権限はありません。

setsebool -P httpd_use_fusefs on