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



我在使用 S3FS 时遇到问题。我正在使用

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

并且我600许可在/usr/share/myapp/s3fs-password中安装了密码文件。

我已成功挂载 S3 存储桶。

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

我已经在/etc/fuse.conf中启用了user_allow_other

当我尝试在存储桶中创建文件时,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 test-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目录来存储位于几台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(。

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

您可以传递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
我想

建议看看新项目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或在配置文件中设置它们(。

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

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

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

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

setsebool -P httpd_use_fusefs on
要让

所有用户访问挂载的存储桶,请使用/etc/fstab 文件中的 umask=0002 并重新挂载 S3 存储桶

例fuse.s3fs _netdev,allow_other,umask=0002,passwd_file=/etc/passwdfile.txt

相关内容

  • 没有找到相关文章

最新更新