После установки патча SUPEE 7405 мы заметили проблему с загрузкой изображений от администратора. Все права доступа к файлам устанавливаются в CHMOD 640, что делает их недоступными для всех пользователей.
Есть ли решение, которое не включает переписывание файла /lib/Varien/File/Uploader.php?
Выпущена новая версия SUPEE-7405, которая решает эту проблему:
http://magento.com/security/patches/supee-7405
Обновлено 23 февраля 2016 г.
Обновленные версии этого выпуска теперь доступны. В обновлениях добавлена поддержка PHP 5.3 и устранены проблемы с разрешениями на загрузку файлов, объединением корзин и API-интерфейсами SOAP, возникшими в оригинальной версии.
Обратите внимание, что даже без исправленного исправления вы можете исправить проблему, используя рекомендуемые разрешения для файлов (см. Ниже).
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, вам придется временно предоставить веб-серверу доступ на запись ко всем файлам.
Все права доступа к файлам устанавливаются в 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
Вышеуказанные команды предоставят вашему владельцу файловой системы доступ на чтение / запись ко всему, а веб-сервер — на чтение. Веб-сервер также сможет выполнять запись в каталоги media и var.
Мы решили эту проблему для нашей среды, однако я не уверен, насколько это поможет всем остальным. Хотя я не сетевой инженер, я постараюсь объяснить это. Если достаточное количество людей сочтут этот пост полезным, я отмечу его как правильный. Также обратите внимание, что, хотя проблема возникла из-за патча Magento SUPEE 7405, решение основано на сети, а не на коде.
Я полагаю, что цель изменения chmod в патче состояла в том, чтобы не дать хакерам взломать ваши изображения и сохранить в них конфиденциальные данные (например, взломать изображение заголовка извлечения). Чтобы предотвратить этот взлом, они ограничивают весь доступ к загруженным файлам / изображениям через chmod 640.
С этим сказал …
Последний патч для Magento 1.X, кажется, требует изменение конфигурации среды. Как сказал один из наших сетевых инженеров, они предполагают, что мы используем Apache с mod_php, который читает и записывает все файлы как пользователь Apache. Однако, если вы используете fcgi или suphp, файлы будут записаны как пользователь домена. В зависимости от вашей среды вам может потребоваться добавить Apache в свои группы и разрешить ему читать файлы.
Сначала попробуйте решение chown -R, и если это не сработает, вам может потребоваться связаться с вашим хостом или добавить Apache в ваши «группы», чтобы у него был доступ владельца.
Пожалуйста, перейдите на этот файл
lib/Varien/File/Uploader.php
и просто измените строку № 220 и измените chmod($destinationFile, 0640)
в chmod($destinationFile, 0644)
Работает.
Принятый ответ — хорошее решение.
Если вы не можете изменить владельца (возможно, из-за того, что находитесь на общем сервере), вы можете запустить задания 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 {} \;
Посмотри на это: https://community.magento.com/t5/Security-Patches/after-installing-SUPEE-7405-can-no-longer-add-or-change-images/td-p/26785/page/3
Изменение кода 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.