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
全体を他のユーザーに許可する方法があるかどうか知りたいのですが。
古いバージョンのS3FSでは許可が問題でした。最新バージョンにアップグレードして動作させます。
質問自体と他の回答ですでに述べたように、マウント中に次のパラメータを渡す必要があります:-o allow_other
例:
s3fs mybucket:/ mymountlocation/ -o allow_other
また、これを行う前に、/etc/Fuse.conf
で以下が有効になっていることを確認してください。
user_allow_other
デフォルトでは無効になっています;)
これは私のために働きます:
s3fs ec2downloads:/ /mnt/s3 -o use_rrs -o allow_other -o use_cache=/tmp
最近のバージョンで修正されている必要があります。 githubプロジェクト の最新のクローン(1.78)を使用しています。
いくつかの理由が考えられますが、同じ問題が発生したため、考えられる理由をリストします。ファイルのアクセス許可を見ると、「---------」を継承している可能性があります-アクセス許可/ ACLはありません。
その場合は、ファイルのメタデータに「x-amz-meta-mode」を追加できます。チェックアウトしてください 私の投稿 それを行う方法/動的に行う方法について。
新しいプロジェクトRioFS(Userspace S3ファイルシステム)を確認することをお勧めします: https://github.com/skoobe/riofs 。
このプロジェクトは「s3fs」の代替手段であり、「s3fs」と比較した主な利点は、シンプルさ、操作の速度、バグのないコードです。現在 プロジェクト は「テスト」状態ですが、かなり長い間、いくつかの高負荷のファイルサーバーで実行されています。
私たちは、より多くの人々が私たちのプロジェクトに参加し、テストを手伝ってくれることを求めています。私たちの側から、私たちは迅速なバグ修正を提供し、新しい機能を追加するためのあなたの要求に耳を傾けます。
あなたの問題に関して、rootユーザーとして RioFS を実行し、他のユーザーがマウントされたディレクトリへのr/wアクセス権を持つことを許可するには:
RioFSを起動するためのコマンドライン全体は次のようになります。
Sudo riofs -c /path/to/riofs.conf.xml http://s3.amazonaws.com mybucket.example.com /bucket
(AWSACCESSKEYID
変数とAWSSECRETACCESSKEY
変数の両方をエクスポートするか、riofs.conf.xml
構成ファイルに設定してください)。
お役に立てば幸いです。コミュニティに参加していただけるのを楽しみにしています。
centosを使用している場合は、httpd_use_fusefsオプションを有効にする必要があります。それ以外の場合は、s3fsオプションに何を指定しても、httpd経由でアクセスする権限はありません。
setsebool -P httpd_use_fusefs on