konvertieren: nicht autorisiert `aaaa` @ error / konstituieren.c / ReadImage / 453

309

Ich möchte ein Captcha-Bild mit convertImageMagick erstellen .

Und ich folge dies , aber es gibt ein Problem.

Eingabe In meiner Linux-Shell:

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

Der Fehler ist:

konvertieren: nicht autorisiert adfgh@ error / konstituieren.c / ReadImage / 453. convert: Es fehlt ein Bilddateiname ./test.png@ error / convert.c / ConvertImageCommand / 3015

Mein ImageMagick: Version: 6.7.2-7, ich installiere es mit yum install ImageMagick.

Ich habe keine Ahnung. Irgendwelche Ratschläge bitte?

Jianwei
quelle
7
Überprüfen Sie noch einmal policy.xml. Sicherheitsoptionen können das label:Protokoll verhindern .
Emcconville
2
Vielen Dank! Ich ändere die policy.xml, kommentiere diese Zeile "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Es funktioniert ! Vielen Dank !
Jianwei
3
Wo ist die policy.xml?
Arnold Roa
3
/etc/ImageMagick/policy.xml
jianwei
6
/etc/ImageMagick-6/policy.xml
Xerostomus

Antworten:

445

Hinweis: Die Lösung in dieser und anderen Antworten besteht darin, Sicherheitsmaßnahmen zu deaktivieren, mit denen Sicherheitslücken bei der Ausführung von beliebigem Code behoben werden können. Siehe zum Beispiel diese Ghostscript-bezogene und diese Ubuntu-bezogene Ankündigung. Fahren Sie mit diesen Lösungen nur fort, wenn die Eingabe convertvon einer vertrauenswürdigen Quelle stammt.

Ich benutze ImageMagick in PHP (v.7.1), um PDF-Dateien in Bilder zu schneiden.

Zuerst bekam ich Fehler wie:

Ausnahmetyp: ImagickException

Ausnahmemeldung: nicht autorisiert ..... @ error / konstituieren.c / ReadImage / 412

Nach einigen Änderungen in /etc/ImageMagick-6/policy.xmlbekomme ich Fehler wie:

Ausnahmetyp: ImagickException

Ausnahmemeldung: Temporäre Datei kann nicht erstellt werden ..... Berechtigung verweigert @ error / pdf.c / ReadPDFImage / 465

Mein Fix :

In Datei /etc/ImageMagick-6/policy.xml(oder /etc/ImageMagick/policy.xml)

  1. Kommentarzeile

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. Zeile ändern

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

    zu

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. Zeile hinzufügen

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

Starten Sie dann Ihren Webserver (Nginx, Apache) neu.

sNICkerssss
quelle
54
Dies sollte die akzeptable Antwort sein, wenn dieses Problem seit dem 4. Oktober 2018 auf einer Ubuntu-Box aufgetreten ist. Haben Sie weitere Probleme mit anderen Distributionen?
LucasBr
12
Ich bekomme dieses Problem auch erst heute unter Ubuntu 16.04. Hat sich etwas geändert? Außerdem musste ich die LABEL-Zeile nicht hinzufügen, sondern nur die Rechte für PDF von "none" in "read" ändern.
Bryant Kou
4
Löst ein sehr ähnliches Problem in meiner Ubuntu 18.04.1 LTS Box
Mhernandez
3
Auf meinem Server wurde die policy.xmlDatei zuletzt am 29. September aktualisiert, aber die Probleme treten erst heute auf. Ich verwende Ubuntu Server 14.04.5, stelle aber die automatische Aktualisierung ein. In passendem Protokoll fand ich über dieses Update:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia
12
Hier ist das zugehörige Änderungsprotokoll: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia
161

Ich verwende oft den ImageMagic- convertBefehl, um *.tifDateien in *.pdfDateien zu konvertieren .

Ich weiß nicht warum, aber heute bekam ich folgenden Fehler:

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

Nach der Ausgabe des Befehls:

convert a.tif a.pdf

Nachdem ich die obigen Antworten gelesen hatte, bearbeitete ich die Datei /etc/ImageMagick-6/policy.xml

und änderte die Zeile:

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

zu

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

und jetzt funktioniert alles gut.

Ich habe "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" auf "Ubuntu 16.04.5 LTS".

Lv2eof
quelle
1
Ich bin auf openSuse Leap 15.0 und habe "Vergleichen" verwendet, um PDF-Seiten zu vergleichen. Dieselbe Fehler, auch nach einem Update von openSuse am 10. Oktober 2018. Nachdem ich die hier beschriebene Zeile geändert habe, hat es funktioniert.
Keks Dose
Ich bin auf Ubuntu Xenial 16.04 LTS und plötzlich sah ich diesen Fehler in Apache-Protokollen. Ich bestätige, dass nach Änderung der hier beschriebenen Richtlinie das Problem behoben wurde.
user2641103
5
Dies ist die minimal richtige Antwort - die Antwort von sNICkerssss ist technisch korrekt, es ist jedoch nur ein Schritt für die Befehlszeilenverwendung von convertPDF erforderlich .
DavidA
1
Dieses "Problem" ist eine schnelle und schmutzige "Lösung" für die Ghostscript-Funktionalität. Langfristig sollten wir Ersatz für Ghostscript (und wahrscheinlich ImageMagick) finden.
9ilsdx 9rvj 0lo
4
Tu das nicht. Diese Einschränkung wurde aufgrund einer möglichen Remotecodeausführung als Sicherheitsmaßnahme eingeführt (siehe launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Die richtige Antwort lautet also: Sie sollten für diese Aufgabe ein anderes Programm verwenden.
Marian
66

Hinweis: Diese Lösung und jede andere Lösung zum Bearbeiten der Datei policy.xml deaktivieren Sicherheitsmaßnahmen gegen Sicherheitslücken bei der Ausführung von beliebigem Code in ImageMagick. Wenn Sie Eingaben verarbeiten müssen, die Sie nicht zu 100% steuern, sollten Sie ein anderes Programm verwenden (nicht ImageMagick).

Wenn Sie immer noch hier sind, versuchen Sie, Bilder zu bearbeiten, über die Sie die vollständige Kontrolle haben, die sicher sind und die von Benutzern nicht bearbeitet werden können.

Es gibt eine /etc/ImageMagick/policy.xmlDatei, die von yum installiert wird. Es erlaubt fast alles (aus Sicherheitsgründen und um Ihr System vor Überlastung durch ImageMagick-Aufrufe zu schützen).

Wenn Sie ReadImagewie oben eine Fehlermeldung erhalten, können Sie die Zeile ändern in:

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

welches das Problem beheben sollte.

Die Datei enthält eine Reihe von Dokumentationen, daher sollten Sie diese lesen. Wenn Sie beispielsweise mehr Berechtigungen benötigen, können Sie diese wie folgt kombinieren:

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

... was dem Entfernen aller Berechtigungsprüfungen (dh Löschen oder Auskommentieren der Zeile) vorzuziehen ist.

kristina
quelle
2
Tu das nicht. Diese Einschränkung wurde aufgrund einer möglichen Remotecodeausführung als Sicherheitsmaßnahme eingeführt (siehe launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Die richtige Antwort lautet also: Sie sollten für diese Aufgabe ein anderes Programm verwenden.
Marian
5
@Marian Die Verwendung eines anderen Programms ist nicht hilfreich - das OP hat speziell nach ImageMagick gefragt. Die Antwort sollte lauten: "Sie sollten wissen, was Sie tun, dies auf eigenes Risiko tun, sicherstellen, dass Ihr System sicher ist. Deshalb sollten Sie dies nicht tun und hier erfahren Sie, wie es geht."
KolonUK
2
Das OP (und die Leute, die über die Websuche hierher kommen, einschließlich mir) haben ImageMagick bisher verwendet. Der erste Versuch, dieses Problem zu lösen, besteht natürlich darin, mit ImageMagick eine Lösung zu finden, da dies die geringste Anzahl von Änderungen erfordert. Das bedeutet nicht, dass sie ImageMagick unbedingt verwenden möchten.
Marian
3
Ich finde diesen abweisenden Sicherheitsansatz für eine von Tausenden gesehene Q & A-Site sehr unangemessen (diese Seite wurde 100.000 Mal aufgerufen und ist das Top-Suchergebnis für dieses Problem) - und lassen Sie uns hier klarstellen, dass es einen großen und lautstarken Versuch gab, Stress zu verursachen Die Bedeutung dieser Sicherheitsanfälligkeit, einschließlich einer speziellen Website, die eingerichtet wurde, um sie zu veröffentlichen ( imagetragick.com ) - Marians Vorschlag, nach Alternativen zu suchen, anstatt die Sicherheit zu umgehen, ist gültig. Ich habe mich stattdessen für GIMP entschieden. popplerist eine Alternative zu GhostScript (das darauf convertberuht, PDF-Seiten in Bilder zu rasteren )
Louis Maddox
1
Gibt es keine Befehlszeilenoption, um die Sicherheitsrichtlinie vorübergehend zu deaktivieren? Dann könnten wir es für bestimmte PDF-Dateien verwenden, denen wir vertrauen.
HRJ
27

Wenn jemand dies nach der Installation mit einem Befehl tun muss, führen Sie dies aus!

sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml
Armen
quelle
6
Kürzere:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
links um den
5
Prägnanter. Und sudo ist erforderlich, um eine Datei in / etc zu bearbeiten sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
Stellen
Sie
24

Die Antwort mit den höchsten Stimmen (ich habe nicht genug Ruf, um dort einen Kommentar hinzuzufügen) schlägt vor, die MVG-Zeile zu kommentieren, aber bedenken Sie Folgendes:

CVE-2016-3714

ImageMagick unterstützt ".svg / .mvg" -Dateien, was bedeutet, dass Angreifer Code in einer Skriptsprache erstellen können, z. B. MSL (Magick Scripting Language) und MVG (Magick Vector Graphics), ihn auf einen als Bilddatei getarnten Server hochladen und die erzwingen können Software zum Ausführen bösartiger Befehle auf der Serverseite wie oben beschrieben. Wenn Sie beispielsweise die folgenden Befehle in eine Datei einfügen und auf einen Webserver hochladen, der eine anfällige ImageMagick-Version verwendet, wird der Befehl "ls -la" auf dem Server ausgeführt.

Exploit.jpg:

Push-Grafik-Kontext-Viewbox 0 0 640 480 'URL ( https://website.com/image.png "| ls" -la)' Pop-Grafik-Kontext füllen

Und

Jede Version unter 7.0.1-2 oder 6.9.4-0 ist potenziell anfällig und betroffene Parteien sollten so schnell wie möglich auf die neueste ImageMagick-Version aktualisieren.

Quelle

Nikolay Ivanov
quelle
3
Ich habe MVG und PDF nicht auskommentiert -> Die JPG-Konvertierung funktioniert immer noch. Vielen Dank.
Rimu Atkinson
1
6.7.7-10 sieht aus wie die neueste Version (veröffentlicht am 28.09.2008). Was vermisse ich? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran
Es gibt eine neuere Version imagemagick.org/script/download.php Wahrscheinlich verwendet Ihre Linux-Distribution eine ältere. Ubuntu 16.04 verwendet derzeit 6.8.9-9
Nikolay Ivanov
1
Schön, also wäre die richtige Lösung für das Ubuntu-Team, imagemagick auf eine neuere Version zu aktualisieren, nicht die bestehende zu beschädigen.
9ilsdx 9rvj 0lo
2
Nein. Ubuntu ist eine Feature-Freeze-Distribution und wird keine neueren Upstream-Versionen liefern.
Buo-Ren Lin
19

Nach einem kürzlich durchgeführten Update auf meinem Ubuntu 16.04-System wurde dieser Fehler auch angezeigt, wenn ich versuchte, die Konvertierung für .ps-Dateien auszuführen, um sie in PDFs zu konvertieren.

Dieser Fix hat bei mir funktioniert:

In einem Terminallauf:

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

Dies sollte die Datei policy.xml im gedit-Texteditor öffnen. Wenn dies nicht der Fall ist, wird Ihre Bildmagie möglicherweise an einem anderen Ort installiert. Dann ändern

rights="none" 

zu

rights="read | write" 

für PDF-, EPS- und PS-Zeilen am Ende der Datei. Speichern und beenden, und die Bildmagie sollte dann wieder funktionieren.

Murray Hoggett
quelle
1
Stellen
Sie
Dies half unter Ubuntu 18.04 ImageMagick 6.9.7-4. Vielen Dank.
Und
11

Löschen Sie einfach die Datei /etc/ImageMagick/policy.xml.

Jarda Pavlíček
quelle
1
einfach und doch perfekt. Ich habe dies getan, da der Test auf Travis fehlschlägt
Dan Rey Oquindo
1
Dies ist die einzige Lösung, die mit Tonnen von Posts funktioniert hat. Ich habe es umbenannt in policy-disabled.xml. Ich denke, ich werde es wiederherstellen, bis ich sicher bin, dass die Sicherheitsprobleme
behoben
Und nach dem Neustart Ihres Kernels im Falle eines Jupyter-Notebooks
Nicole Douglas
2

Nachdem ich hier einige Vorschläge gelesen und die Ideen kombiniert hatte, waren für mich folgende Änderungen in /etc/ImageMagick-6/policy.xml erforderlich:

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

... rights = "none" hat nicht geholfen. ... pattern = "LABEL" war nicht erforderlich. Obwohl ich nicht mit großen PNG-Dateien (nur ~ 1 MB) arbeite, waren auch einige Änderungen der Speichergrenzen erforderlich:

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

(anstelle von 256Mib) und

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

(statt 128 MB)

Kristjan Adojaan
quelle
2

Wenn Sie Rasterdateien und PDF / PS / EPS nicht mit demselben Tool verarbeiten müssen, sollten Sie die Sicherheit von ImageMagick nicht beeinträchtigen.

Halten Sie stattdessen Ihre Verteidigung für Ihre Webanwendungen intakt, überprüfen Sie, ob Ihr Ghostscript auf alle bekannten -dSAFERSicherheitslücken gepatcht wurde, und rufen Sie es dann direkt auf.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER wählt Sie aus dem Legacy-Kompatibilitätsmodus "Postscript ausführen wird die volle Berechtigung zur Interaktion mit der Außenwelt als vollständige Programmiersprache".
  • -r300 setzt die gewünschte DPI auf 300 (die Standardeinstellung ist 72)
  • -sDEVICEGibt das Ausgabeformat an ( Weitere Optionen finden Sie im Abschnitt Geräte des Handbuchs.)
  • -o ist eine Abkürzung für -dBATCH -dNOPAUSE -sOutputFile=
  • Dieser Abschnitt des Ghostscript-Handbuchs enthält einige Beispielformate für die Ausgabe von Dateinamen mit mehreren Dateien. Für die eigentliche Syntaxdefinition verweist er jedoch auf die Dokumentation für die Funktion C printf (3) .

Wenn Sie EPS-Dateien rendern, fügen -dEPSCropSie diese hinzu, damit Ihre Ausgabe nicht auf Seitengröße aufgefüllt und -sDEVICE=pngalphatransparente Hintergründe erstellt werden.

ssokolow
quelle
Vielen Dank für eine sicherere Lösung. Ich bin mir nicht sicher, ob ich mich jemals an die GhostScript-Befehlszeilenoptionen erinnern kann! :)
Cris Luengo
@CrisLuengo werde ich auch nicht. Deshalb habe ich es in so vielen Google-Ergebnissen veröffentlicht, wie ich finden konnte, wo es eine gute Antwort auf die gestellte Frage war. : P.
ssokolow
1
Ich habe gute Ergebnisse -r600 -dDownScaleFactor=4beim Erstellen einer Datei mit 150 dpi, aber besserem Anti-Aliasing erzielt .
John Cole
0

Ich hatte auch den Fehler error/constitute.c/ReadImage/453 beim Versuch, ein EPS mit Image Magick in ein GIF umzuwandeln. Ich habe die von sNICkerssss vorgeschlagene Lösung ausprobiert, hatte aber immer noch Fehler (obwohl anders als die erste). E error/constitute.c/ReadImage/412 Das Problem wurde gelöst, indem readandere Einträge verwendet wurden

 <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
quelle
1
Dies beantwortet die Frage nicht wirklich. Wenn Sie eine andere Frage haben, können Sie diese stellen, indem Sie auf Frage stellen klicken . Sie können auch ein Kopfgeld hinzufügen, um mehr Aufmerksamkeit auf diese Frage zu lenken, sobald Sie genügend Ruf haben . - Von der Überprüfung
Sirence
Danke für den Vorschlag. Ich habe meine Antwort in der Zwischenzeit bearbeitet. Wie auch immer, ich hatte wirklich das Gefühl, es hätte ein Kommentar zu sNICkerssss Antwort sein sollen, aber da ich es nicht hinzufügen kann, ist es der beste Weg, den ich herausgefunden habe
lambertmular
@ Sirence es ist eine Antwort, dachte schlecht, weil es von anderen Antworten kopiert.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo mein Kommentar war von vor der Bearbeitung. stackoverflow.com/posts/52700739/revisions
Sirence