安装SUPEE 7405补丁后,我们发现从管理员上传图片时出现问题。所有文件权限都设置为CHMOD 640,这使得所有用户都无法访问它们。
是否有解决方案不涉及重写/lib/Varien/File/Uploader.php文件?
答案 0 :(得分:6)
已发布新版SUPEE-7405以解决此问题:
http://magento.com/security/patches/supee-7405
2016年2月23日更新
此版本的更新版本现已推出。这些更新增加了对PHP 5.3的支持,并解决了上传文件权限,合并购物车以及原始版本中遇到的SOAP API的问题。
请注意,即使没有修订的补丁,您也可以使用推荐的文件权限来解决问题(参见下文)。
Magento希望网络服务器拥有网站文件:
http://devdocs.magento.com/guides/m1x/install/installer-privileges_after.html#privs-after
您可以通过使网络服务器成为文件的所有者来解决此问题。
chown -R web-server-user-name magento/root/path
网络服务器用户名通常为www-data
或apache
。
如果您按照上述链接中的说明操作,则网络服务器将具有对所有文件的读取权限,以及对媒体文件和var文件的写入权限。这应该是典型站点操作所需的全部内容。如果您需要使用Magento Connect,则必须暂时授予Web服务器对所有文件的写入权限。
所有文件权限都设置为CHMOD 640,这使得所有用户都无法访问它们。
只有网络服务器用户需要访问这些文件。无需向所有用户授予任何权限。
例如,如果您需要通过FTP编辑或上传文件,则可能需要授予对特定用户的访问权限。在这种情况下,我所做的是设置拥有文件系统的用户并将文件组设置为网络服务器:
cd magento/root/directory
# Set ownership
# 'username' should be the file system owner username
# 'webserver' should be the webserver username
chown -R username:webserver .
# Give the user read/write access to all files.
# Give the webserver read access to all files
find . -type f -exec chmod 640 {} \;
find . -type d -exec chmod 2750 {} \;
# Give the user and the webserver read/write access to var and media
find var/ -type f -exec chmod 660 {} \;
find media/ -type f -exec chmod 660 {} \;
find var/ -type d -exec chmod 2770 {} \;
find media/ -type d -exec chmod 2770 {} \;
chmod 2770 includes
chmod 660 includes/config.php
上述命令将为您的文件系统所有者提供对所有内容的读/写访问权限,以及Web服务器对所有内容的读取权限。 Web服务器也可以写入media和var目录。
答案 1 :(得分:1)
我们已经为我们的环境解决了这个问题,但是,我不确定这对其他人有多大帮助。即使我不是网络工程师,我也会尝试解释它。如果有足够多的人认为这篇文章有帮助,我会将其标记为正确。此外,请注意,即使问题来自Magento的SUPEE 7405补丁,该解决方案也是基于网络的,而不是基于代码的。
我认为修补程序中chmod更改的目的是防止黑客劫持您的图像并在其中存储敏感数据(例如,结帐标题图像黑客)。为了防止这种黑客攻击,他们通过chmod 640限制对上传文件/图像的所有访问。
据说......
Magento 1.X的最新补丁似乎需要环境配置更改。正如我们的一位网络工程师所说,他们假设我们正在使用带有mod_php的Apache,它以Apache用户的身份读取和写入所有文件。但是,如果您使用的是fcgi或suphp,则文件将被写为域用户。根据您的环境,您可能需要将Apache添加到您的组并允许它读取文件。
首先尝试使用chown -R解决方案,如果这不起作用,您可能需要联系您的主机或将Apache添加到您的"组"这样它就可以拥有所有者。
答案 2 :(得分:1)
请继续使用此文件
lib/Varien/File/Uploader.php
然后更改第220行并将chmod($destinationFile, 0640)
更改为chmod($destinationFile, 0644)
它在工作。
答案 3 :(得分:0)
接受的答案是一个很好的解决方案。
如果您无法更改所有权(可能是因为您在共享服务器上),则可以运行cron作业来更改新上载文件的文件权限。
*/3 * * * * find /path/to/magento/ -type f -perm 640 -exec chmod 644 {} \;
*/3 * * * * find /path/to/magento/ -type d -perm 750 -exec chmod 2755 {} \;
答案 4 :(得分:-1)
更改Upload.php代码适用于我的所有安装。
To fix existing uploaded images, you need to change ALL existing uploaded images permissions (chmod) from 0640 to 0644.
To fix it for the future, you would need to edit /lib/Varien/File/Uploader.php and change the line from (after applying the patch)
chmod($destinationFile, 0640);
to
chmod($destinationFile, 0644);
There is a similar one for directories that you'll need to change from 0750 to 0755.