конвертировать: не авторизовано `aaaa` @ error / constitute.c / ReadImage / 453

309

Я хочу создать картинку convertс картинки из ImageMagick.

И я следую за этим , но есть некоторые проблемы.

Входные данные В моей оболочке Linux:

convert -background white -fill black -font FreeSerif-Bold -pointsize 36 label:'adfgh' ./test.png

Ошибка:

конвертировать: не авторизовано adfgh@ error / constitute.c / ReadImage / 453. convert: отсутствует изображение с именем файла ./test.png@ error / convert.c / ConvertImageCommand / 3015

Мой ImageMagick: Версия: 6.7.2-7, я устанавливаю его с yum install ImageMagick.

Я невежественен. Любой совет, пожалуйста?

Jianwei
источник
7
Двойная проверка policy.xml. Параметры безопасности могут помешать label:протоколу.
emcconville
2
Спасибо! Я изменяю policy.xml, комментирую эту строку "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Это работает! Спасибо !
Jianwei
3
Где находится файл policy.xml?
Арнольд Роа
3
/etc/ImageMagick/policy.xml
jianwei
6
/etc/ImageMagick-6/policy.xml
xerostomus

Ответы:

445

Примечание: решение в этом и других ответах включает в себя отключение мер безопасности, которые существуют для устранения уязвимостей при выполнении произвольного кода. Посмотрите, например, это объявление, связанное с ghostscript, и это объявление, связанное с Ubuntu . Используйте эти решения только в том случае, если входные данные convertпоступают из надежного источника.

Я использую ImageMagick в php (v.7.1), чтобы нарезать PDF-файл на изображения.

Сначала я получил такие ошибки, как:

Тип исключения: ImagickException

Сообщение об исключении: не авторизовано ..... @ error / constitute.c / ReadImage / 412

После некоторых изменений /etc/ImageMagick-6/policy.xmlя начинаю получать ошибки, такие как:

Тип исключения: ImagickException

Сообщение об исключении: невозможно создать временный файл ..... Отказано в доступе @ error / pdf.c / ReadPDFImage / 465

Мое исправление :

В файле /etc/ImageMagick-6/policy.xml(или /etc/ImageMagick/policy.xml)

  1. строка комментария

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. изменить линию

    <policy domain="coder" rights="none" pattern="PDF" />

    в

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. добавить строку

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

Затем перезапустите ваш веб-сервер (nginx, apache).

sNICkerssss
источник
54
Это должно быть приемлемым ответом, если вы столкнулись с этой проблемой на Ubuntu box 4 октября 2018 года. Есть ли другие проблемы из других дистрибутивов?
LucasBr
12
Я также только что получил эту проблему только сегодня на Ubuntu 16.04. Что-то изменилось? Также мне не нужно было добавлять строку LABEL, просто измените права на PDF с «нет» на «читать».
Брайант Коу
4
Решает очень похожую проблему в моем Ubuntu 18.04.1 LTS box
mhernandez
3
На моем сервере policy.xmlфайл последний раз обновлялся 29 сентября, но проблемы только сегодня возникают. Я использую Ubuntu Server 14.04.5, но установить автоматическое обновление. В журнале apt я узнал об этом обновлении:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Донни Курния
12
вот соответствующий список изменений: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Донни Курния,
161

Я много раз использую convertкоманду ImageMagic для преобразования *.tifфайлов в *.pdfфайлы.

Я не знаю почему, но сегодня я начал получать следующую ошибку:

convert: not authorized `a.pdf' @ error/constitute.c/WriteImage/1028.

После выдачи команды:

convert a.tif a.pdf

Прочитав приведенные выше ответы, я отредактировал файл /etc/ImageMagick-6/policy.xml

и изменил строку:

policy domain="coder" rights="none" pattern="PDF" 

в

policy domain="coder" rights="read|write" pattern="PDF"

и теперь все работает отлично.

У меня есть «ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28» на «Ubuntu 16.04.5 LTS».

Lv2eof
источник
1
Я использую openSuse Leap 15.0 и использовал «сравнение» для сравнения страниц PDF, та же ошибка, даже после обновления openSuse 10 октября 2018 года. После изменения строки, как описано здесь, все заработало.
Кекс Доза
Я нахожусь на Ubuntu Xenial 16.04 LTS, и внезапно я начал видеть эту ошибку в журналах Apache. Я подтверждаю, что после изменения политики, как описано здесь, проблема была решена.
user2641103
5
Это минимальный правильный ответ - ответ sNICkerssss технически правильный, однако для использования командной строки convertв PDF требуется только один шаг .
Дэвид
1
Эта «проблема» - быстрое и грязное «решение» функциональности Ghostscript, в долгосрочной перспективе мы должны найти замену Ghostscript (и, вероятно, ImageMagick).
9ilsdx 9rvj 0lo
4
Не делай этого. Это ограничение было введено в качестве меры безопасности из-за возможного удаленного выполнения кода (см. Launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Итак, правильный ответ: вы должны использовать другую программу для этой задачи.
Мариан
66

Примечание. Это решение и любое другое решение «edit the policy.xml» отключает меры безопасности от уязвимостей при выполнении произвольного кода в ImageMagick. Если вам нужно обработать ввод, который вы не контролируете на 100%, вам следует использовать другую программу (не ImageMagick).

Если вы все еще здесь, вы пытаетесь редактировать изображения, над которыми у вас есть полный контроль, вы знаете, что они безопасны и не могут быть отредактированы пользователями.

Есть /etc/ImageMagick/policy.xmlфайл, который установлен yum. Он запрещает практически все (в целях безопасности и защиты вашей системы от перегрузки вызовами ImageMagick).

Если вы получаете сообщение ReadImageоб ошибке, как указано выше, вы можете изменить строку на:

<policy domain="coder" rights="read" pattern="LABEL" />

который должен решить проблему.

Файл содержит кучу документации, так что вы должны прочитать это. Например, если вам нужны дополнительные разрешения, вы можете объединить их следующим образом:

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

... что предпочтительнее, чем удаление всех проверок прав доступа (т.е. удаление или комментирование строки).

кристина
источник
2
Не делай этого. Это ограничение было введено в качестве меры безопасности из-за возможного удаленного выполнения кода (см. Launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Итак, правильный ответ: вы должны использовать другую программу для этой задачи.
Мариан
5
@Marian Использование другой программы бесполезно - ОП специально спрашивал об ImageMagick. Ответ должен звучать так: «Вы должны знать, что вы делаете, делать это на свой страх и риск, убедиться, что ваша система защищена, вот почему вы не должны этого делать, а вот как это сделать».
KolonUK
2
ОП (и люди, которые попадают сюда с помощью веб-поиска, включая меня) до сих пор используют ImageMagick; поэтому, конечно, их первая попытка решить эту проблему - найти решение с помощью ImageMagick, потому что это требует наименьшего количества изменений. Это не значит, что они безоговорочно хотят использовать ImageMagick.
Мариан
3
Я нахожу этот пренебрежительный подход к безопасности очень неподходящим для сайта вопросов и ответов, который видели тысячи (эта страница была просмотрена 100 000 раз и является лучшим результатом поиска для этой проблемы) - и давайте поясним, что была большая и громкая попытка подчеркнуть важность этой уязвимости, включая выделенный сайт, созданный для ее публикации ( imagetragick.com ) - предложение Мэриана о том, что следует искать альтернативы, а не обходить их, является обоснованным. Я решил использовать GIMP вместо этого. popplerальтернатива GhostScript (который convertоснован на растеризации страниц PDF в изображениях)
Луи Мэддокс,
1
Нет ли параметра командной строки для временного отключения политики безопасности? Тогда мы могли бы использовать его для конкретных файлов PDF, которым мы доверяем.
HRJ
27

Если кому-то нужно сделать это одной командой после установки, запустите это!

sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml
Армен
источник
6
Короче:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
оставил около
5
Более лаконично. И sudo требуется отредактировать файл внутри / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
не забудьте обновить ghostscript kb.cert.org/vuls/id/332928
ykay говорит восстановить Monica
24

Ответ с наибольшим количеством голосов (у меня недостаточно репутации, чтобы добавлять комментарии) предлагает закомментировать строку MVG, но имейте в виду следующее:

CVE-2016-3714

ImageMagick поддерживает файлы «.svg / .mvg», что означает, что злоумышленники могут создавать код на языке сценариев, например MSL (Magick Scripting Language) и MVG (Magick Vector Graphics), загружать его на сервер, замаскированный под файл изображения, и принудительно программное обеспечение для запуска вредоносных команд на стороне сервера, как описано выше. Например, добавление следующих команд в файл и загрузка его на веб-сервер, который использует уязвимую версию ImageMagick, приведет к выполнению команды "ls -la" на сервере.

exploit.jpg:

push графический контекст просмотра 0 0 640 480 pop 'url ( https://website.com/image.png "| ls" -la) "pop графический контекст

И

Любая версия ниже 7.0.1-2 или 6.9.4-0 потенциально уязвима, и заинтересованные стороны должны как можно скорее обновить ее до последней версии ImageMagick.

Источник

Николай Иванов
источник
3
Я не комментировал MVG и PDF -> JPG конвертация все еще работает. Спасибо.
Риму Аткинсон
1
6.7.7-10 выглядит как новейшая версия, выпущенная 28.09.2008). Чего мне не хватает? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran
есть более новая версия imagemagick.org/script/download.php Возможно, ваш дистрибутив Linux использует более старую версию . Ubuntu 16.04 в настоящее время использует 6.8.9-9
Николай Иванов
1
Хорошо, поэтому правильным решением для команды Ubuntu было бы обновить imagemagick до более новой версии, а не ломать существующую.
9ilsdx 9rvj 0lo
2
Нет. Ubuntu - это дистрибутив с ограниченным набором функций, который не будет поставлять более новые выпуски.
Буо-Рен Лин
19

После недавнего обновления в моей системе Ubuntu 16.04 я также начал получать эту ошибку при попытке запустить конвертирование в файлы .ps для преобразования их в pdfs.

Это исправление сработало для меня:

В терминале запустить:

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

Это должно открыть файл policy.xml в текстовом редакторе gedit. Если этого не произойдет, ваша магия изображения может быть установлена ​​в другом месте. Тогда поменяй

rights="none" 

в

rights="read | write" 

для PDF, EPS и PS строк в нижней части файла. Сохраните и выйдите, и изображение снова должно сработать.

Мюррей Хоггетт
источник
1
не забудьте обновить ghostscript kb.cert.org/vuls/id/332928
ykay говорит восстановить Monica
Это помогло в Ubuntu 18.04 ImageMagick 6.9.7-4. Спасибо.
и
11

Просто удалите файл /etc/ImageMagick/policy.xml.

Ярда Павличек
источник
1
просто, но идеально. я сделал это, так как тест провалился на Трэвисе
Дэн Рей Окиндо
1
Это единственное решение, которое работало из тонны постов. Я переименовал его в policy-disabled.xml. Я думаю, что восстановлю это, пока я не буду уверен, что проблемы безопасности будут решены
groovenectar
И после перезагрузки вашего ядра в случае с ноутбуком Jupyter
Николь Дуглас
2

После прочтения нескольких предложений и объединения идей мне потребовались следующие изменения в /etc/ImageMagick-6/policy.xml:

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

... rights = "none" не помогло. ... pattern = "LABEL" не было необходимости. Хотя я не работаю с большими файлами png (всего ~ 1 Мб), некоторые изменения в пределах памяти также были необходимы:

<policy domain="resource" name="memory" value="2GiB"/>

(вместо 256Mib) и

<policy domain="resource" name="area" value="2GB"/>

(вместо 128 МБ)

Кристьян Адоян
источник
2

У меня была эта ошибка при попытке конвертировать pdf в jpg и я решил ее с помощью этого метода: sudo vi /etc/ImageMagick*/policy.xml

изменение:

политика домен = "кодер" права = "нет" шаблон = "PDF"

чтобы:

policy domain = "coder" rights = "read | write" pattern = "PDF"

Источник: http://realtechtalk.com/ImageMagick_Convert_PDF_Not_Authorized-2217-articles

Ариб Су Ясир
источник
2

Если вам не нужно обрабатывать растровые файлы и PDF / PS / EPS с помощью одного и того же инструмента, не ослабляйте безопасность ImageMagick.

Вместо этого сохраняйте глубину защиты ваших веб-приложений, убедитесь, что ваш Ghostscript был исправлен для всех известных -dSAFERуязвимостей, а затем вызовите его напрямую.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER выбирает вас из устаревшей совместимости: «запустить Postscript получит полное разрешение на взаимодействие с внешним миром в качестве языка программирования полного тьюринга».
  • -r300 устанавливает желаемый DPI на 300 (по умолчанию 72)
  • -sDEVICEуказывает формат вывода ( другие варианты см. в разделе « Устройства» в руководстве).
  • -o это сокращение для -dBATCH -dNOPAUSE -sOutputFile=
  • В этом разделе руководства Ghostscript приводятся некоторые примеры форматов для многофайлового вывода имени файла, но для фактического определения синтаксиса он указывает на документацию для функции C printf (3) .

Если вы визуализируете EPS-файлы, добавьте их, -dEPSCropчтобы они не дополняли ваш вывод до размера страницы и не использовали его -sDEVICE=pngalphaдля получения прозрачного фона.

ssokolow
источник
Спасибо за более безопасное решение. Не уверен, что когда-нибудь смогу вспомнить параметры командной строки GhostScript! :)
Крис Луенго
@CrisLuengo Я тоже не буду. Вот почему я опубликовал его в максимально возможном количестве результатов Google, чтобы найти хороший ответ на поставленный вопрос. : P
ssokolow
1
Я нашел хорошие результаты, используя -r600 -dDownScaleFactor=4для создания файла с разрешением 150 точек на дюйм, но лучше сглаживания.
Джон Коул
0

У меня также была ошибка error/constitute.c/ReadImage/453 при попытке конвертировать eps в gif с магией изображения. Я попробовал решение, предложенное sNICkerssss, но все еще имел ошибки (хотя и отличные от первого) e error/constitute.c/ReadImage/412 Что решило проблему, так это поставить readдругие записи

 <policy domain="coder" rights="read" pattern="PS" />
 <policy domain="coder" rights="read" pattern="EPS" />
 <policy domain="coder" rights="read" pattern="PDF" />
 <policy domain="coder" rights="read" pattern="XPS" />
 <policy domain="coder" rights="read|write" pattern="LABEL" />
lambertmular
источник
1
Это на самом деле не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав Задать вопрос . Вы также можете добавить вознаграждение, чтобы привлечь больше внимания к этому вопросу, когда у вас будет достаточно репутации . - Из обзора
Sirence
Спасибо за предложение. Тем временем я отредактировал свой ответ. В любом случае, я действительно чувствовал, что это должен был быть комментарий к ответу sNICkerssss, но, поскольку я не могу добавить, это лучший способ, который я понял
lambertmular
@ Sirence, это ответ, считал плохим, потому что он копирует из других ответов.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo мой комментарий был до редактирования. stackoverflow.com/posts/52700739/revisions
Sirence