我在使用S3FS时遇到问题。我正在使用
ubuntu@ip-x-x-x-x:~$ /usr/bin/s3fs --version
Amazon Simple Storage Service File System 1.71
我在/usr/share/myapp/s3fs-password
的{{1}}权限下安装了密码文件。
我成功安装了S3存储桶。
600
我在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
我拼命尝试chmod到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
。我可以写入文件
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
,然后在那里写一个文件。
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
目录来存储位于几台EC2机器的LAMP堆栈中的大型且很少访问的文件。 (我认为使用AWS PHP SDK而不使用特殊处理库就可以使用它,但这不是重点。)
由于这个原因,我可以使用/bucket
内的目录来存储文件。但我很好奇是否有办法允许整个/mybucket
给其他用户?
答案 0 :(得分:14)
对于旧版本的S3FS,权限是一个问题。升级到最新版本以使其正常运行。
正如问题本身及其他答案中所述,安装时您必须传递以下参数:-o allow_other
示例:
s3fs mybucket:/ mymountlocation/ -o allow_other
此外,在执行此操作之前,请确保在/etc/fuse.conf
中启用以下内容:
user_allow_other
默认情况下禁用;)
答案 1 :(得分:6)
这对我有用:
s3fs ec2downloads:/ /mnt/s3 -o use_rrs -o allow_other -o use_cache=/tmp
它必须已在最新版本中修复,我正在使用github project中的最新克隆(1.78)。
答案 2 :(得分:1)
我想建议看一下新项目RioFS(Userspace S3文件系统):https://github.com/skoobe/riofs。
这个项目是“s3fs”的替代品,与“s3fs”相比的主要优点是:简单,操作速度和无错误的代码。目前the project处于“测试”状态,但它已经在几个高负载文件服务器上运行了很长时间。
我们正在寻找更多人加入我们的项目并帮助进行测试。在我们这边,我们提供快速错误修复,并会听取您添加新功能的请求。
关于您的问题,为了以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
配置文件中。
希望它对您有所帮助,我们期待着您加入我们的社区!
答案 3 :(得分:1)
可能有几个原因,我列出了可能的原因,因为我遇到了同样的问题。如果你查看你的文件权限,它可能会继承' ---------' - 没有权限/ ACL。
如果是这种情况,您可以添加" x-amz-meta-mode"到文件的元数据。请查看my post有关如何动态/动态执行此操作的信息。
答案 4 :(得分:0)
如果您正在使用centos,则需要启用httpd_use_fusefs选项,否则无论您为s3fs选项提供什么,它都将永远无权通过httpd访问
setsebool -P httpd_use_fusefs on
答案 5 :(得分:0)
这是唯一对我有用的东西:
您可以传递 uid
选项以确保它可以:
-o umask=0007,uid=1001,gid=1001 # replace 1001 with your ids
来自:https://github.com/s3fs-fuse/s3fs-fuse/issues/673
要查找您的 uid 和 gid,请查看此处的前两个数字:
sudo cat /etc/passwd | grep $USER