конвертувати: не дозволено `aaaa` @ помилка / constitute.c / ReadImage / 453


309

Я хочу створити картинку captcha, використовуючи convertImageMagick.

І я слідую за цим , але є якась проблема.

Введення в мою оболонку Linux:

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

Помилка:

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

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

Я незрозумілий. Будь-яка порада, будь ласка?


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

Повідомлення про виняток: неможливо створити тимчасовий файл ..... Дозвіл відхилено @ помилка / 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).


54
Це має бути прийнятною відповіддю, якщо ви відчували цю проблему у вікні Ubuntu з 4 жовтня 2018 року. Будь-які інші проблеми з інших дистрибутивів?
ЛукасБр

12
Я також просто отримую цю проблему саме сьогодні на Ubuntu 16.04. Чи щось змінилося? Крім того, мені не потрібно було додавати рядок LABEL, просто змініть права на PDF з "немає" на "читати".
Брайант Коу

4
Вирішує дуже подібну проблему в моїй коробці Ubuntu 18.04.1 LTS
mhernandez

3
На моєму сервері policy.xmlфайл востаннє оновлювався 29 вересня, але проблеми виникають саме сьогодні. Я використовую сервер ubuntu 14.04.5, але встановлюю автоматичне оновлення. У підходящому журналі я знайшов про це оновлення:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia

12
ось пов’язаний журнал змін: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia

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".


1
Я на openSuse Leap 15.0 і використовував "зіставити" для порівняння сторінок PDF, така ж помилка, навіть після оновлення openSuse 10 жовтня 2018 року. Після зміни рядка, як описано тут, він спрацював.
Кекс Доза

Я на Ubuntu Xenial 16.04 LTS і раптом я почав бачити цю помилку в журналах Apache. Я підтверджую, що після зміни політики, описаної тут, проблема була вирішена.
user2641103

5
Це мінімально правильна відповідь - відповідь sNICkerssss технічно правильна, проте для використання командного рядка convertв PDF потрібен лише один крок .
davidA

1
Ця "проблема" - це швидке та брудне "виправлення" функціональності Ghostscript, у перспективі ми повинні знайти заміну для Ghostscript (і, ймовірно, ImageMagick).
9ilsdx 9rvj 0lo

4
Не робіть цього. Це обмеження було введено як міра безпеки через можливе віддалене виконання коду (див. Запуск runpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Тож правильна відповідь: Ви повинні використовувати іншу програму для цього завдання.
Маріан

66

Примітка: це рішення та будь-яке інше рішення "редагувати 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
Не робіть цього. Це обмеження було введено як міра безпеки через можливе віддалене виконання коду (див. Запуск runpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Тож правильна відповідь: Ви повинні використовувати іншу програму для цього завдання.
Маріан

5
@Marian Використання іншої програми не корисно - ОП запитала конкретно про ImageMagick. Відповідь повинна бути "Ви повинні знати, що ви робите, робіть це на свій страх і ризик, переконайтеся, що система захищена. Ось чому не слід, і ось як це зробити".
КолонУК

2
ОП (і люди, що потрапляють сюди за допомогою веб-пошуку, включаючи мене) до цього часу використовували ImageMagick; тому, звичайно, їх першою спробою у вирішенні цього питання є пошук рішення за допомогою ImageMagick, оскільки для цього потрібна найменша кількість змін. Це не означає, що вони беззастережно хочуть використовувати ImageMagick.
Маріан

3
Я вважаю цей зневажливий підхід до безпеки дуже неприйнятним для запитань, які тисячі відвідувачів переглядають (ця сторінка була переглянута в 100 тисяч разів і є головним результатом пошуку цієї проблеми) - і давайте зрозуміти, тут була велика і голосова спроба підкреслити важливість цієї вразливості, включаючи спеціалізований веб-сайт, створений для його оприлюднення ( 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
Більш стисло. А для редагування файлу всередині / etc потрібно sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
судо


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 заповнити 'url ( https://website.com/image.png "| ls" -la) "поп-графічний контекст

І

Будь-яка версія нижче 7.0.1-2 або 6.9.4-0 є потенційно вразливою, і постраждалі сторони повинні якомога швидше оновити до останньої версії ImageMagick.

Джерело


3
Я не коментував MVG та PDF -> JPG конверсія все ще працює. Дякую.
Риму Аткінсон

1
6.7.7-10 виглядає як найновіша версія, випущена 28.09.2018). Що я пропускаю? $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
гаразд каже, Відновіть Моніку

Це допомогло на Ubuntu 18.04 ImageMagick 6.9.7-4. Дякую.
І

11

Просто видаліть /etc/ImageMagick/policy.xml файл.


1
простий, але досконалий. Я зробив це, коли тест провалився на травісі
Ден Рей Окіндо

1
Це єдине рішення, яке працювало з тонни постів. Я перейменував його на policy-disabled.xml. Я думаю , що буде відновити його , поки я не впевнений , що питання безпеки розглядаються
groovenectar

І після перезавантаження вашого ядра у випадку з ноутбуком з юпітером
Ніколь Дуглас

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

зміни:

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

до:

policy domain = "coder" rights = "читати | писати" 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 Е (3) функції.

Якщо ви рендеруєте файли EPS, додайте -dEPSCropтак, щоб він не накладав результат на розмір сторінки, а використовуйте -sDEVICE=pngalphaдля отримання прозорих фонів.


Дякуємо за безпечніше рішення. Не впевнений, що я колись зможу запам'ятати параметри командного рядка GhostScript! :)
Cris Luengo

@CrisLuengo я теж не буду. Ось чому я розмістив його на стільки результатах Google, скільки я міг знайти, де це була хороша відповідь на поставлене питання. : P
ssokolow

1
Я знайшов хороші результати, використовуючи -r600 -dDownScaleFactor=4для створення файлу зі 150 dpi, але краще згладжування.
Джон Коул

0

У мене також виникла помилка error/constitute.c/ReadImage/453 при спробі перетворити eps в gif з магією зображення. Я спробував рішення, запропоноване sNICkerssss, але все ж мав помилки (хоч і відмінні від першої). 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" />

1
Це насправді не відповідає на питання. Якщо у вас інше питання, ви можете задати його, натиснувши Задати питання . Ви також можете додати щедрості, щоб привернути більше уваги до цього питання, як тільки у вас буде достатня репутація . - З огляду
Sirence

Дякую за пропозицію. Я свою відповідь тим часом відредагував. У всякому разі, я дійсно відчував, що це повинен бути коментар до відповіді sNICkerssss, але, оскільки я не можу додати, це найкращий спосіб, який я зрозумів
lambertmular

@Sirence - це відповідь, думка бідна, оскільки вона копіює з інших відповідей.
9ilsdx 9rvj 0lo

@ 9ilsdx9rvj0lo мій коментар був від редагування. stackoverflow.com/posts/52700739/revisions
Sirence
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.