部署在 AWS 上的资产的 Silverstripe 权限

Silverstripe permissions for assets deployed on AWS

在 SilverStripe 的管理后台上传文件时,我的权限总是被拒绝。

apache2 在 www-data:www-data 下 运行(用 "whoami" 和 envvars 检查过)。

资产文件夹的权限如下:

drwxrwxr-x+  5 git www-data 4.0K Oct  2 08:18 .
drwxrwsr-x+ 17 git users    4.0K Oct  2 09:53 ..
-rwxrwxr-x+  1 git www-data 1.5K Oct  2 08:18 .htaccess
drwxrwsr-x+  2 git www-data 4.0K Oct  2 07:28 Uploads
drwxrwsr-x+  2 git www-data 4.0K Oct  2 08:18 _combinedfiles
drwxrwsr-x+  2 git www-data 4.0K Oct  2 07:57 books
-rwxrwxr-x+  1 git www-data 4.5K Oct  1 14:48 error-404.html
-rwxrwxr-x+  1 git www-data 4.3K Oct  1 14:48 error-500.html
-rwxrwxr-x+  1 git www-data 4.4K Oct  2 08:18 web.config

即使我将它们设置为 777,我仍然无法获得权限。它在本地工作,但我不明白为什么它不起作用。

Apache 错误日志:

[Fri Oct 02 10:24:18.364138 2015] [:error] [pid 16008] [client 62.218.34.90:44300] PHP Warning:  copy(/var/www/X/assets/books/Mike.png): failed to open stream: Permission denied in /var/www/X/framework/filesystem/Upload.php on line 195, referer: http://x.amazonaws.com/index.php/admin/assets/add/?ID=7
[Fri Oct 02 10:24:18.364615 2015] [:error] [pid 16008] [client 62.218.34.90:44300] PHP Warning:  Requirements_Backend::process_combined_files(): Couldn't create '/var/www/X/assets/_combinedfiles//lib.js' in /var/www/X/framework/view/Requirements.php on line 1214, referer: http://x.amazonaws.com/index.php/admin/assets/add/?ID=7

这是 AWS 特有的问题吗?有什么线索吗?

我建议您使用模块并将资产存储在 S3 中 https://github.com/markguinn/silverstripe-cloudassets

问题是 ACL。

使用 getfacl ./assets/ 我可以确定,ACL 被设置为破坏正常的权限模型。

使用 setfacl 我能够推进 ACL 以将网络用户 (www-data) 包含到 assets 目录中 rwx

希望这对某人有所帮助, 最好的祝福。 G