使用动态文件在EC2上安装S3(s3fs) - 持久公共权限

Geo*_*rge 2 fuse amazon-s3 amazon-ec2 amazon-web-services s3fs

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

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

sudo /usr/bin/s3fs -o allow_other -o default_acl="public-read" [bucketname] [mountpoint] 
Run Code Online (Sandbox Code Playgroud)

并在/ etc/fstab中创建一个automount:

s3fs#[bucketname]  [mountpoint]     fuse    defaults,noatime,allow_other,uid=1000,gid=1000,use_cache=/tmp,default_acl=public-read 0 0
Run Code Online (Sandbox Code Playgroud)

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

我的设置是Ubuntu 13.04,PHP5,AWS SDK.

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

Geo*_*rge 6

在我的PHP脚本中,使用AWK SDK for PHP将文件PUT转换为S3,我不得不添加元数据,如下所示,这样就可以了:

$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
    )
));
Run Code Online (Sandbox Code Playgroud)

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

希望这有助于某人.让我知道!