【问题标题】:Allowing permission using S3FS bucket directory for other users允许其他用户使用 S3FS 存储桶目录的权限
【发布时间】:2021-08-01 02:21:35
【问题描述】:

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

我在/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

我查看了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

我拼命尝试 chmod 到 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

【问题讨论】:

    标签: s3fs


    【解决方案1】:

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

    正如问题本身和其他答案中已经说明的那样,安装时您必须传递以下参数:-o allow_other

    例子:

    s3fs mybucket:/ mymountlocation/ -o allow_other 
    

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

    user_allow_other
    

    默认是关闭的;)

    【讨论】:

    • 这似乎无法递归工作,这意味着即使设置了 allow_other 选项(以及 user_allow_other),我也无法访问 S3 存储桶中的子目录
    【解决方案2】:

    这对我有用:

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

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

    【讨论】:

    • 我使用的是 1.90 版,但它仍然不能像 @mj3c 评论的那样递归地工作
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      启动 RioFS 的整个命令行如下所示:

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

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

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

      【讨论】:

      • 感谢您的建议。我会先调查一下。
      【解决方案5】:

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

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

      【讨论】:

      • 这是我的问题 - 我刚刚chmod 777'ed 它并没有卡住。
      • 但是如何将此标头添加到由 Amazon SES 上传到存储的文件中?
      【解决方案6】:

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

      setsebool -P httpd_use_fusefs on
      

      【讨论】:

        猜你喜欢
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-12
        • 2018-07-12
        • 2014-07-04
        • 2021-06-28
        相关资源
        最近更新 更多