Политика безопасности Imagemagick, похоже, не позволяет мне выполнить это преобразование из pdf в png. Кажется, работает преобразование других расширений, только не из pdf. Я не менял никаких настроек imagemagick с тех пор, как я его установил ... Я использую Arch Linux, если ОС имеет значение.
user@machine $ convert -density 300 -depth 8 -quality 90 input.pdf output.png
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert: no images defined `output.png' @ error/convert.c/ConvertImageCommand/3288.
Ну я добавил
<policy domain = "coder" rights = "read | write" pattern = "PDF" />
непосредственно перед </policymap>
в /etc/ImageMagick-7/policy.xml
, и это заставляет его снова работать, но не уверен в последствиях этого для безопасности.
Я считаю, что политика PDF была добавлена из-за ошибки в Ghostscript, которая, как мне кажется, теперь исправлена. Таким образом, если вы используете текущий Ghostscript, тогда у вас должно быть все в порядке, предоставив этой политике права на чтение | запись.
Я нашел строку <policy domain = "coder" rights = "none" pattern = "{PS,PS2,PS3,EPS,PDF,XPS}" />
и просто раскомментировал ее, чтобы она заработала.
Уязвимость системы безопасности, которая заставила дистрибутивы реализовывать политику, упоминается здесь: kb.cert.org/vuls/id/332928
@ jakob-r: Полагаю, ты прокомментировал это ... ;-)
Убедитесь, что ghostscript обновлен kb.cert.org/vuls/id/332928
Это не делает этого для меня в текущей Arch.
@Suuuehgi см. ответ Soloturn.
См. stackoverflow.com/questions/52861946/…
Ошибка, на которую ссылается @ykaysaysReinstateMonica, была адресовано в Ghostscript версии 9.24.
Примечание: если вы пытаетесь решить эту проблему для преобразования из EPS, разрешение rights = "read|write"
на pattern = "EPS"
ничего не даст, если вы не сделаете то же самое для pattern = "PS'
или переместите строку EPS выше линии PS.
В Ubuntu 20.04 (LTS) сейчас доступен только ImageMagick 6, но у меня есть последняя версия ghostscript. Могу подтвердить, что это сработало для меня.
Я получаю ошибку ghostscript, когда включаю эту политику чтения / записи: convert-im6.q16: FailedToExecuteCommand
'gs '', кто-нибудь знает, как это исправить? Я использую Image Magick 6.9.10-23 Q16 x86_64 20190101 на Ubuntu 20
Нет возможности временно добавить эту политику только на время преобразования?
У меня отлично сработало! Так гениально! Однако в моем случае это был ImageMagick-6, а не 7. Поэтому вам может потребоваться проверить версию, перейдя в / etc.
Для меня в моей системе archlinux эта строка уже была раскомментирована. Мне пришлось заменить «none» на «read | write», чтобы он заработал.
убедитесь, что ghostscript обновлен kb.cert.org/vuls/id/332928
тем же. Я в курсе, кстати.
Совет - комментарий строка, чтобы отключить ограничение, или, как вы упомянули, определить права> нет.
Как указано в некоторых комментариях, вам необходимо отредактировать политики ImageMagick в /etc/ImageMagick-7/policy.xml
. В частности, в ArchLinux на момент написания (01.05.2019) следующая строка не прокомментирована:
<policy domain = "coder" rights = "none" pattern = "{PS,PS2,PS3,EPS,PDF,XPS}" />
Просто оберните его между <!--
и -->
, чтобы прокомментировать его, и преобразование в PDF должно снова работать.
убедитесь, что ghostscript обновлен kb.cert.org/vuls/id/332928
В чем смысл этой функциональности? Чтобы запретить пользователям создавать PDF-файлы?
Частично да. Поскольку ImageMagick часто используется веб-сайтами для обработки загруженных файлов - а PDF является одним из форматов файлов, которые могут в основном содержать любой исполняемый код, - любой, у кого есть разрешения на загрузку, в противном случае мог бы выполнять любую задачу, к которой ваш веб-пользователь имеет доступ. То же самое, если кто-то обманом заставит вас преобразовать вредоносный PDF-файл в любой другой формат.
Я возмущен, если это решение помешало мне использовать мое программное обеспечение, потому что кто-то может найти способ обмануть его.
Что касается Arch Linux, я должен был прокомментировать это:
<policy domain = "delegate" rights = "none" pattern = "gs" />
В моей системе было два файла policy.xml: /etc/ImageMagick-6/policy.xml
и /etc/ImageMagick-7/policy.xml
. Позаботьтесь отредактировать правильный!
спасибо, правда !! `` lang-js> yay -F /etc/ImageMagick-7/policy.xml etc / ImageMagick-7 / policy.xml принадлежит extra / imagemagick 7.0.10.30-1> yay -F / etc / ImageMagick-6 /policy.xml etc / ImageMagick-6 / policy.xml принадлежит extra / libmagick6 6.9.11.30-1> yay -Rs libmagick6 проверка зависимостей ... ошибка: не удалось подготовить транзакцию (не удалось выполнить зависимости) :: удаление libmagick6 ломает зависимость 'libmagick6', требуемую inkscape ''
В Ubuntu 19.10 я сделал это в /etc/ImageMagick-6/policy.xml.
раскомментируйте это
<policy domain = "module" rights = "read | write" pattern = "{PS,PDF,XPS}" />
и прокомментируйте это
<!-- <policy domain = "coder" rights = "none" pattern = "PDF" /> -->
После этого эта команда сработает без ошибок
convert -thumbnail x300 -background white -alpha remove sample.pdf sample.png
Туз. Спасибо. Все еще хорошо на 20.04
Эта проблема - обходной путь для уязвимости системы безопасности. Уязвимость устранена в Ghostscript 9.24 (источник), поэтому, если у вас есть эта или более новая версия, вам больше не нужно обходное решение.
На Ubuntu 19.10 - 21.04 и, возможно, в любых более поздних версиях, поставляемых с ImageMagick 6, вот как можно исправить проблему, удалив обходной путь:
Убедитесь, что у вас Ghostscript ≥9.24:
gs --version
Если да, просто удалите весь следующий раздел из /etc/ImageMagick-6/policy.xml
:
<!-- disable ghostscript format types -->
<policy domain = "coder" rights = "none" pattern = "PS" />
<policy domain = "coder" rights = "none" pattern = "PS2" />
<policy domain = "coder" rights = "none" pattern = "PS3" />
<policy domain = "coder" rights = "none" pattern = "EPS" />
<policy domain = "coder" rights = "none" pattern = "PDF" />
<policy domain = "coder" rights = "none" pattern = "XPS" />
Единственное исправление, которое сработало для меня на Ubuntu 19.04 с gs 9.26.
sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
у меня работал нормально.
Работал на Ubuntu 20.04
Разве удаление этого не означает, что вы просто даете ему все права? Что может быть опасным?
@Christophvh: Это означает, что вы возвращаете ImageMagick полные права на обработку файлов с помощью Ghostscript. Это восстанавливает файл до того состояния, в котором он был до того, как пришлось ввести этот временный обходной путь для проблема безопасности, который теперь исправлен.
Это хороший ответ с правильным и простым объяснением
Работал над Ubuntu 21.04
У меня возникла эта проблема с nextcloud, которая не могла создавать эскизы для файлов PDF.
Однако ни один из предложенных шагов не решит для меня проблему.
В конце концов я нашел причину: принятый ответ сработал, но мне также пришлось перезапустить php-fpm после редактирования файла policy.xml:
sudo systemctl restart php7.2-fpm.service
РЖУ НЕ МОГУ. После нескольких часов опробования почти всех возможных решений это было окончательным. В сочетании с решением @Stefan Seidel: <policy domain = "coder" rights = "read | write" pattern = "PDF" />
мне тоже понадобился перезапуск php fpm
Если вы используете plesk, имя службы - plesk-php74-fpm.
Спасибо, чувак, это очень помогло!
Спасибо за это. В моем случае мне пришлось перезагрузить apache.
Работает в Ubuntu 20.04
Добавьте эту строку в <policymap>
<policy domain = "module" rights = "read|write" pattern = "{PS,PDF,XPS}" />
Прокомментируйте эти строки:
<!--
<policy domain = "coder" rights = "none" pattern = "PS" />
<policy domain = "coder" rights = "none" pattern = "PS2" />
<policy domain = "coder" rights = "none" pattern = "PS3" />
<policy domain = "coder" rights = "none" pattern = "EPS" />
<policy domain = "coder" rights = "none" pattern = "PDF" />
<policy domain = "coder" rights = "none" pattern = "XPS" />
-->
Добавление <policy domain = "module" rights = "read|write" pattern = "{PS,PDF,XPS}" />
мне не понадобилось
Добавление к ответу Стефана Зайделя.
Ну, по крайней мере, в Ubuntu 20.04.2 LTS или, может быть, в других версиях вы действительно не можете редактировать файл policy.xml непосредственно в графическом интерфейсе. Вот терминальный способ его отредактировать.
Откройте файл policy.xml в терминале, введя эту команду -
sudo nano /etc/ImageMagick-6/policy.xml
Теперь напрямую отредактируйте файл в терминале, найдите
<policy domain = "coder" rights = "none" pattern = "PDF" />
и замените none
на read|write
, как показано на рисунке. Затем нажмите Ctrl + X, чтобы выйти.
Не забудьте нажать ctrl + O для сохранения перед выходом
Это сработало для меня, Ubuntu 21.04. Спасибо!
Изменение ImageMagick было сохранено после того, как Ghostscript был исправлен, потому что приложения (особенно веб-приложения) часто загружают произвольные файлы, предоставленные пользователем, в ImageMagick, не всегда обеспечивают соблюдение ограничений формата должным образом, и, поскольку Postscript (который использует PDF) является программированием с полным Тьюрингом язык, работающий в песочнице, всегда есть возможность новой дыры в песочнице.
Гораздо лучше оставить все настроенным, чтобы ImageMagick отказывался обрабатывать файлы, требующие запуска программы, и вместо этого просто вызывать Ghostscript напрямую, когда вы намеренно хотите разрешить рендеринг Postscript.
Это можно сделать с помощью такой команды Ghostscript:
gs -dSAFER -r600 -sDEVICE=pngalpha -o foo.png myfile.pdf
Да, это разновидность команды GhostScript, которую вызывает ImageMagic. (см. delegates.xml
от ImageMagick. -o
- это сокращение от -dBATCH -dNOPAUSE -sOutputFile=
)
Важно то, что ImageMagick остается заблокированным, вам не нужно без необходимости вызывать промежуточную программу и вы получаете больший контроль над параметрами рендеринга. (например, -r600
- это DPI для рендеринга, а изменение -sDEVICE=pngalpha
позволяет выполнять рендеринг непосредственно в желаемый формат)
Вау, спасибо за действительно отличный обходной путь и безопасно для этой проблемы; заслуживает большего количества голосов!
Манджаро Апрель 2021 г.
Просто удалите раскомментированную строку внутри <policymap>
в /etc/ImageMagick-7/policy.xml
Спасибо, это помогло мне!
Возможный дубликат ImageMagick не авторизован для преобразования PDF в изображение