3

使用 S3FS 和 FUSE 将 S3 存储桶挂载到 AWS EC2 实例时,我遇到了一个问题,即我的 S3 文件正在更新,但新文件没有采用适当的权限。

新文件的 ACL 权限是“------”而不是“rw-r--r--”。我已通过以下方式确保正确安装了铲斗:

sudo /usr/bin/s3fs -o allow_other -o default_acl="public-read" [bucketname] [mountpoint] 

并在 /etc/fstab 中创建自动挂载:

s3fs#[bucketname]  [mountpoint]     fuse    defaults,noatime,allow_other,uid=1000,gid=1000,use_cache=/tmp,default_acl=public-read 0 0

和 /etc/passwd-s3fs 中具有正确权限的密码文件。

我的设置是 Ubuntu 13.04、PHP5、AWS SDK。

经过 2 天的试验,我在下面提供的答案中找到了一个解决方案(用于 php)。

4

2 回答 2

7

在我的使用 AWK SDK for PHP 将文件放到 S3 的 php 脚本中,我必须添加元数据,如下所示,这起到了作用:

$response = $s3->create_object('bucketname', 'mountpoint/'.$filename, array(
    'body'  => $json_data,
    'contentType' => 'application/json',
    'acl' => AmazonS3::ACL_PUBLIC,
    'meta' => array(
        'mode'         => '33188',    // x-amz-meta-mode
    )
));

模式“33188”在S3存储桶中定义了权限“rw-r--r--”而不是“---------”(但只反映在EC2挂载的文件夹中),后来被继承EC2 安装的驱动器。

希望这可以帮助某人。让我知道!

于 2013-08-07T04:12:36.167 回答
1

s3fs#[bucketname] [mountpoint] fuse defaults,noatime,allow_other,uid=222,gid=48,use_cache=/tmp,default_acl=public-read 0 0

对我来说,这条线可以在没有设置 x-amz-meta-mode 的情况下工作!注意:uid=222 用于我的服务器 ec2-user,gid=48 用于我的服务器 apache 组。

所有脚本 php 都使用 apache 组执行。这就是为什么我认为您需要将 gid 设置为 48。

另请参阅更改 s3fs 挂载存储桶的用户所有权

于 2013-12-18T20:49:40.640 回答