19

我在使用 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

我检查了 bucketmybucket.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

我拼命尝试777test-1373359118.txt. 我可以写入文件

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目录来存储来自我的 LAMP 堆栈的大型且很少访问的文件,这些文件位于几台 EC2 机器上。(我认为在不使用 AWS PHP SDK 制作特殊处理库的情况下使用它就足够了,但这不是重点。)

由于这个原因,我可以使用里面的目录/mybucket来存储文件。但我只是好奇是否有办法让/mybucket其他用户全部使用?

4

6 回答 6

24

权限是旧版本 S3FS 的问题。升级到最新版本以使其正常工作。

如问题本身和其他答案中所述,安装时您必须传递以下参数:-o allow_other

例子:

s3fs mybucket:/ mymountlocation/ -o allow_other 

此外,在执行此操作之前,请确保启用以下功能/etc/fuse.conf

user_allow_other

默认情况下它是禁用的;)

于 2015-05-08T08:59:30.040 回答
7

这对我有用:

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

它一定是在最近的版本中修复的,我正在使用来自github 项目的最新克隆(1.78) 。

于 2014-11-16T04:08:03.640 回答
2

这是唯一对我有用的东西:

您可以传递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
于 2021-07-31T16:56:01.233 回答
1

我想推荐看看新项目 RioFS(用户空间 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

(确保您同时导出AWSACCESSKEYIDAWSSECRETACCESSKEY变量或将它们设置在riofs.conf.xml配置文件中)。

希望它对您有所帮助,我们期待看到您加入我们的社区!

于 2013-07-16T16:30:06.170 回答
1

可能有几个原因,我列出了一个可能的原因,因为我遇到了同样的问题。如果您查看您的文件权限,它可能继承了“------” - 没有权限/ACL。

如果是这种情况,您可以将“x-amz-meta-mode”添加到文件的元数据中。请查看我的帖子,了解如何动态执行/执行。

于 2013-08-14T03:49:22.240 回答
0

如果您使用的是 centos,则需要启用 httpd_use_fusefs 选项,否则无论您为 s3fs 选项提供什么,它都将永远无权通过 httpd 访问

setsebool -P httpd_use_fusefs on
于 2014-12-12T06:06:55.773 回答