convertir: no autorizado `aaaa` @ error / constitutivo.c / ReadImage / 453

309

Quiero crear una imagen de captcha usando convertImageMagick.

Y sigo esto , pero hay algún problema.

Entrada en mi shell de Linux:

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

El error es:

convertir: no autorizado adfgh@ error / constitutivo.c / ReadImage / 453. convertir: falta un nombre de archivo de imagen ./test.png@ error / convert.c / ConvertImageCommand / 3015

My ImageMagick: Versión: 6.7.2-7, lo instalo con yum install ImageMagick.

No tengo ni idea. ¿Algún consejo por favor?

jianwei
fuente
77
Retención doble policy.xml. Las opciones de seguridad pueden evitar el label:protocolo.
Emcconville
2
¡Gracias! Modifico el policy.xml, comento esta línea "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Funciona! Gracias !
jianwei
3
¿Dónde está el policy.xml?
Arnold Roa
3
/etc/ImageMagick/policy.xml
jianwei
66
/etc/ImageMagick-6/policy.xml
xerostomus

Respuestas:

445

Nota: la solución en esta y otras respuestas implica deshabilitar las medidas de seguridad que existen para corregir vulnerabilidades de ejecución de código arbitrario. Vea, por ejemplo, este anuncio relacionado con ghostscript y este anuncio relacionado con ubuntu . Solo avance con estas soluciones si la entrada convertproviene de una fuente confiable.

Utilizo ImageMagick en php (v.7.1) para cortar archivos PDF en imágenes.

Primero obtuve errores como:

Tipo de excepción: ImagickException

Mensaje de excepción: no autorizado ..... @ error / constitut.c / ReadImage / 412

Después de algunos cambios /etc/ImageMagick-6/policy.xml, empiezo a tener errores como:

Tipo de excepción: ImagickException

Mensaje de excepción: no se puede crear un archivo temporal ... Permiso denegado @ error / pdf.c / ReadPDFImage / 465

Mi solución :

En archivo /etc/ImageMagick-6/policy.xml(o /etc/ImageMagick/policy.xml)

  1. línea de comentarios

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

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

    a

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. añadir línea

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

Luego reinicie su servidor web (nginx, apache).

sNICkerssss
fuente
54
Esta debería ser la respuesta aceptable si experimentó este problema en un cuadro de Ubuntu desde el 4 de octubre de 2018. ¿Algún otro problema de otras distribuciones?
LucasBr
12
También estoy teniendo este problema hoy en Ubuntu 16.04. ¿Ha cambiado algo? Además, no necesitaba agregar la línea LABEL, simplemente cambie los derechos para PDF de "none" a "read".
Bryant Kou
44
Resuelve un problema muy similar en mi cuadro Ubuntu 18.04.1 LTS
mhernandez
3
En mi servidor, el policy.xmlarchivo se actualizó por última vez el 29 de septiembre, pero los problemas surgen hoy. Estoy usando el servidor ubuntu 14.04.5, pero configuré la actualización automática. En apt log, encontré sobre esta actualización:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia
12
aquí está el registro de cambios relacionado: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia
161

Uso muchas veces el convertcomando ImageMagic para convertir *.tifarchivos en *.pdfarchivos.

No sé por qué, pero hoy comencé a recibir el siguiente error:

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

Después de emitir el comando:

convert a.tif a.pdf

Después de leer las respuestas anteriores, edité el archivo /etc/ImageMagick-6/policy.xml

y cambió la línea:

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

a

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

Y ahora todo funciona bien.

Tengo "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" en "Ubuntu 16.04.5 LTS".

Lv2eof
fuente
1
Estoy en openSuse Leap 15.0 y usé "comparar" para comparar páginas PDF, el mismo error, incluso después de una actualización de openSuse el 10 de octubre de 2018. Después de cambiar la línea como se describe aquí, funcionó.
Keks Dose
Estoy en Ubuntu Xenial 16.04 LTS y de repente comencé a ver ese error en los registros de Apache. Confirmo que después de cambiar la política como se describe aquí, el problema se resolvió.
user2641103
55
Esta es la respuesta correcta mínima: la respuesta de sNICkerssss es técnicamente correcta, sin embargo, solo se necesita un paso para el uso de la línea de comandos converten PDF.
davidA
1
Este 'problema' es una 'solución' rápida y sucia de la funcionalidad de Ghostscript, a largo plazo deberíamos encontrar un reemplazo para Ghostscript (y probablemente ImageMagick).
9ilsdx 9rvj 0lo
44
No hagas esto. Esta restricción se ha introducido como una medida de seguridad debido a la posible ejecución remota de código (consulte launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Entonces la respuesta correcta es: debe usar otro programa para esta tarea.
Marian
66

Nota: esta solución y cualquier otra solución "edit the policy.xml" desactiva las medidas de seguridad contra vulnerabilidades de ejecución de código arbitrario en ImageMagick. Si necesita procesar entradas que no controla al 100%, debe usar un programa diferente (no ImageMagick).

Si todavía está aquí, está intentando editar imágenes sobre las que tiene control total, sabe que son seguras y los usuarios no pueden editarlas.

Hay un /etc/ImageMagick/policy.xmlarchivo que está instalado por yum. No permite casi todo (por seguridad y para proteger su sistema de una sobrecarga de llamadas con ImageMagick).

Si obtiene un ReadImageerror como el anterior, puede cambiar la línea a:

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

lo que debería solucionar el problema.

El archivo tiene un montón de documentación, así que deberías leerlo. Por ejemplo, si necesita más permisos, puede combinarlos como:

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

... que es preferible a eliminar todas las verificaciones de permisos (es decir, eliminar o comentar la línea).

kristina
fuente
2
No hagas esto. Esta restricción se ha introducido como una medida de seguridad debido a la posible ejecución remota de código (consulte launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Entonces la respuesta correcta es: debe usar otro programa para esta tarea.
Marian
55
@Marian Usar otro programa no es útil: el OP preguntó específicamente sobre ImageMagick. La respuesta debería ser "Debe saber lo que está haciendo, hacerlo bajo su propio riesgo, asegurarse de que su sistema sea seguro, aquí es por qué no debe hacerlo, y aquí es cómo hacerlo".
KolonUK
2
El OP (y las personas que llegan aquí por búsqueda web, incluido yo) han estado usando ImageMagick hasta ahora; así que, por supuesto, su primer intento para resolver este problema es encontrar una solución usando ImageMagick, porque eso requiere la menor cantidad de cambios. Eso no significa que incondicionalmente quieran usar ImageMagick.
Marian
3
Considero que este enfoque despectivo a la seguridad es muy inapropiado para un sitio de preguntas y respuestas visto por miles (esta página ha sido vista 100k veces y es el principal resultado de búsqueda para este problema), y seamos claros aquí, hubo un gran y vocal intento de enfatizar La importancia de esta vulnerabilidad, incluido un sitio dedicado creado para publicitarla ( imagetragick.com ): la sugerencia de Marian de que se deben buscar alternativas en lugar de evitar la seguridad es válida. Elegí usar GIMP en su lugar. poppleres una alternativa a GhostScript (que se convertbasa en rasterizar páginas PDF a imágenes)
Louis Maddox
1
¿No hay una opción de línea de comando para deshabilitar la política de seguridad temporalmente? Entonces podríamos usarlo para archivos PDF específicos en los que confiamos.
HRJ
27

Si alguien necesita hacerlo con un comando después de la instalación, ejecute esto.

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
fuente
66
Más corto:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
leftaroundabout
55
Más conciso Y sudo es necesario para editar un archivo dentro de / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
asegúrese de actualizar ghostscript kb.cert.org/vuls/id/332928
ykay dice Reinstate Monica
24

La respuesta con los votos más altos (no tengo suficiente reputación para agregar comentarios allí) sugiere comentar la línea de MVG, pero tenga esto en cuenta:

CVE-2016-3714

ImageMagick admite archivos ".svg / .mvg", lo que significa que los atacantes pueden crear código en un lenguaje de script, por ejemplo, MSL (Magick Scripting Language) y MVG (Magick Vector Graphics), subirlo a un servidor disfrazado como un archivo de imagen y forzar el software para ejecutar comandos maliciosos en el lado del servidor como se describe anteriormente. Por ejemplo, si agrega los siguientes comandos en un archivo y lo carga en un servidor web que utiliza una versión de ImageMagick vulnerable, se ejecutará el comando "ls -la" en el servidor.

exploit.jpg:

push viewbox de contexto gráfico 0 0 640 480 fill 'url ( https://website.com/image.png "| ls" -la)' pop graphic-context

Y

Cualquier versión por debajo de 7.0.1-2 o 6.9.4-0 es potencialmente vulnerable y las partes afectadas deben actualizar lo antes posible a la última versión de ImageMagick.

Fuente

Nikolay Ivanov
fuente
3
No comenté MVG y PDF -> La conversión JPG todavía funciona. Gracias.
Rimu Atkinson
1
6.7.7-10 se parece a la versión más nueva, lanzada el 28/09/2018). ¿Qué me estoy perdiendo? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran
hay una versión más nueva imagemagick.org/script/download.php Probablemente su distribución de Linux usa una más antigua. Ubuntu 16.04 actualmente usa 6.8.9-9
Nikolay Ivanov
1
Bien, entonces la solución adecuada para el equipo de Ubuntu sería actualizar imagemagick a la versión más nueva, no romper la existente.
9ilsdx 9rvj 0lo
2
No. Ubuntu es una distribución de congelación de funciones y no enviará versiones nuevas más recientes.
Buo-Ren Lin
19

Después de una actualización reciente en mi sistema Ubuntu 16.04, también comencé a recibir este error al intentar ejecutar convertir en archivos .ps para convertirlos en archivos PDF.

Esta solución funcionó para mí:

En una ejecución de terminal:

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

Esto debería abrir el archivo policy.xml en el editor de texto gedit. Si no es así, su imagen mágica podría estar instalada en un lugar diferente. Entonces cambia

rights="none" 

a

rights="read | write" 

para líneas PDF, EPS y PS cerca del final del archivo. Guardar y salir, y la magia de la imagen debería funcionar nuevamente.

Murray Hoggett
fuente
1
asegúrese de actualizar ghostscript kb.cert.org/vuls/id/332928
ykay dice Reinstate Monica
Esto ayudó en Ubuntu 18.04 ImageMagick 6.9.7-4. Gracias.
Y el
11

Simplemente elimine el archivo /etc/ImageMagick/policy.xml.

Jarda Pavlíček
fuente
1
Simple pero perfecto. hice esto ya que la prueba falla en travis
Dan Rey Oquindo
1
Esta es la única solución que funcionó a partir de toneladas de publicaciones. Lo renombré a policy-disabled.xml. Creo que lo restauraré hasta que esté seguro de que se abordan los problemas de seguridad
groovenectar
Y después de reiniciar su kernel en el caso del cuaderno jupyter
Nicole Douglas
2

Después de leer varias sugerencias aquí y combinar las ideas, para mí fueron necesarios los siguientes cambios en /etc/ImageMagick-6/policy.xml:

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

... rights = "none" no ayudó. ... pattern = "LABEL" no era necesario. Aunque no trabajo con grandes archivos png (solo ~ 1 Mb), también fueron necesarios algunos cambios en los límites de memoria:

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

(en lugar de 256Mib), y

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

(en lugar de 128 MB)

Kristjan Adojaan
fuente
2

Si no necesita manejar archivos raster y PDF / PS / EPS a través de la misma herramienta, no afloje la seguridad de ImageMagick.

En cambio, mantenga intacta su defensa en profundidad para sus aplicaciones web, verifique que su Ghostscript haya sido parcheado para todas las -dSAFERvulnerabilidades conocidas y luego invoque directamente.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER te excluye del modo de compatibilidad heredada "ejecutar Postscript tendrá permiso completo para interactuar con el mundo exterior como un modo de lenguaje de programación completo".
  • -r300 establece el DPI deseado en 300 (el valor predeterminado es 72)
  • -sDEVICEespecifica el formato de salida (consulte la sección Dispositivos del manual para otras opciones).
  • -o es una abreviatura de -dBATCH -dNOPAUSE -sOutputFile=
  • Esta sección del manual de Ghostscript proporciona algunos formatos de ejemplo para la salida de nombre de archivo de varios archivos, pero, para la definición de sintaxis real, le señala la documentación para la función C printf (3) .

Si está renderizando archivos EPS, agréguelos -dEPSCroppara que no amplíen su salida al tamaño de página y utilicen -sDEVICE=pngalphapara obtener fondos transparentes.

ssokolow
fuente
Gracias por una solución más segura. Sin embargo, ¡no estoy seguro de poder recordar las opciones de línea de comandos de GhostScript! :)
Cris Luengo
@CrisLuengo Yo tampoco. Es por eso que lo publiqué en tantos resultados de Google como pude encontrar donde era una buena respuesta a la pregunta planteada. : P
ssokolow
1
Encontré buenos resultados -r600 -dDownScaleFactor=4al crear un archivo con 150 ppp pero mejor suavizado.
John Cole
0

También tuve el error error/constitute.c/ReadImage/453 al intentar convertir un eps a un gif con magia de imagen. Probé la solución propuesta por sNICkerssss pero aún tenía errores (aunque diferentes al primero) e error/constitute.c/ReadImage/412 Lo que resolvió el problema fue ponerlo readen otras entradas

 <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
fuente
1
Esto realmente no responde la pregunta. Si tiene una pregunta diferente, puede hacerla haciendo clic en Hacer pregunta . También puede agregar una recompensa para llamar más la atención sobre esta pregunta una vez que tenga suficiente reputación . - De la opinión
Sirence
Gracias por la sugerencia. Edité mi respuesta mientras tanto. De todos modos, realmente sentí que debería haber sido un comentario sobre la respuesta de sNICkerssss, pero como no puedo agregarlo, es la mejor manera que descubrí
lambertmular
@Sirence es una respuesta, pensó pobre porque copia de otras respuestas.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo mi comentario era anterior a la edición. stackoverflow.com/posts/52700739/revisions
Sirence