convert: tidak diotorisasi `aaaa` @ error / constitute.c / ReadImage / 453

309

Saya ingin membuat gambar captcha dengan menggunakan convertdari ImageMagick.

Dan saya mengikuti ini , tetapi ada beberapa masalah.

Masukan di shell linux saya:

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

Kesalahannya adalah:

convert: tidak diotorisasi adfgh@ error / merupakan.c / ReadImage / 453. convert: tidak ada nama file gambar ./test.png@ error / convert.c / ConvertImageCommand / 3015

ImageMagick Saya: Versi: 6.7.2-7, saya menginstalnya dengan yum install ImageMagick.

Saya tidak tahu apa-apa. Ada saran?

Jianwei
sumber
7
Periksa ulang policy.xml. Opsi keamanan dapat mencegah label:protokol.
emcconville
2
Terima kasih! Saya memodifikasi policy.xml, beri komentar pada baris ini "<policy domain =" coder "rights =" none "pattern =" LAEBL ">". Itu berhasil! Terima kasih!
jianwei
3
Di mana policy.xml?
Arnold Roa
3
/etc/ImageMagick/policy.xml
jianwei
6
/etc/ImageMagick-6/policy.xml
xerostomus

Jawaban:

445

Catatan: solusi dalam hal ini dan jawaban lainnya melibatkan penonaktifan langkah-langkah keamanan yang ada untuk memperbaiki kerentanan eksekusi kode arbitrer. Lihat misalnya Ghostscript terkait ini dan ini terkait ubuntu- pengumuman. Hanya maju dengan solusi ini jika input convertberasal dari sumber tepercaya.

Saya menggunakan ImageMagick di php (v.7.1) untuk mengiris file PDF ke gambar.

Pertama saya mendapat kesalahan seperti:

Jenis pengecualian: ImagickException

Pesan pengecualian: tidak diotorisasi ..... @ error / constitute.c / ReadImage / 412

Setelah beberapa perubahan /etc/ImageMagick-6/policy.xmlsaya mulai mendapatkan erroes seperti:

Jenis pengecualian: ImagickException

Pesan pengecualian: tidak dapat membuat file sementara ..... Izin ditolak @ kesalahan / pdf.c / ReadPDFImage / 465

Perbaikan saya :

Dalam file /etc/ImageMagick-6/policy.xml(atau /etc/ImageMagick/policy.xml)

  1. baris komentar

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

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

    untuk

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

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

Kemudian restart server web Anda (nginx, apache).

sNICkerssss
sumber
54
Ini harus menjadi jawaban yang dapat diterima jika Anda mengalami masalah ini pada kotak Ubuntu sejak 4 Oktober 2018. Ada masalah lain dari distro lain?
LucasBr
12
Saya juga baru saja mendapatkan masalah ini hari ini di Ubuntu 16.04. Apakah ada yang berubah? Juga saya tidak perlu menambahkan baris LABEL, cukup ubah hak untuk PDF dari "tidak ada" menjadi "baca".
Bryant Kou
4
Memecahkan masalah yang sangat mirip dalam kotak Ubuntu 18.04.1 LTS saya
mhernandez
3
Di server saya, policy.xmlfile terakhir diperbarui pada 29 September, tetapi masalah baru saja muncul hari ini. Saya menggunakan server ubuntu 14.04.5, tetapi mengatur pembaruan otomatis. Dalam log apt, saya menemukan tentang pembaruan ini:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia
12
di sini adalah changelog terkait: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia
161

Saya menggunakan berkali-kali convertperintah ImageMagic untuk mengkonversi *.tiffile ke *.pdffile.

Saya tidak tahu mengapa, tetapi hari ini saya mulai menerima kesalahan berikut:

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

Setelah mengeluarkan perintah:

convert a.tif a.pdf

Setelah membaca jawaban di atas saya mengedit file /etc/ImageMagick-6/policy.xml

dan mengubah garis:

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

untuk

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

dan sekarang semuanya berfungsi dengan baik.

Saya memiliki "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" pada "Ubuntu 16.04.5 LTS".

Lv2eof
sumber
1
Saya menggunakan openSuse Leap 15.0 dan menggunakan "bandingkan" untuk membandingkan halaman PDF, kesalahan yang sama, bahkan setelah pembaruan oleh openSuse pada 10 Oktober 2018. Setelah mengubah baris seperti yang dijelaskan di sini, ia bekerja.
Keks Dosis
Saya menggunakan Ubuntu Xenial 16.04 LTS dan tiba-tiba saya mulai melihat kesalahan itu di log Apache. Saya mengkonfirmasi bahwa setelah mengubah kebijakan seperti yang dijelaskan di sini, masalahnya diselesaikan.
user2641103
5
Ini adalah jawaban minimal yang benar - jawaban sNICkerssss secara teknis benar namun hanya satu langkah yang diperlukan untuk penggunaan baris perintah convertke PDF.
davidA
1
'Masalah' ini cepat & kotor 'diperbaiki' untuk fungsi Ghostscript, dalam jangka panjang kita harus mencari pengganti untuk Ghostscript (dan kemungkinan ImageMagick).
9ilsdx 9rvj 0lo
4
Jangan lakukan ini. Pembatasan ini telah diperkenalkan sebagai tindakan keamanan karena kemungkinan eksekusi kode jarak jauh (lihat launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Jadi jawaban yang benar adalah: Anda harus menggunakan program lain untuk tugas ini.
Marian
66

Catatan: solusi ini dan solusi "edit policy.xml" lainnya menonaktifkan langkah-langkah keamanan terhadap kerentanan eksekusi kode arbitrer di ImageMagick. Jika Anda perlu memproses input yang tidak Anda kontrol 100%, Anda harus menggunakan program lain (bukan ImageMagick).

Jika Anda masih di sini, Anda mencoba mengedit gambar yang Anda kontrol penuh, tahu aman, dan tidak dapat diedit oleh pengguna.

Ada /etc/ImageMagick/policy.xmlfile yang diinstal oleh yum. Ini melarang hampir semua hal (untuk keamanan dan untuk melindungi sistem Anda dari kelebihan beban dengan panggilan ImageMagick).

Jika Anda mendapatkan ReadImagekesalahan seperti di atas, Anda dapat mengubah baris menjadi:

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

yang harus memperbaiki masalah ini.

File tersebut memiliki banyak dokumentasi di dalamnya, jadi Anda harus membacanya. Misalnya, jika Anda memerlukan lebih banyak izin, Anda dapat menggabungkannya seperti:

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

... yang lebih disukai untuk menghapus semua pemeriksaan izin (yaitu, menghapus atau mengomentari saluran).

kristina
sumber
2
Jangan lakukan ini. Pembatasan ini telah diperkenalkan sebagai tindakan keamanan karena kemungkinan eksekusi kode jarak jauh (lihat launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Jadi jawaban yang benar adalah: Anda harus menggunakan program lain untuk tugas ini.
Marian
5
@Marian Menggunakan program lain tidak membantu - OP bertanya secara khusus tentang ImageMagick. Jawabannya harus "Anda harus tahu apa yang Anda lakukan, lakukan dengan risiko Anda sendiri, pastikan sistem Anda aman, inilah mengapa Anda tidak boleh, dan di sini adalah bagaimana melakukannya".
KolonUK
2
OP (dan orang-orang yang datang ke sini melalui pencarian web, termasuk saya) telah menggunakan ImageMagick sampai sekarang; jadi tentu saja, percobaan pertama mereka dalam memecahkan masalah ini adalah menemukan solusi menggunakan ImageMagick, karena itu membutuhkan paling sedikit perubahan. Itu tidak berarti mereka tanpa syarat ingin menggunakan ImageMagick.
Marian
3
Saya menemukan pendekatan penolakan terhadap keamanan ini sangat tidak pantas untuk situs tanya jawab yang dilihat oleh ribuan orang (halaman ini telah dilihat sebanyak 100 ribu kali dan merupakan hasil pencarian teratas untuk masalah ini) - dan mari kita perjelas di sini, ada upaya besar dan vokal untuk menekankan pentingnya kerentanan ini, termasuk situs khusus yang didirikan untuk mempublikasikannya ( imagetragick.com ) - Saran Marian bahwa alternatif harus dicari daripada keamanan yang dilewati adalah valid. Saya memilih untuk menggunakan GIMP sebagai gantinya. poppleradalah alternatif untuk GhostScript (yang convertbergantung pada rasterisasi halaman PDF ke gambar)
Louis Maddox
1
Apakah tidak ada opsi baris perintah untuk menonaktifkan kebijakan keamanan sementara? Kemudian kita bisa menggunakannya untuk file PDF tertentu yang kita percayai.
HRJ
27

Jika seseorang perlu melakukannya dengan satu perintah setelah menginstal, jalankan ini!

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
sumber
6
Lebih pendek:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
leftaroundabout
5
Lebih ringkas. Dan sudo diperlukan untuk mengedit file di dalam / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
pastikan untuk memperbarui ghostscript kb.cert.org/vuls/id/332928
ykay mengatakan Reinstate Monica
24

Jawaban dengan suara tertinggi (saya tidak punya cukup reputasi untuk menambahkan komentar di sana) menyarankan untuk berkomentar di luar garis MVG, tetapi ada dalam pikiran ini:

CVE-2016-3714

ImageMagick mendukung ".svg / .mvg" file yang berarti bahwa penyerang dapat membuat kode dalam bahasa scripting, misalnya MSL (Magick Scripting Language) dan MVG (Magick Vector Graphics), mengunggahnya ke server yang menyamar sebagai file gambar dan memaksa perangkat lunak untuk menjalankan perintah jahat di sisi server seperti dijelaskan di atas. Misalnya menambahkan perintah berikut dalam file dan mengunggahnya ke server web yang menggunakan versi ImageMagick yang rentan akan menghasilkan menjalankan perintah "ls -la" di server.

exploit.jpg:

push text-context viewbox 0 0 640 480 isi 'url ( https://website.com/image.png "| ls" -la)' pop-konteks grafik

Dan

Setiap versi di bawah 7.0.1-2 atau 6.9.4-0 berpotensi rentan dan pihak yang terkena dampak harus sesegera mungkin meningkatkan ke versi ImageMagick terbaru.

Sumber

Nikolay Ivanov
sumber
3
Saya tidak berkomentar MVG dan PDF -> Konversi JPG masih berfungsi. Terima kasih.
Rimu Atkinson
1
6.7.7-10 terlihat seperti versi terbaru, dirilis 9/28/2018). Apa yang saya lewatkan? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran
ada versi yang lebih baru imagemagick.org/script/download.php Mungkin distribusi Linux Anda menggunakan yang lebih lama. Ubuntu 16.04 saat ini menggunakan 6.8.9-9
Nikolay Ivanov
1
Bagus, jadi solusi yang tepat untuk tim Ubuntu adalah memperbarui imagemagick ke versi yang lebih baru, bukan untuk merusak yang sudah ada.
9ilsdx 9rvj 0lo
2
Tidak. Ubuntu adalah distribusi pembekuan fitur dan tidak akan mengirimkan rilis upstream yang lebih baru.
Buo-Ren Lin
19

Setelah pembaruan terbaru pada sistem Ubuntu 16.04 saya, saya juga mulai mendapatkan kesalahan ini ketika mencoba menjalankan konversi pada file .ps untuk mengubahnya menjadi pdf.

Perbaikan ini berhasil untuk saya:

Dalam terminal run:

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

Ini harus membuka file policy.xml di editor teks gedit. Jika tidak, tenung gambar Anda mungkin dipasang di tempat yang berbeda. Kemudian ubah

rights="none" 

untuk

rights="read | write" 

untuk garis PDF, EPS, dan PS di dekat bagian bawah file. Simpan dan keluar, dan gambar sulung kemudian harus bekerja lagi.

Murray Hoggett
sumber
1
pastikan untuk memperbarui ghostscript kb.cert.org/vuls/id/332928
ykay mengatakan Reinstate Monica
Ini membantu pada Ubuntu 18.04 ImageMagick 6.9.7-4. Terima kasih.
Dan
11

Hapus saja file /etc/ImageMagick/policy.xml.

Jarda Pavlíček
sumber
1
sederhana namun sempurna. saya melakukan ini karena tes gagal pada travis
Dan Rey Oquindo
1
Ini adalah satu-satunya solusi yang bekerja dari banyak posting. Saya menamainya menjadi policy-disabled.xml. Saya pikir saya akan mengembalikannya sampai saya yakin bahwa masalah keamanan telah diatasi
groovenectar
Dan setelah restart kernel Anda dalam kasus notebook jupyter
Nicole Douglas
2

Setelah membaca beberapa saran di sini dan menggabungkan ide-ide, bagi saya mengikuti perubahan di /etc/ImageMagick-6/policy.xml diperlukan:

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

... rights = "none" tidak membantu. ... pattern = "LABEL" tidak perlu. Meskipun saya tidak bekerja dengan file png besar (hanya ~ 1 Mb) beberapa perubahan dalam batas memori juga diperlukan:

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

(bukan 256Mib), dan

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

(bukannya 128 MB)

Kristjan Adojaan
sumber
2

Jika Anda tidak perlu menangani file raster dan PDF / PS / EPS melalui alat yang sama, jangan kendurkan keamanan ImageMagick.

Alih-alih, pertahankan pertahanan Anda agar aplikasi web Anda tetap utuh, periksa apakah Ghostscript Anda telah ditambal untuk semua -dSAFERkerentanan yang diketahui dan kemudian panggil secara langsung.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER memilih Anda keluar dari kompatibilitas legacy "jalankan Postscript akan izin penuh untuk berinteraksi dengan dunia luar sebagai mode" bahasa pemrograman turing-complete.
  • -r300 mengatur DPI yang diinginkan ke 300 (standarnya adalah 72)
  • -sDEVICEmenentukan format output (Lihat bagian Perangkat manual ini untuk pilihan lain.)
  • -o adalah singkatan untuk -dBATCH -dNOPAUSE -sOutputFile=
  • Bagian dari manual Ghostscript ini memberikan beberapa format contoh untuk untuk keluaran nama file multi-file tetapi, untuk definisi sintaksis yang sebenarnya, ini mengarahkan Anda pada dokumentasi untuk fungsi C printf (3) .

Jika Anda merender file EPS, tambahkan -dEPSCropjadi itu tidak akan menambah output Anda ke ukuran halaman dan digunakan -sDEVICE=pngalphauntuk mendapatkan latar belakang transparan.

ssokolow
sumber
Terima kasih atas solusi yang lebih aman. Namun, tidak yakin saya bisa mengingat opsi baris perintah GhostScript! :)
Cris Luengo
@ ChrisLuengo saya juga tidak. Itu sebabnya saya mempostingnya ke sebanyak mungkin hasil Google yang saya bisa temukan di mana itu adalah jawaban yang bagus untuk pertanyaan yang diajukan. : P
ssokolow
1
Saya menemukan hasil yang baik menggunakan -r600 -dDownScaleFactor=4untuk membuat file dengan 150 dpi tetapi lebih baik anti-aliasing.
John Cole
0

Saya juga memiliki kesalahan error/constitute.c/ReadImage/453 ketika mencoba untuk mengubah eps ke gif dengan gambar magick. Saya mencoba solusi yang diusulkan oleh sNICkerssss tetapi masih memiliki kesalahan (meskipun berbeda dari yang pertama) e error/constitute.c/ReadImage/412 Apa yang memecahkan masalahnya adalah untuk dimasukkan readke entri lain

 <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
sumber
1
Ini tidak benar-benar menjawab pertanyaan itu. Jika Anda memiliki pertanyaan yang berbeda, Anda dapat menanyakannya dengan mengeklik Ajukan Pertanyaan . Anda juga dapat menambahkan hadiah untuk menarik lebih banyak perhatian ke pertanyaan ini setelah Anda memiliki reputasi yang cukup . - Dari Ulasan
Sirence
Terima kasih untuk sarannya. Sementara itu saya mengedit jawaban saya. Pokoknya saya benar-benar merasa itu seharusnya menjadi komentar pada jawaban sNICkerssss, tetapi karena saya tidak dapat menambahkannya adalah cara terbaik yang saya
temukan
@Sirence itu adalah jawaban, pikir buruk karena salinan dari jawaban lain.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo komentar saya dari sebelum edit. stackoverflow.com/posts/52700739/revisi
Sirence