convertire: non autorizzato `aaaa` @ error / constit.c / ReadImage / 453


309

Voglio creare una foto captcha utilizzando convertda ImageMagick.

E io seguo questo , ma ci sono alcuni problemi.

Input nella mia shell linux:

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

L'errore è:

convertire: non autorizzato adfgh@ errore / constit.c / ReadImage / 453. convert: manca un nome file di immagine./test.png @ error / convert.c / ConvertImageCommand / 3015

My ImageMagick: Versione: 6.7.2-7, con cui lo installo yum install ImageMagick .

Sono all'oscuro. Qualche consiglio per favore?


7
Doppio controllo policy.xml. Le opzioni di sicurezza possono impedire il label:protocollo.
emcconville,

2
Grazie! Modifico policy.xml, commento questa riga "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Funziona! Grazie !
jianwei,

3
Dov'è policy.xml?
Arnold Roa,

3
/etc/ImageMagick/policy.xml
jianwei

6
/etc/ImageMagick-6/policy.xml
xerostomus

Risposte:


445

Nota: la soluzione in questa e in altre risposte prevede la disabilitazione delle misure di sicurezza che sono lì per correggere vulnerabilità di esecuzione di codice arbitrario. Vedi ad esempio questo relativo a ghostscript e questo annuncio relativo a Ubuntu . Procedi con queste soluzioni solo se l'input a convertproviene da una fonte attendibile.

Uso ImageMagick in php (v.7.1) per tagliare il file PDF in immagini.

Prima ho ricevuto errori come:

Tipo di eccezione: ImagickException

Messaggio di eccezione: non autorizzato ..... @ errore / constit.c / ReadImage / 412

Dopo alcune modifiche, /etc/ImageMagick-6/policy.xmlcomincio a ricevere erroes come:

Tipo di eccezione: ImagickException

Messaggio di eccezione: impossibile creare il file temporaneo ..... Autorizzazione negata @ error / pdf.c / ReadPDFImage / 465

La mia correzione :

Nel file /etc/ImageMagick-6/policy.xml(o /etc/ImageMagick/policy.xml)

  1. riga di commento

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

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

    per

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. aggiungi linea

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

Quindi riavviare il server Web (nginx, apache).


54
Questa dovrebbe essere la risposta accettabile se hai riscontrato questo problema su una scatola Ubuntu dal 4 ottobre 2018. Qualche altro problema derivante da altre distro?
LucasBr,

12
Anche oggi sto riscontrando questo problema su Ubuntu 16.04. Qualcosa è cambiato? Inoltre non ho avuto bisogno di aggiungere la linea LABEL, basta cambiare i diritti per il PDF da "none" a "read".
Bryant Kou,

4
Risolve un problema molto simile nel mio box Ubuntu 18.04.1 LTS
mandeggina,

3
Nel mio server, il policy.xmlfile è stato aggiornato l'ultima volta il 29 settembre, ma i problemi sorgono solo oggi. Sto usando Ubuntu Server 14.04.5, ma ho impostato l'aggiornamento automatico. Nel registro apt, ho scoperto questo aggiornamento:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia,

12
ecco il relativo
log delle modifiche

161

Uso molte volte il convertcomando ImageMagic per convertire i *.tiffile in *.pdffile.

Non so perché, ma oggi ho iniziato a ricevere il seguente errore:

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

Dopo aver emesso il comando:

convert a.tif a.pdf

Dopo aver letto le risposte sopra ho modificato il file /etc/ImageMagick-6/policy.xml

e ha cambiato la linea:

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

per

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

e ora tutto funziona bene.

Ho "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" su "Ubuntu 16.04.5 LTS".


1
Sono su openSuse Leap 15.0 e ho usato "confronta" per confrontare pagine PDF, stesso errore, anche dopo un aggiornamento di openSuse il 10 ottobre 2018. Dopo aver cambiato la linea come descritto qui, ha funzionato.
Keks Dose,

Sono su Ubuntu Xenial 16.04 LTS e improvvisamente ho iniziato a vedere quell'errore nei log di Apache. Confermo che dopo aver modificato la politica come descritto qui il problema è stato risolto.
user2641103,

5
Questa è la risposta corretta minima: la risposta di sNICkerssss è tecnicamente corretta, tuttavia è necessario solo un passaggio per l'utilizzo da riga di comando di convertPDF.
davidA

1
Questo 'problema' è una 'correzione' rapida e sporca alla funzionalità di Ghostscript, a lungo termine dovremmo trovare un sostituto di Ghostscript (e probabilmente ImageMagick).
9ilsdx 9rvj 0lo,

4
Non farlo Questa limitazione è stata introdotta come misura di sicurezza a causa della possibile esecuzione di codice in modalità remota (vedere launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Quindi la risposta corretta è: dovresti usare un altro programma per questa attività.
Marian,

66

Nota: questa soluzione e qualsiasi altra soluzione "modifica policy.xml" disabilita le misure di sicurezza contro vulnerabilità di esecuzione di codice arbitrario in ImageMagick. Se è necessario elaborare input che non si controllano al 100%, è necessario utilizzare un programma diverso (non ImageMagick).

Se sei ancora qui, stai provando a modificare le immagini su cui hai il controllo completo, che sono al sicuro e che non possono essere modificate dagli utenti.

Esiste un /etc/ImageMagick/policy.xmlfile installato da yum. Non consente quasi tutto (per motivi di sicurezza e per proteggere il sistema da sovraccarichi con le chiamate ImageMagick).

Se ricevi un ReadImageerrore come sopra, puoi cambiare la riga in:

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

che dovrebbe risolvere il problema.

Il file contiene un sacco di documentazione, quindi dovresti leggerlo. Ad esempio, se hai bisogno di più autorizzazioni, puoi combinarle come:

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

... che è preferibile per rimuovere tutti i controlli delle autorizzazioni (ovvero, eliminare o commentare la riga).


2
Non farlo Questa limitazione è stata introdotta come misura di sicurezza a causa della possibile esecuzione di codice in modalità remota (vedere launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Quindi la risposta corretta è: dovresti usare un altro programma per questa attività.
Marian,

5
@Marian L'uso di un altro programma non è utile: l'OP ha chiesto specificamente di ImageMagick. La risposta dovrebbe essere "Dovresti sapere cosa stai facendo, farlo a tuo rischio e pericolo, assicurati che il tuo sistema sia sicuro, ecco perché non dovresti, ed ecco come farlo".
KolonUK,

2
L'OP (e le persone che arrivano qui tramite la ricerca web, incluso me) hanno usato ImageMagick fino ad ora; quindi, naturalmente, il loro primo tentativo di risolvere questo problema è trovare una soluzione utilizzando ImageMagick, poiché richiede il minor numero di modifiche. Ciò non significa che vogliono usare incondizionatamente ImageMagick.
Marian

3
Trovo questo approccio sprezzante alla sicurezza molto inappropriato per un sito di domande e risposte visto da migliaia (questa pagina è stata vista 100k volte ed è il risultato di ricerca principale per questo problema) - e chiariamo qui, c'è stato un grande e vocale tentativo di stress l'importanza di questa vulnerabilità, incluso un sito dedicato creato per pubblicizzarlo ( imagetragick.com ) - è valido il suggerimento di Marian di cercare alternative anziché bypassare la sicurezza. Ho scelto di usare GIMP invece. popplerè un'alternativa a GhostScript (che convertsi basa sulla rasterizzazione delle pagine PDF in immagini)
Louis Maddox,

1
Non esiste un'opzione da riga di comando per disabilitare temporaneamente la politica di sicurezza? Quindi potremmo usarlo per file PDF specifici di cui ci fidiamo.
HRJ,

27

Se qualcuno ha bisogno di farlo con un comando dopo l'installazione, esegui questo!

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
Più breve:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
circa il

5
Più conciso E sudo è necessario per modificare un file all'interno di / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed,

assicurati di aggiornare ghostscript kb.cert.org/vuls/id/332928
ykay dice Reinstate Monica

24

La risposta con il massimo dei voti (non ho abbastanza reputazione per aggiungere commenti lì) suggerisce di commentare la linea MVG, ma tieni presente questo:

CVE-2016-3714

ImageMagick supporta file ".svg / .mvg", il che significa che gli aggressori possono creare codice in un linguaggio di scripting, ad esempio MSL (Magick Scripting Language) e MVG (Magick Vector Graphics), caricarlo su un server travestito da file immagine e forzare il software per eseguire comandi dannosi sul lato server come descritto sopra. Ad esempio, l'aggiunta dei seguenti comandi in un file e il caricamento su un server Web che utilizza una versione ImageMagick vulnerabile comporterà l'esecuzione del comando "ls -la" sul server.

exploit.jpg:

push viewbox contesto grafico 0 0 640 480 riempire 'url ( https://website.com/image.png "| ls" -la)' pop graphic-context

E

Qualsiasi versione inferiore a 7.0.1-2 o 6.9.4-0 è potenzialmente vulnerabile e le parti interessate devono aggiornarsi quanto prima all'ultima versione di ImageMagick.

fonte


3
Non ho commentato MVG e PDF -> La conversione JPG funziona ancora. Grazie.
Rimu Atkinson,

1
6.7.7-10 sembra la versione più recente, rilasciata il 28/09/2018). Cosa mi sto perdendo? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran,

c'è una versione più recente imagemagick.org/script/download.php Probabilmente la tua distribuzione Linux ne usa una precedente. Ubuntu 16.04 attualmente utilizza 6.8.9-9
Nikolay Ivanov l'

1
Bene, quindi la soluzione corretta per il team di Ubuntu sarebbe aggiornare imagemagick alla versione più recente, non rompere quella esistente.
9ilsdx 9rvj 0lo,

2
No. Ubuntu è una distribuzione freeze e non distribuirà versioni più recenti a monte.
Buo-Ren Lin,

19

Dopo un recente aggiornamento sul mio sistema Ubuntu 16.04 ho anche iniziato a ricevere questo errore quando provavo a eseguire la conversione su file .ps per convertirli in pdf.

Questa correzione ha funzionato per me:

In una corsa terminale:

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

Questo dovrebbe aprire il file policy.xml nell'editor di testo gedit. In caso contrario, la tua immagine magick potrebbe essere installata in un posto diverso. Quindi cambia

rights="none" 

per

rights="read | write" 

per le linee PDF, EPS e PS nella parte inferiore del file. Salva ed esci e l'immagine magick dovrebbe quindi funzionare di nuovo.


1
assicurati di aggiornare ghostscript kb.cert.org/vuls/id/332928
ykay dice Reinstate Monica

Questo ha aiutato su Ubuntu 18.04 ImageMagick 6.9.7-4. Grazie.
E il

11

Basta eliminare il file /etc/ImageMagick/policy.xml.


1
semplice ma perfetto. l'ho fatto perché il test non è
andato a buon fine

1
Questa è l'unica soluzione che ha funzionato da tonnellate di post. L'ho rinominato in policy-disabled.xml. Penso che lo ripristinerò fino a quando non sarò sicuro che i problemi di sicurezza verranno risolti
Groovenectar,

E dopo aver riavviato il kernel nel caso del notebook jupyter
Nicole Douglas,

2

Dopo aver letto alcuni suggerimenti qui e aver combinato le idee, per me sono state necessarie le seguenti modifiche in /etc/ImageMagick-6/policy.xml:

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

... rights = "none" non ha aiutato. ... pattern = "LABEL" non era necessario. Anche se non lavoro con file png di grandi dimensioni (solo ~ 1 Mb), sono state necessarie anche alcune modifiche ai limiti di memoria:

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

(invece di 256Mib) e

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

(invece di 128 MB)



2

Se non è necessario gestire file raster e PDF / PS / EPS tramite lo stesso strumento, non allentare la sicurezza di ImageMagick.

Invece, mantieni la tua difesa in profondità per le tue applicazioni web intatte, controlla che il tuo Ghostscript sia stato corretto per tutte le -dSAFERvulnerabilità conosciute e quindi invocalo direttamente.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER ti esclude dalla compatibilità legacy "esegui Postscript avrà il pieno permesso di interagire con il mondo esterno come un linguaggio di programmazione completo".
  • -r300 imposta il DPI desiderato su 300 (il valore predefinito è 72)
  • -sDEVICEspecifica il formato di output (consultare la sezione Dispositivi del manuale per altre opzioni.)
  • -o è una scorciatoia per -dBATCH -dNOPAUSE -sOutputFile=
  • Questa sezione del manuale di Ghostscript fornisce alcuni formati di esempio per l'output di file multi-file ma, per l'effettiva definizione della sintassi, ti indirizza alla documentazione per C printf (3) .

Se stai eseguendo il rendering di file EPS, aggiungi in -dEPSCropmodo che non riduca l'output alle dimensioni della pagina e utilizzalo -sDEVICE=pngalphaper ottenere sfondi trasparenti.


Grazie per una soluzione più sicura. Non sono sicuro che riuscirò mai a ricordare le opzioni della riga di comando di GhostScript, però! :)
Cris Luengo,

@CrisLuengo Nemmeno io. Ecco perché l'ho pubblicato su tutti i risultati di Google che sono riuscito a trovare dove fosse una buona risposta alla domanda posta. : P
ssokolow,

1
Ho trovato buoni risultati usando -r600 -dDownScaleFactor=4per creare un file con 150 dpi ma un migliore anti-aliasing.
John Cole,

0

Ho anche avuto l'errore error/constitute.c/ReadImage/453 durante il tentativo di convertire un eps in una gif con image magick. Ho provato la soluzione proposta da sNICkerssss ma ho ancora degli errori (anche se diversi dal primo) e error/constitute.c/ReadImage/412 Ciò che ha risolto il problema è stato quello di inserire readaltre voci

 <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
Questo non risponde davvero alla domanda. Se hai una domanda diversa, puoi porla facendo clic su Poni domanda . Puoi anche aggiungere una taglia per attirare più attenzione a questa domanda una volta che hai abbastanza reputazione . - Dalla recensione
Sirence

Grazie per il suggerimento Nel frattempo ho modificato la mia risposta. Ad ogni modo, ho davvero pensato che avrebbe dovuto essere un commento sulla risposta di sNICkerssss, ma dal momento che non posso aggiungerlo è il modo migliore che ho capito
lambertmular

@Sirence è una risposta, considerata scarsa perché copia da altre risposte.
9ilsdx 9rvj 0lo,

@ 9ilsdx9rvj0lo il mio commento era di prima della modifica. stackoverflow.com/posts/52700739/revisions
Sirence
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.