Политика безопасности ImageMagick 'PDF' блокирует преобразование

Политика безопасности 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.
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
Включение UTF-8 в jsPDF с помощью Angular
Включение UTF-8 в jsPDF с помощью Angular
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей...
435
1
169 050
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ну я добавил

  <policy domain = "coder" rights = "read | write" pattern = "PDF" />

непосредственно перед </policymap> в /etc/ImageMagick-7/policy.xml, и это заставляет его снова работать, но не уверен в последствиях этого для безопасности.

Я считаю, что политика PDF была добавлена ​​из-за ошибки в Ghostscript, которая, как мне кажется, теперь исправлена. Таким образом, если вы используете текущий Ghostscript, тогда у вас должно быть все в порядке, предоставив этой политике права на чтение | запись.

fmw42 06.11.2018 22:43

Я нашел строку <policy domain = "coder" rights = "none" pattern = "{PS,PS2,PS3,EPS,PDF,XPS}" /> и просто раскомментировал ее, чтобы она заработала.

jakob-r 07.12.2018 13:18

Уязвимость системы безопасности, которая заставила дистрибутивы реализовывать политику, упоминается здесь: kb.cert.org/vuls/id/332928

Jason Siefken 09.01.2019 00:58

@ jakob-r: Полагаю, ты прокомментировал это ... ;-)

AstroFloyd 14.01.2019 18:09

Убедитесь, что ghostscript обновлен kb.cert.org/vuls/id/332928

ykay says Reinstate Monica 05.03.2019 10:35

Это не делает этого для меня в текущей Arch.

Suuuehgi 05.11.2019 19:01

@Suuuehgi см. ответ Soloturn.

Socowi 21.11.2019 14:33

См. stackoverflow.com/questions/52861946/…

fmw42 05.02.2020 18:28

Ошибка, на которую ссылается @ykaysaysReinstateMonica, была адресовано в Ghostscript версии 9.24.

qneill 12.05.2020 00:18

Примечание: если вы пытаетесь решить эту проблему для преобразования из EPS, разрешение rights = "read|write" на pattern = "EPS" ничего не даст, если вы не сделаете то же самое для pattern = "PS' или переместите строку EPS выше линии PS.

kyle 24.07.2020 17:57

В Ubuntu 20.04 (LTS) сейчас доступен только ImageMagick 6, но у меня есть последняя версия ghostscript. Могу подтвердить, что это сработало для меня.

Matthew 28.09.2020 01:09

Я получаю ошибку ghostscript, когда включаю эту политику чтения / записи: convert-im6.q16: FailedToExecuteCommand 'gs '', кто-нибудь знает, как это исправить? Я использую Image Magick 6.9.10-23 Q16 x86_64 20190101 на Ubuntu 20

basZero 28.09.2020 08:51

Нет возможности временно добавить эту политику только на время преобразования?

rubo77 29.06.2021 21:42

У меня отлично сработало! Так гениально! Однако в моем случае это был ImageMagick-6, а не 7. Поэтому вам может потребоваться проверить версию, перейдя в / etc.

Karthik C 25.08.2021 21:08

Для меня в моей системе archlinux эта строка уже была раскомментирована. Мне пришлось заменить «none» на «read | write», чтобы он заработал.

убедитесь, что ghostscript обновлен kb.cert.org/vuls/id/332928

ykay says Reinstate Monica 05.03.2019 10:35

тем же. Я в курсе, кстати.

yukashima huksay 27.05.2019 06:25

Совет - комментарий строка, чтобы отключить ограничение, или, как вы упомянули, определить права> нет.

eMPee584 05.09.2021 23:32

Как указано в некоторых комментариях, вам необходимо отредактировать политики 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

ykay says Reinstate Monica 05.03.2019 10:35

В чем смысл этой функциональности? Чтобы запретить пользователям создавать PDF-файлы?

lmat - Reinstate Monica 27.03.2019 02:22

Частично да. Поскольку ImageMagick часто используется веб-сайтами для обработки загруженных файлов - а PDF является одним из форматов файлов, которые могут в основном содержать любой исполняемый код, - любой, у кого есть разрешения на загрузку, в противном случае мог бы выполнять любую задачу, к которой ваш веб-пользователь имеет доступ. То же самое, если кто-то обманом заставит вас преобразовать вредоносный PDF-файл в любой другой формат.

TwoD 14.04.2019 12:37

Я возмущен, если это решение помешало мне использовать мое программное обеспечение, потому что кто-то может найти способ обмануть его.

Gabriel 16.06.2021 22:55

Что касается Arch Linux, я должен был прокомментировать это:

  <policy domain = "delegate" rights = "none" pattern = "gs" />

В моей системе было два файла policy.xml: /etc/ImageMagick-6/policy.xml и /etc/ImageMagick-7/policy.xml. Позаботьтесь отредактировать правильный!

SylvainB 03.06.2020 11:38

спасибо, правда !! `` 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 ''

soloturn 13.12.2020 01:55

В 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

shantiq 03.05.2021 11:30

Эта проблема - обходной путь для уязвимости системы безопасности. Уязвимость устранена в Ghostscript 9.24 (источник), поэтому, если у вас есть эта или более новая версия, вам больше не нужно обходное решение.

На Ubuntu 19.10 - 21.04 и, возможно, в любых более поздних версиях, поставляемых с ImageMagick 6, вот как можно исправить проблему, удалив обходной путь:

  1. Убедитесь, что у вас Ghostscript ≥9.24:

    gs --version
    
  2. Если да, просто удалите весь следующий раздел из /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.

ManuelTS 20.12.2019 13:32
sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml у меня работал нормально.
Richard Kiefer 02.07.2020 17:41

Работал на Ubuntu 20.04

Alex K. 09.07.2020 02:41

Разве удаление этого не означает, что вы просто даете ему все права? Что может быть опасным?

Christophvh 01.08.2020 15:54

@Christophvh: Это означает, что вы возвращаете ImageMagick полные права на обработку файлов с помощью Ghostscript. Это восстанавливает файл до того состояния, в котором он был до того, как пришлось ввести этот временный обходной путь для проблема безопасности, который теперь исправлен.

tanius 01.08.2020 16:51

Это хороший ответ с правильным и простым объяснением

Sayan Dey 23.03.2021 06:38

Работал над Ubuntu 21.04

Max N 12.05.2021 18:32

У меня возникла эта проблема с nextcloud, которая не могла создавать эскизы для файлов PDF.

Однако ни один из предложенных шагов не решит для меня проблему.

В конце концов я нашел причину: принятый ответ сработал, но мне также пришлось перезапустить php-fpm после редактирования файла policy.xml:

 sudo systemctl restart php7.2-fpm.service

РЖУ НЕ МОГУ. После нескольких часов опробования почти всех возможных решений это было окончательным. В сочетании с решением @Stefan Seidel: <policy domain = "coder" rights = "read | write" pattern = "PDF" />

Luís Assunção 19.10.2020 23:49

мне тоже понадобился перезапуск php fpm

thindery 13.01.2021 18:17

Если вы используете plesk, имя службы - plesk-php74-fpm.

Tofandel 02.02.2021 18:40

Спасибо, чувак, это очень помогло!

Volker Andres 27.09.2021 12:58

Спасибо за это. В моем случае мне пришлось перезагрузить apache.

Steve Chamaillard 30.09.2021 11:59

Работает в 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}" /> мне не понадобилось

leezu 13.11.2020 05:41

Добавление к ответу Стефана Зайделя.

Ну, по крайней мере, в Ubuntu 20.04.2 LTS или, может быть, в других версиях вы действительно не можете редактировать файл policy.xml непосредственно в графическом интерфейсе. Вот терминальный способ его отредактировать.

  1. Откройте файл policy.xml в терминале, введя эту команду -

    sudo nano /etc/ImageMagick-6/policy.xml

  2. Теперь напрямую отредактируйте файл в терминале, найдите <policy domain = "coder" rights = "none" pattern = "PDF" /> и замените none на read|write, как показано на рисунке. Затем нажмите Ctrl + X, чтобы выйти.

Edit in terminal

Не забудьте нажать ctrl + O для сохранения перед выходом

tngotran 01.06.2021 10:19

Это сработало для меня, Ubuntu 21.04. Спасибо!

rob grune 01.08.2021 09:19
Ответ принят как подходящий

Изменение 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 позволяет выполнять рендеринг непосредственно в желаемый формат)

Вау, спасибо за действительно отличный обходной путь и безопасно для этой проблемы; заслуживает большего количества голосов!

eMPee584 05.09.2021 23:37

Манджаро Апрель 2021 г.

Просто удалите раскомментированную строку внутри <policymap> в /etc/ImageMagick-7/policy.xml

Спасибо, это помогло мне!

Philipp Moers 03.09.2021 15:28

Другие вопросы по теме