convert: não autorizado `aaaa` @ erro / constitui.c / ReadImage / 453

309

Quero criar uma foto captcha usando o convertImageMagick.

E eu sigo isso , mas há algum problema.

Entrada No meu shell linux:

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

O erro é:

converter: não autorizado adfgh@ erro / constitui.c / ReadImage / 453. convert: falta um nome de arquivo de imagem ./test.png@ error / convert.c / ConvertImageCommand / 3015

My ImageMagick: Versão: 6.7.2-7, eu instalo-o com yum install ImageMagick.

Eu não tenho noção. Algum conselho por favor?

jianwei
fonte
7
Verifique novamente policy.xml. As opções de segurança podem impedir o label:protocolo.
emcconville
2
obrigado! Eu modifico o policy.xml, comente esta linha "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Isso funciona! Obrigado !
Jianwei
3
Onde está o policy.xml?
Arnold Roa
3
/etc/ImageMagick/policy.xml
jianwei
6
/etc/ImageMagick-6/policy.xml
xerostomus

Respostas:

445

Nota: a solução nesta e em outras respostas envolve desabilitar as medidas de segurança existentes para corrigir vulnerabilidades arbitrárias de execução de código. Veja, por exemplo, este anúncio relacionado ao ghostscript e este anúncio relacionado ao ubuntu . Avance com essas soluções apenas se a entrada convertvier de uma fonte confiável.

Eu uso o ImageMagick no php (v.7.1) para cortar arquivos PDF em imagens.

Primeiro eu recebi erros como:

Tipo de exceção: ImagickException

Mensagem de exceção: não autorizada ..... @ erro / constitui.c / ReadImage / 412

Após algumas alterações /etc/ImageMagick-6/policy.xml, começo a receber erros como:

Tipo de exceção: ImagickException

Mensagem de exceção: impossível criar arquivo temporário ..... Permissão negada @ error / pdf.c / ReadPDFImage / 465

Minha correção :

Em arquivo /etc/ImageMagick-6/policy.xml(ou /etc/ImageMagick/policy.xml)

  1. linha de comentário

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

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

    para

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

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

Em seguida, reinicie o servidor da web (nginx, apache).

sNICkerssss
fonte
54
Essa deve ser a resposta aceitável se você tiver esse problema em uma caixa Ubuntu desde 4 de outubro de 2018. Quaisquer outros problemas de outras distros?
LucasBr 5/10
12
Também estou recebendo esse problema hoje no Ubuntu 16.04. Alguma coisa mudou? Também não precisei adicionar a linha LABEL, basta alterar os direitos do PDF de "none" para "read".
Bryant Kou
4
Resolve um problema muito semelhante em minha caixa de Ubuntu 18.04.1 LTS
mhernandez
3
No meu servidor, o policy.xmlarquivo foi atualizado pela última vez em 29 de setembro, mas os problemas surgem hoje. Estou usando o servidor ubuntu 14.04.5, mas configure a atualização automática. No log do apt, descobri esta atualização:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia 8/08
12
aqui está o changelog relacionada: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia
161

Eu uso muitas vezes o convertcomando ImageMagic para converter *.tifarquivos em *.pdfarquivos.

Não sei por que, mas hoje comecei a receber o seguinte erro:

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

Após emitir o comando:

convert a.tif a.pdf

Depois de ler as respostas acima, editei o arquivo /etc/ImageMagick-6/policy.xml

e mudou a linha:

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

para

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

e agora tudo funciona bem.

Eu tenho "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" no "Ubuntu 16.04.5 LTS".

Lv2eof
fonte
1
Estou no openSuse Leap 15.0 e usei "compare" para comparar páginas em PDF, mesmo erro, mesmo após uma atualização do openSuse em 10 de outubro de 2018. Depois de alterar a linha conforme descrito aqui, funcionou.
perfil completo de Keks Dose
Estou no Ubuntu Xenial 16.04 LTS e de repente comecei a ver esse erro nos logs do Apache. Confirmo que, após alterar a política, conforme descrito aqui, o problema foi resolvido.
user2641103
5
Essa é a resposta correta mínima - a resposta do sNICkerssss é tecnicamente correta, mas apenas uma etapa é necessária para o uso da linha de comando convertno PDF.
DavidA
1
Esse 'problema' é uma 'correção' rápida e suja da funcionalidade do Ghostscript; em longo prazo, devemos encontrar um substituto para o Ghostscript (e provavelmente o ImageMagick).
9ilsdx 9rvj 0lo
4
Não faça isso. Esta restrição foi introduzida como uma medida de segurança devido à possível execução remota de código (consulte launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Portanto, a resposta correta é: Você deve usar outro programa para esta tarefa.
Marian
66

Nota: esta solução e qualquer outra solução "editar a política.xml" desativa medidas de segurança contra vulnerabilidades arbitrárias de execução de código no ImageMagick. Se você precisar processar uma entrada que não controla 100%, use um programa diferente (não o ImageMagick).

Se você ainda está aqui, está tentando editar imagens sobre as quais tem controle total, sabe que são seguras e não podem ser editadas pelos usuários.

Há um /etc/ImageMagick/policy.xmlarquivo que é instalado pelo yum. Ele proíbe quase tudo (por segurança e para proteger seu sistema contra sobrecarga com chamadas do ImageMagick).

Se você estiver recebendo um ReadImageerro como acima, poderá alterar a linha para:

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

o que deve corrigir o problema.

O arquivo tem um monte de documentação, então você deve ler isso. Por exemplo, se você precisar de mais permissões, poderá combiná-las como:

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

... que é preferível a remover todas as verificações de permissão (ou seja, excluir ou comentar a linha).

Cristina
fonte
2
Não faça isso. Esta restrição foi introduzida como uma medida de segurança devido à possível execução remota de código (consulte launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Portanto, a resposta correta é: Você deve usar outro programa para esta tarefa.
Marian
5
@Marian Usar outro programa não é útil - o OP perguntou especificamente sobre o ImageMagick. A resposta deve ser "Você deve saber o que está fazendo, faça por sua conta e risco, verifique se o seu sistema está seguro, eis por que você não deveria e aqui está como fazê-lo".
22419 KolonUK
2
O OP (e as pessoas que chegam aqui pela pesquisa na web, inclusive eu) têm usado o ImageMagick até agora; então, é claro, a primeira tentativa para resolver esse problema é encontrar uma solução usando o ImageMagick, porque isso requer o mínimo de alterações. Isso não significa que eles desejam incondicionalmente usar o ImageMagick.
Marian
3
Considero essa abordagem desprezível à segurança muito inapropriada para um site de perguntas e respostas visto por milhares (esta página foi visualizada 100k vezes e é o principal resultado de pesquisa para esse problema) - e vamos ser claros aqui, houve uma tentativa grande e vocal de enfatizar a importância dessa vulnerabilidade, incluindo um site dedicado configurado para divulgá-la ( imagetragick.com ) - é válida a sugestão de Marian de que se deve buscar alternativas em vez de ignorar a segurança. Eu escolhi usar o GIMP. poppleré uma alternativa para GhostScript (que convertdepende de páginas PDF rasterize para imagens)
Louis Maddox
1
Não existe uma opção de linha de comando para desativar temporariamente a política de segurança? Em seguida, poderíamos usá-lo para arquivos PDF específicos nos quais confiamos.
HRJ
27

Se alguém precisar fazer isso com um comando após a instalação, execute isso!

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
fonte
6
Mais curta:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
leftaroundabout
5
Mais conciso. E sudo é necessária para editar um dentro do arquivo / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
certifique-se de atualizar o ghostscript kb.cert.org/vuls/id/332928
ykay diz Restabelecer Monica 5/19/19
24

A resposta com os votos mais altos (não tenho reputação suficiente para adicionar comentários) sugere comentar a linha MVG, mas lembre-se disso:

CVE-2016-3714

O ImageMagick suporta arquivos ".svg / .mvg", o que significa que os invasores podem criar código em uma linguagem de script, por exemplo, MSL (Magick Scripting Language) e MVG (Magick Vector Graphics), enviá-lo para um servidor disfarçado de arquivo de imagem e forçar o software para executar comandos maliciosos no servidor, conforme descrito acima. Por exemplo, adicionar os seguintes comandos em um arquivo e enviá-lo para um servidor da Web que usa uma versão vulnerável do ImageMagick resultará na execução do comando "ls -la" no servidor.

exploit.jpg:

pressione a caixa de visualização do contexto gráfico 0 0 640 480 fill 'url ( https://website.com/image.png "| ls" -la)' contexto gráfico pop

E

Qualquer versão abaixo de 7.0.1-2 ou 6.9.4-0 é potencialmente vulnerável e as partes afetadas devem fazer o upgrade o mais rápido possível para a versão mais recente do ImageMagick.

Fonte

Nikolay Ivanov
fonte
3
Não comentei o MVG e o PDF -> a conversão de JPG ainda funciona. Obrigado.
Rimu Atkinson 10/10
1
6.7.7-10 se parece com a versão mais recente, lançada em 28/09/2018). o que estou perdendo? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran 10/10
existe uma versão mais recente imagemagick.org/script/download.php Provavelmente, sua distribuição Linux usa uma versão mais antiga. O Ubuntu 16.04 atualmente usa o 6.8.9-9
Nikolay Ivanov
1
Bom, então a solução adequada para a equipe do Ubuntu seria atualizar o imagemagick para uma versão mais recente, não para quebrar o existente.
9ilsdx 9rvj 0lo
2
Não. O Ubuntu é uma distribuição de congelamento de recursos e não enviará versões mais recentes do upstream.
Buo-Ren Lin
19

Após uma atualização recente no meu sistema Ubuntu 16.04, também comecei a receber esse erro ao tentar executar a conversão em arquivos .ps para convertê-los em pdfs.

Essa correção funcionou para mim:

Em uma execução de terminal:

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

Isso deve abrir o arquivo policy.xml no editor de texto gedit. Caso contrário, a magia da sua imagem poderá ser instalada em um local diferente. Então mude

rights="none" 

para

rights="read | write" 

para linhas PDF, EPS e PS perto da parte inferior do arquivo. Salve e saia, e a imagem magick deve funcionar novamente.

Murray Hoggett
fonte
1
certifique-se de atualizar o ghostscript kb.cert.org/vuls/id/332928
ykay diz Restabelecer Monica 5/19/19
Isso ajudou no Ubuntu 18.04 ImageMagick 6.9.7-4. Obrigado.
E
11

Apenas exclua o arquivo /etc/ImageMagick/policy.xml.

Jarda Pavlíček
fonte
1
simples, mas perfeito. Eu fiz isso como o teste está falhando em Travis
Dan Rey Oquindo
1
Esta é a única solução que funcionou em toneladas de posts. Eu mudei o nome para policy-disabled.xml. Acho que vou restaurá-la até que eu estou certo de que as questões de segurança são abordados
groovenectar
E depois de reiniciar o kernel no caso do notebook jupyter
Nicole Douglas
2

Depois de ler várias sugestões aqui e combinar as idéias, foram necessárias as seguintes alterações no /etc/ImageMagick-6/policy.xml:

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

... rights = "none" não ajudou. ... pattern = "LABEL" não era necessário. Embora eu não trabalhe com grandes arquivos png (apenas ~ 1 Mb), algumas alterações nos limites de memória também foram necessárias:

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

(em vez de 256Mib) e

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

(em vez de 128 MB)

Kristjan Adojaan
fonte
2

Se você não precisar manipular arquivos rasterizados e PDF / PS / EPS através da mesma ferramenta, não afrouxe a segurança do ImageMagick.

Em vez disso, mantenha sua defesa em profundidade para seus aplicativos Web intactos, verifique se o seu Ghostscript foi corrigido para todas as -dSAFERvulnerabilidades conhecidas e, em seguida, invoque-o diretamente.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER desabilita você do modo de compatibilidade de legado ". Execute o Postscript com permissão total para interagir com o mundo exterior como uma linguagem de programação completa".
  • -r300 define o DPI desejado para 300 (o padrão é 72)
  • -sDEVICEespecifica o formato de saída (consulte a seção Dispositivos do manual para outras opções.)
  • -o é uma abreviação de -dBATCH -dNOPAUSE -sOutputFile=
  • Esta seção do manual Ghostscript fornece alguns exemplos de formatos para saída de nome de arquivo com vários arquivos, mas, para a definição real da sintaxe, ele indica a documentação do C função printf (3) .

Se você estiver renderizando arquivos EPS, adicione-os -dEPSCroppara que não atendam ao tamanho da página e usem -sDEVICE=pngalphapara obter fundos transparentes.

ssokolow
fonte
Obrigado por uma solução mais segura. Porém, não tenho certeza se vou conseguir lembrar as opções de linha de comando do GhostScript! :)
Cris Luengo
@CrisLuengo Eu também não. Foi por isso que publiquei no maior número de resultados do Google que consegui encontrar onde era uma boa resposta para a pergunta. : P
ssokolow
1
Encontrei bons resultados usando -r600 -dDownScaleFactor=4para criar um arquivo com 150 dpi, mas melhor anti-aliasing.
John Cole
0

Eu também tive o erro error/constitute.c/ReadImage/453 ao tentar converter um eps em um gif com imagem mágica. Tentei a solução proposta pelo sNICkerssss, mas ainda tinha erros (embora diferentes do primeiro) e error/constitute.c/ReadImage/412 O que resolveu o problema foi colocar readem outras 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
fonte
1
Isso realmente não responde à pergunta. Se você tiver uma pergunta diferente, faça-a clicando em Fazer pergunta . Você também pode adicionar uma recompensa para chamar mais atenção para essa pergunta quando tiver reputação suficiente . - Do comentário
Sirence
Obrigado pela sugestão. Enquanto isso, editei minha resposta. De qualquer forma eu realmente senti que deveria ter sido um comentário sobre a resposta sNICkerssss, mas desde que eu não pode adicioná-lo é a melhor maneira que eu descobri
lambertmular
@Sirence é uma resposta, pensei ruim porque copia de outras respostas.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo meu comentário foi antes da edição. stackoverflow.com/posts/52700739/revisions
Sirence