ImageMagick — это мощный инструмент для обработки изображений, однако вместе с его возможностями и сложностью возникают и определённые риски безопасности. Для снижения этих рисков ImageMagick использует политику безопасности, описанную в конфигурационном файле. Она устанавливает ограничения на использование памяти и размер файлов, определяет, какие файлы и откуда можно открывать, а также содержит другие меры защиты.
На платформе Zone ImageMagick установлен с политикой безопасности, основанной на варианте «limited», поставляемом вместе с программным обеспечением.
В некоторых случаях возникает необходимость ослабить отдельные ограничения, и это можно сделать в пользовательском контексте.
Однако следует учитывать, что:
-
не все настройки могут быть изменены пользователем, и правила со временем могут изменяться;
-
некоторые параметры можно изменить, установив минимальную пользовательскую конфигурацию.
magick: attempt to perform an operation not allowed by the security policy `URL'
Чтобы обойти именно это ограничение, пользователю виртуального сервера достаточно создать файл~/.config/ImageMagick/policy.xml
со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policymap [ <!ELEMENT policymap (policy)*> <!ATTLIST policymap xmlns CDATA #FIXED ''> <!ELEMENT policy EMPTY> <!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED stealth NMTOKEN #IMPLIED value CDATA #IMPLIED> ]> <policymap> <policy domain="module" rights="read|write" pattern="URL"/> </policymap>
- Некоторые правила невозможно ослабить, если системная конфигурация уже была загружена, поскольку по умолчанию она читается первой. Эту проблему можно решить, изменив порядок загрузки конфигурационных файлов ImageMagick с помощью переменной окружения
MAGICK_CONFIGURE_PATH, чтобы пользовательская конфигурация загружалась первой:MAGICK_CONFIGURE_PATH="$HOME/.config/ImageMagick:/usr/share/ImageMagick-7"
Ранее внесённые изменения политики вступят в силу в течение 5 минут после выполнения следующей команды:
touch ~/domeenid/*/phpini/global/php.ini