convertir: non autorisé `aaaa` @ error / constituent.c / ReadImage / 453

309

Je veux créer une photo captcha en utilisant convertImageMagick.

Et je suis ceci , mais il y a un problème.

Entrée dans mon shell Linux:

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

L'erreur est:

convertir: non autorisé adfgh@ error / constituent.c / ReadImage / 453. convertir: il manque un nom de fichier d'image ./test.png@ error / convert.c / ConvertImageCommand / 3015

Mon ImageMagick: Version: 6.7.2-7, je l'installe avec yum install ImageMagick.

Je ne sais rien. Un conseil s'il vous plait?

jianwei
la source
7
Revérifiez policy.xml. Les options de sécurité peuvent empêcher le label:protocole.
emcconville
2
Merci! Je modifie le policy.xml, commentez cette ligne "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Ça marche ! Merci !
jianwei
3
Où se trouve le policy.xml?
Arnold Roa
3
/etc/ImageMagick/policy.xml
jianwei
6
/etc/ImageMagick-6/policy.xml
xerostomus

Réponses:

445

Remarque: la solution dans cette réponse et dans d'autres réponses consiste à désactiver les mesures de sécurité qui sont là pour corriger les vulnérabilités d'exécution de code arbitraire. Voir par exemple cette annonce liée à ghostscript et cette annonce liée à ubuntu . N'allez de l'avant avec ces solutions que si l'entrée convertprovient d'une source fiable.

J'utilise ImageMagick en php (v.7.1) pour découper un fichier PDF en images.

J'ai d'abord eu des erreurs comme:

Type d'exception: ImagickException

Message d'exception: non autorisé ..... @ error / constituent.c / ReadImage / 412

Après quelques changements, /etc/ImageMagick-6/policy.xmlje commence à avoir des erroes comme:

Type d'exception: ImagickException

Message d'exception: impossible de créer un fichier temporaire ..... Autorisation refusée @ error / pdf.c / ReadPDFImage / 465

Ma solution :

En dossier /etc/ImageMagick-6/policy.xml(ou /etc/ImageMagick/policy.xml)

  1. ligne de commentaire

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. changer de ligne

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

    à

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. ajouter une ligne

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

Redémarrez ensuite votre serveur Web (nginx, apache).

sNICkerssss
la source
54
Cela devrait être la réponse acceptable si vous avez rencontré ce problème sur une boîte Ubuntu depuis le 4 octobre 2018. D'autres problèmes avec d'autres distributions?
LucasBr
12
Je reçois également ce problème juste aujourd'hui sur Ubuntu 16.04. Quelque chose a-t-il changé? De plus, je n'ai pas eu besoin d'ajouter la ligne LABEL, il suffit de changer les droits du PDF de "aucun" à "lire".
Bryant Kou
4
Résout un problème très similaire dans ma boîte Ubuntu 18.04.1 LTS
mhernandez
3
Sur mon serveur, le policy.xmlfichier a été mis à jour pour la dernière fois le 29 septembre, mais les problèmes surviennent aujourd'hui. J'utilise le serveur Ubuntu 14.04.5, mais je mets à jour automatiquement. Dans le journal d'apt, j'ai trouvé à propos de cette mise à jour:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia
12
voici le changelog associé: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia
161

J'utilise plusieurs fois la convertcommande ImageMagic pour convertir des *.tiffichiers en *.pdffichiers.

Je ne sais pas pourquoi mais aujourd'hui j'ai commencé à recevoir l'erreur suivante:

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

Après avoir lancé la commande:

convert a.tif a.pdf

Après avoir lu les réponses ci-dessus, j'ai édité le fichier /etc/ImageMagick-6/policy.xml

et a changé la ligne:

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

à

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

et maintenant tout fonctionne bien.

J'ai "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" sur "Ubuntu 16.04.5 LTS".

Lv2eof
la source
1
Je suis sur openSuse Leap 15.0 et j'ai utilisé "comparer" pour comparer les pages PDF, même erreur, même après une mise à jour par openSuse le 10 octobre 2018. Après avoir changé la ligne comme décrit ici, cela a fonctionné.
Dose du
Je suis sur Ubuntu Xenial 16.04 LTS et soudain, j'ai commencé à voir cette erreur dans les journaux Apache. Je confirme qu'après avoir modifié la politique comme décrit ici, le problème a été résolu.
user2641103
5
C'est la réponse correcte minimale - la réponse de sNICkerssss est techniquement correcte, mais une seule étape est nécessaire pour l'utilisation en ligne de commande convertde PDF.
davidA
1
Ce «problème» est une «solution» rapide et sale à la fonctionnalité Ghostscript, à long terme, nous devrions trouver un remplacement pour Ghostscript (et probablement ImageMagick).
9ilsdx 9rvj 0lo
4
Ne fais pas ça. Cette restriction a été introduite par mesure de sécurité en raison de l'exécution possible de code à distance (voir launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). La bonne réponse est donc: vous devez utiliser un autre programme pour cette tâche.
Marian
66

Remarque: cette solution et toute autre solution "modifier la politique.xml" désactive les mesures de sécurité contre les vulnérabilités d'exécution de code arbitraire dans ImageMagick. Si vous devez traiter une entrée que vous ne contrôlez pas à 100%, vous devez utiliser un programme différent (pas ImageMagick).

Si vous êtes toujours là, vous essayez de modifier des images sur lesquelles vous avez un contrôle total, que vous savez sûres et qui ne peuvent pas être modifiées par les utilisateurs.

Il y a un /etc/ImageMagick/policy.xmlfichier qui est installé par yum. Il interdit presque tout (pour plus de sécurité et pour protéger votre système contre les surcharges d'appels ImageMagick).

Si vous obtenez une ReadImageerreur comme ci-dessus, vous pouvez changer la ligne en:

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

ce qui devrait résoudre le problème.

Le fichier contient un tas de documentation, vous devriez donc le lire. Par exemple, si vous avez besoin de plus d'autorisations, vous pouvez les combiner comme:

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

... ce qui est préférable à la suppression de toutes les vérifications des autorisations (par exemple, la suppression ou la mise en commentaire de la ligne).

Kristina
la source
2
Ne fais pas ça. Cette restriction a été introduite par mesure de sécurité en raison de l'exécution possible de code à distance (voir launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). La bonne réponse est donc: vous devez utiliser un autre programme pour cette tâche.
Marian
5
@Marian L'utilisation d'un autre programme n'est pas utile - l'OP a posé des questions spécifiques sur ImageMagick. La réponse devrait être "Vous devez savoir ce que vous faites, le faire à vos risques et périls, vous assurer que votre système est sécurisé, voici pourquoi vous ne devriez pas, et voici comment le faire".
KolonUK
2
L'OP (et les gens qui arrivent ici par la recherche sur le Web, y compris moi) ont utilisé ImageMagick jusqu'à présent; Alors bien sûr, leur premier essai pour résoudre ce problème est de trouver une solution en utilisant ImageMagick, car cela nécessite le moins de changements. Cela ne signifie pas qu'ils souhaitent inconditionnellement utiliser ImageMagick.
Marian
3
Je trouve cette approche dédaigneuse de la sécurité très inappropriée pour un site de questions-réponses vu par des milliers (cette page a été vue 100 000 fois et est le résultat de recherche le plus important pour ce problème) - et soyons clairs ici, il y a eu une tentative importante et vocale de souligner l'importance de cette vulnérabilité, y compris un site dédié mis en place pour la faire connaître ( imagetragick.com ) - La suggestion de Marian selon laquelle des alternatives devraient être recherchées plutôt que de contourner la sécurité est valide. J'ai choisi d'utiliser GIMP à la place. popplerest une alternative à GhostScript (qui convertrepose sur la pixellisation des pages PDF en images)
Louis Maddox
1
N'y a-t-il pas une option de ligne de commande pour désactiver temporairement la politique de sécurité? Ensuite, nous pourrions l'utiliser pour des fichiers PDF spécifiques auxquels nous faisons confiance.
HRJ
27

Si quelqu'un doit le faire avec une seule commande après l'installation, exécutez ceci!

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
la source
6
Plus court:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
leftaroundabout
5
Plus concis. Et sudo est nécessaire pour éditer un fichier dans / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
assurez-vous de mettre à jour ghostscript kb.cert.org/vuls/id/332928
ykay dit Reinstate Monica
24

La réponse avec les votes les plus élevés (je n'ai pas assez de réputation pour y ajouter des commentaires) suggère de commenter la ligne MVG, mais gardez cela à l'esprit:

CVE-2016-3714

ImageMagick prend en charge les fichiers ".svg / .mvg", ce qui signifie que les attaquants peuvent créer du code dans un langage de script, par exemple MSL (Magick Scripting Language) et MVG (Magick Vector Graphics), le télécharger sur un serveur déguisé en fichier image et forcer le logiciel pour exécuter des commandes malveillantes côté serveur comme décrit ci-dessus. Par exemple, l'ajout des commandes suivantes dans un fichier et son téléchargement sur un serveur Web qui utilise une version ImageMagick vulnérable entraînera l'exécution de la commande "ls -la" sur le serveur.

exploit.jpg:

pousser la boîte de dialogue de contexte graphique 0 0 640 480 remplir le contexte graphique de pop 'url ( https://website.com/image.png "| ls" -la)'

Et

Toute version antérieure à 7.0.1-2 ou 6.9.4-0 est potentiellement vulnérable et les parties concernées devraient dès que possible mettre à niveau vers la dernière version d'ImageMagick.

La source

Nikolay Ivanov
la source
3
Je n'ai pas commenté MVG et PDF -> La conversion JPG fonctionne toujours. Je vous remercie.
Rimu Atkinson
1
6.7.7-10 ressemble à la dernière version, publiée le 28/09/2018). Qu'est-ce que je rate? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran
il existe une version plus récente imagemagick.org/script/download.php Votre distribution Linux en utilise probablement une plus ancienne. Ubuntu 16.04 utilise actuellement le 6.8.9-9
Nikolay Ivanov
1
Bien, la solution appropriée pour l'équipe Ubuntu serait de mettre à jour imagemagick vers une version plus récente, et non de casser celle existante.
9ilsdx 9rvj 0lo
2
Non. Ubuntu est une distribution avec gel des fonctionnalités et ne livrera pas de nouvelles versions en amont.
Buo-Ren Lin
19

Après une récente mise à jour de mon système Ubuntu 16.04, j'ai également commencé à obtenir cette erreur lorsque j'essaie d'exécuter la conversion sur des fichiers .ps pour les convertir en pdfs.

Cette correction a fonctionné pour moi:

Dans une exécution de terminal:

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

Cela devrait ouvrir le fichier policy.xml dans l'éditeur de texte gedit. Si ce n'est pas le cas, votre image magick peut être installée à un endroit différent. Puis changez

rights="none" 

à

rights="read | write" 

pour les lignes PDF, EPS et PS près du bas du fichier. Enregistrez et quittez, et l'image magick devrait alors fonctionner à nouveau.

Murray Hoggett
la source
1
assurez-vous de mettre à jour ghostscript kb.cert.org/vuls/id/332928
ykay dit Reinstate Monica
Cela a aidé Ubuntu 18.04 ImageMagick 6.9.7-4. Merci.
et le
11

Supprimez simplement le fichier /etc/ImageMagick/policy.xml.

Jarda Pavlíček
la source
1
simple mais parfait. je l'ai fait car le test échoue sur travis
Dan Rey Oquindo
1
C'est la seule solution qui fonctionnait à partir de tonnes de messages. Je l'ai renommé policy-disabled.xml. Je pense que je vais le restaurer jusqu'à ce que je sois certain que les problèmes de sécurité sont résolus
groovenectar
Et après redémarrage de votre noyau dans le cas du cahier jupyter
Nicole Douglas
2

Après avoir lu plusieurs suggestions ici et combiné les idées, pour moi, les modifications suivantes dans /etc/ImageMagick-6/policy.xml étaient nécessaires:

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

... rights = "none" n'a pas aidé. ... pattern = "LABEL" n'était pas nécessaire. Bien que je ne travaille pas avec de gros fichiers png (seulement ~ 1 Mo), certains changements de limites de mémoire étaient également nécessaires:

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

(au lieu de 256 Mo), et

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

(au lieu de 128 Mo)

Kristjan Adojaan
la source
2

Si vous n'avez pas besoin de gérer les fichiers raster et PDF / PS / EPS via le même outil, ne desserrez pas la sécurité d'ImageMagick.

Au lieu de cela, gardez votre défense en profondeur pour vos applications Web intactes, vérifiez que votre Ghostscript a été corrigé pour toutes les -dSAFERvulnérabilités connues , puis invoquez-le directement.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER vous éloigne de la compatibilité héritée «exécuter Postscript vous donnera la permission complète d'interagir avec le monde extérieur en tant que langage de programmation complet».
  • -r300 définit le DPI souhaité sur 300 (la valeur par défaut est 72)
  • -sDEVICEspécifie le format de sortie (voir la section Périphériques du manuel pour d'autres choix.)
  • -o est un raccourci pour -dBATCH -dNOPAUSE -sOutputFile=
  • Cette section du manuel Ghostscript donne quelques exemples de formats pour la sortie de nom de fichier multi-fichier mais, pour la définition de la syntaxe réelle, elle vous renvoie à la documentation de la fonction C printf (3) .

Si vous effectuez le rendu de fichiers EPS, ajoutez-le de -dEPSCropmanière à ne pas ajuster votre sortie à la taille de la page et à utiliser -sDEVICE=pngalphapour obtenir des arrière-plans transparents.

ssokolow
la source
Merci pour une solution plus sûre. Je ne suis cependant pas sûr de pouvoir me souvenir des options de la ligne de commande GhostScript! :)
Cris Luengo
@CrisLuengo non plus. C'est pourquoi je l'ai posté sur autant de résultats Google que j'ai pu trouver où c'était une bonne réponse à la question posée. : P
ssokolow
1
J'ai trouvé de bons résultats en utilisant -r600 -dDownScaleFactor=4pour créer un fichier avec une résolution de 150 dpi mais un meilleur anti-aliasing.
John Cole
0

J'ai également eu l'erreur error/constitute.c/ReadImage/453 en essayant de convertir un eps en un gif avec magick image. J'ai essayé la solution proposée par sNICkerssss mais avait encore des erreurs (si différent du premier) e error/constitute.c/ReadImage/412 Ce qui a résolu le problème était de mettre readà d' autres entrées

 <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
la source
1
Cela ne répond pas vraiment à la question. Si vous avez une autre question, vous pouvez la poser en cliquant sur Poser une question . Vous pouvez également ajouter une prime pour attirer davantage l'attention sur cette question une fois que vous avez suffisamment de réputation . - De l'avis
Sirence
Merci pour la suggestion. J'ai édité ma réponse en attendant. Quoi qu'il en soit, je pensais vraiment que cela aurait dû être un commentaire sur la réponse de sNICkerssss, mais comme je ne peux pas l'ajouter, c'est la meilleure façon de comprendre
lambertmular
@Sirence c'est une réponse, jugée médiocre car elle copie d'autres réponses.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo mon commentaire était avant la modification. stackoverflow.com/posts/52700739/revisions
Sirence