允许其他用户使用S3FS存储桶目录

时间:2013-07-09 09:03:58

标签: 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的{​​{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给其他用户?

6 个答案:

答案 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访问权限:

  1. 确保/etc/fuse.conf包含user_allow_other选项
  2. 使用-o“allow_other”参数启动RioFS。
  3. 启动RioFS的整个命令行如下所示:

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

    (确保您导出了AWSACCESSKEYIDAWSSECRETACCESSKEY个变量,或者将它们设置在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