dönüştürmek: izin verilmiyor `aaaa` @ hata / constitute.c / ReadImage / 453


309

convertImageMagick kullanarak bir captcha pic oluşturmak istiyorum .

Ve ben izleyin bu , ancak bazı sorun vardır.

Linux kabuğumda girdi:

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

Hata:

dönüştürmek: yetkili değil adfgh@ hata / constitute.c / ReadImage / 453. convert: bir resim dosya ./test.pngadını eksik @ error / convert.c / ConvertImageCommand / 3015

My ImageMagick: Sürüm: 6.7.2-7, ile yüklüyorum yum install ImageMagick.

Ben clueless. Herhangi bir tavsiye lütfen?


7
İki kez kontrol edin policy.xml. Güvenlik seçenekleri label:protokolü engelleyebilir .
emcconville

2
Teşekkürler! Policy.xml dosyasını değiştirdim, bu satıra "<policy domain =" coder "rights =" none "pattern =" LAEBL ">" yazın. Çalışıyor ! Teşekkürler !
jianwei

3
Policy.xml nerede?
Arnold Roa

3
/etc/ImageMagick/policy.xml
jianwei

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

Yanıtlar:


445

Not: Bu ve diğer yanıtlardaki çözüm, rastgele kod yürütme güvenlik açıklarını gidermek için var olan güvenlik önlemlerini devre dışı bırakmayı içerir. Örneğin, bu ghostscript ile ilgili ve ubuntu ile ilgili duyuruya bakın. Bu çözümler yalnızca ileri gelen girdi convertgüvenilir bir kaynaktan geliyorsa devam edin.

PDF dosyasını görüntülere dilimlemek için php (v.7.1) 'de ImageMagick kullanıyorum.

Önce ben gibi hatalar aldım:

İstisna türü: ImagickException

İstisna mesajı: yetkilendirilmedi ..... @ hata / constitute.c / ReadImage / 412

Bazı değişikliklerden sonra /etc/ImageMagick-6/policy.xmlben gibi hatalar almaya başlar:

İstisna türü: ImagickException

Özel durum mesajı: geçici dosya oluşturulamıyor ..... İzin @ hatası / pdf.c / ReadPDFImage / 465 engellendi

Düzeltmem :

Dosyada /etc/ImageMagick-6/policy.xml(veya /etc/ImageMagick/policy.xml)

  1. yorum satırı

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. hattı değiştir

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

    için

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. satır ekle

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

Ardından web sunucunuzu (nginx, apache) yeniden başlatın .


54
4 Ekim 2018'den bu yana bir Ubuntu kutusunda bu sorunu yaşadıysanız, bu kabul edilebilir cevap olmalıdır. Diğer dağıtımlardan başka herhangi bir sorun var mı?
LucasBr

12
Ben de sadece bugün Ubuntu 16.04 bu sorunu alıyorum. Bir şey değişti mi? Ayrıca LABEL satırını eklememe gerek yoktu, PDF haklarını "none" dan "read" a değiştir.
Bryant Kou

4
Çözer çok benzer bir benim Ubuntu 18.04.1 LTS kutusunda sorun
mhernandez

3
Sunucumda, policy.xmldosya en son 29 Eylül'de güncellendi, ancak sorunlar bugün ortaya çıkıyor. Ubuntu sunucusu 14.04.5 kullanıyorum, ancak otomatik güncellemeyi ayarladım. Uygun günlüğünde, bu güncellemeyi buldum:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia


161

Dosyaları dosyalara convertdönüştürmek için birçok kez ImageMagic komutunu kullanıyorum .*.tif*.pdf

Nedenini bilmiyorum ama bugün aşağıdaki hatayı almaya başladım:

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

Komutu verdikten sonra:

convert a.tif a.pdf

Yukarıdaki cevapları okuduktan sonra dosyayı düzenledim /etc/ImageMagick-6/policy.xml

ve satırı değiştirdi:

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

için

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

ve şimdi her şey yolunda gidiyor.

"Ubuntu 16.04.5 LTS" üzerinde "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" var.


1
OpenSuse Leap 15.0 kullanıyorum ve 10 Ekim 2018'de openSuse tarafından yapılan bir güncellemeden sonra bile PDF sayfalarını karşılaştırmak için "karşılaştır" ı kullandım . Burada açıklanan satırı değiştirdikten sonra işe yaradı.
Keks Dose

Ubuntu Xenial 16.04 LTS kullanıyorum ve aniden Apache günlüklerinde bu hatayı görmeye başladım. Burada açıklanan politikayı değiştirdikten sonra sorunun çözüldüğünü onaylıyorum.
user2641103

5
Bu asgari doğru cevaptır - sNICkerssss'in cevabı teknik olarak doğrudur, ancak convertPDF'nin komut satırı kullanımı için sadece bir adım gereklidir .
davidA

1
Bu 'sorun' Ghostscript işlevselliği için hızlı ve kirli 'düzeltme', uzun vadede Ghostscript (ve muhtemelen ImageMagick) yerine bulmalıyız.
9ilsdx 9rvj 0lo

4
Bunu yapma. Bu kısıtlama, olası uzaktan kod yürütme nedeniyle bir güvenlik önlemi olarak uygulanmıştır (bkz. Launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Bu yüzden doğru cevap: Bu görev için başka bir program kullanmalısınız.
Marian

66

Not: bu çözüm ve diğer "policy.xml dosyasını düzenle" çözümü, ImageMagick'teki rastgele kod yürütme güvenlik açıklarına karşı güvenlik önlemlerini devre dışı bırakır. % 100 kontrol etmediğiniz bir girişi işlemeniz gerekiyorsa, farklı bir program kullanmalısınız (ImageMagick değil).

Hala buradaysanız, üzerinde tam kontrole sahip olduğunuz, güvenli olduğunuzu bildiğiniz ve kullanıcılar tarafından düzenlenemeyen görüntüleri düzenlemeye çalışıyorsunuz.

/etc/ImageMagick/policy.xmlYum tarafından yüklenen bir dosya var. Neredeyse her şeye izin vermez (güvenlik ve sisteminizi ImageMagick çağrılarıyla aşırı yüklenmekten korumak için).

ReadImageYukarıdaki gibi bir hata alıyorsanız, satırı şu şekilde değiştirebilirsiniz:

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

bu da sorunu çözmelidir.

Dosyanın içinde bir sürü belge var, bu yüzden bunu okumalısınız. Örneğin, daha fazla izne ihtiyacınız varsa, bunları aşağıdaki gibi birleştirebilirsiniz:

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

... tüm izin kontrollerinin kaldırılması tercih edilir (yani, satırın silinmesi veya yorumlanması).


2
Bunu yapma. Bu kısıtlama, olası uzaktan kod yürütme nedeniyle bir güvenlik önlemi olarak uygulanmıştır (bkz. Launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Bu yüzden doğru cevap: Bu görev için başka bir program kullanmalısınız.
Marian

5
@Marian Başka bir program kullanmak yardımcı değildir - OP özellikle ImageMagick hakkında sordu. Yanıt "Ne yaptığınızı bilmeli, kendi sorumluluğunuzda yapmalı, sisteminizin güvenli olduğundan emin olmalısınız, işte bu yüzden yapmamalısınız ve işte nasıl yapılacağınız" olmalıdır.
Mayıs

2
OP (ve ben dahil web aramasıyla buraya gelen insanlar) şimdiye kadar ImageMagick kullanıyorlar; elbette, bu sorunu çözmedeki ilk denemeleri ImageMagick kullanarak bir çözüm bulmaktır, çünkü bu en az miktarda değişiklik gerektirir. Bu, koşulsuz olarak ImageMagick'i kullanmak istedikleri anlamına gelmez.
Marian

3
Güvenliğe yönelik bu küçümseyen yaklaşımı binlerce kişi tarafından görülen bir Soru-Cevap sitesi için çok uygunsuz buluyorum (bu sayfa 100 bin kez görüntülendi ve bu sorunun en iyi arama sonucudur) - ve açık olalım, vurgulamak için büyük ve sesli bir girişim oldu tanıtmak üzere kurulmuş özel bir site de dahil olmak üzere bu güvenlik açığının önemi ( imagetragick.com ) - Marian'ın güvenlik atlaması yerine alternatiflerin aranması gerektiği önerisi geçerlidir. Bunun yerine GIMP kullanmayı seçtim. popplerGhostScript'e bir alternatiftir ( convertPDF sayfalarını görüntülere rasterlemeye dayanır)
Louis Maddox

1
Güvenlik ilkesini geçici olarak devre dışı bırakmak için bir komut satırı seçeneği yok mu? Sonra güvendiğimiz belirli PDF dosyaları için kullanabiliriz.
HRJ

27

Birinin kurulumdan sonra bir komutla yapması gerekiyorsa, bunu çalıştırın!

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

5
Daha özlü. Ve sudo / etc içindeki bir dosyayı düzenlemek için gereklidir sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed

ghostscript'i güncellediğinizden emin olun kb.cert.org/vuls/id/332928
ykay diyor Reinstate Monica

24

En yüksek oyu olan cevap (orada yorum eklemek için yeterli üne sahip değilim) MVG hattını yorumlamayı önerir, ancak bunu aklınızda bulundurun:

CVE-2016-3714

ImageMagick, ".svg / .mvg" dosyalarını destekler; bu, saldırganların bir komut dosyası dilinde kod oluşturabileceği anlamına gelir; örn. MSL (Magick Scripting Language) ve MVG (Magick Vector Graphics), dosyayı bir görüntü dosyası olarak gizlenmiş bir sunucuya yükleyebilir ve Yukarıda açıklandığı gibi sunucu tarafında kötü amaçlı komutları çalıştırmak için yazılım. Örneğin, aşağıdaki komutları bir dosyaya eklemek ve savunmasız bir ImageMagick sürümü kullanan bir web sunucusuna yüklemek sunucuda "ls -la" komutunun çalıştırılmasına neden olur.

exploit.jpg:

grafik içerik görüntüleme kutusunu it 0 0 640 480 dolgu 'url ( https://website.com/image.png "| ls" -la)' pop grafik-bağlam

Ve

7.0.1-2 veya 6.9.4-0 sürümünün altındaki herhangi bir sürüm potansiyel olarak savunmasızdır ve etkilenen taraflar en kısa zamanda en son ImageMagick sürümüne yükseltmelidir.

Kaynak


3
MVG ve PDF yorum yapmadım -> JPG dönüşüm hala çalışıyor. Teşekkür ederim.
Rimu Atkinson

1
6.7.7-10, 28.09.2018 tarihinde yayınlanan en yeni sürüme benziyor ). Neyi kaçırıyorum? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran

daha yeni bir sürümü var imagemagick.org/script/download.php Muhtemelen Linux dağıtımınız eskisini kullanıyor. Ubuntu 16.04 şu anda 6.8.9-9
Nikolay Ivanov

1
Güzel, bu yüzden Ubuntu ekibi için uygun çözüm, imagemagick'i daha yeni bir sürüme güncellemek, mevcut olanı kırmak değil.
9ilsdx 9rvj 0lo

2
Hayır. Ubuntu bir özellik-dondurma dağıtımıdır ve daha yeni sürümleri göndermez.
Buo-Ren Lin

19

Ubuntu 16.04 sistemimdeki son güncellemeden sonra, .ps dosyalarında pdfs'ye dönüştürmek için convert'i çalıştırmaya çalışırken bu hatayı almaya başladım.

Bu düzeltme benim için çalıştı:

Bir terminal çalışmasında:

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

Bu, policy.xml dosyasını gedit metin düzenleyicisinde açmalıdır. Aksi takdirde, görüntü sihirbazınız farklı bir yere kurulabilir. Sonra değiştir

rights="none" 

için

rights="read | write" 

dosyanın altına yakın PDF, EPS ve PS satırları için. Kaydedip çıktığınızda görüntü sihirbazı tekrar çalışmalıdır.


1
ghostscript'i güncellediğinizden emin olun kb.cert.org/vuls/id/332928
ykay diyor Reinstate Monica

Bu Ubuntu 18.04 ImageMagick 6.9.7-4'te yardımcı oldu. Teşekkürler.
Ve

11

/Etc/ImageMagick/policy.xml dosyasını silmeniz yeterlidir.


1
basit ama mükemmel. Test travis üzerinde başarısız olduğu için bunu yaptım
Dan Rey Oquindo

1
Tonlarca görevden çalışan tek çözüm budur. Yeniden adlandırdım policy-disabled.xml. Güvenlik sorunlarının giderildiğinden emin olana kadar geri yükleyeceğimi düşünüyorum
groovenectar

Ve jupyter defter durumunda çekirdeğinizi yeniden başlattıktan sonra
Nicole Douglas

2

Burada birkaç öneri okuduktan ve fikirleri birleştirdikten sonra, benim için /etc/ImageMagick-6/policy.xml dosyasında aşağıdaki değişikliklerin yapılması gerekiyordu:

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

... haklar = "hiçbiri" yardımcı olmadı. ... pattern = "LABEL" gerekli değildi. Her ne kadar büyük png dosyalarıyla (sadece ~ 1 Mb) çalışmama rağmen, bellek sınırlarında bazı değişiklikler de gerekliydi:

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

(256Mib yerine) ve

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

(128 MB yerine)



2

Raster dosyalarını ve PDF / PS / EPS'yi aynı araçla işlemeniz gerekmiyorsa, ImageMagick'in güvenliğini gevşetmeyin.

Bunun yerine, web uygulamalarınız için savunmanızı derinlemesine koruyun, Ghostscriptinizin bilinen tüm -dSAFERgüvenlik açıkları için yamalanmış olup olmadığını kontrol edin ve ardından doğrudan çağırın.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER "uyum Postscript çalıştırmak bir turing-komple programlama dili olarak dış dünya ile etkileşim için tam izin olacak" eski uyumsuz seçer.
  • -r300 istenen DPI değerini 300 olarak ayarlar (varsayılan 72'dir)
  • -sDEVICEçıktı biçimini belirtir ( Diğer seçenekler için kılavuzun Cihazlar bölümüne bakın .)
  • -o için bir kısayol -dBATCH -dNOPAUSE -sOutputFile=
  • Ghostscript kılavuzunun bu bölümü , çok dosyalı dosya adı çıktısı için bazı örnek formatlar verir, ancak gerçek sözdizimi tanımı için C printf (3) işlevinin belgelerine işaret eder.

EPS dosyaları oluşturuyorsanız, -dEPSCropçıktınızı sayfa boyutuna sığmayacak şekilde ekleyin ve -sDEVICE=pngalphasaydam arka planlar elde etmek için kullanın .


Daha güvenli bir çözüm için teşekkürler. Yine de GhostScript komut satırı seçeneklerini hatırlayabileceğimden emin değilim! :)
Cris Luengo

@CrisLuengo Ben de yapmayacağım. Bu nedenle, sorulan soruya iyi bir yanıtın nerede olduğunu bulabildiğim kadar çok Google sonucuna gönderdim. : P
ssokolow

1
-r600 -dDownScaleFactor=4150 dpi ancak daha iyi kenar yumuşatma içeren bir dosya oluşturmak için iyi sonuçlar buldum .
John Cole

0

Ayrıca error/constitute.c/ReadImage/453 bir görüntü gif ile bir gif bir eps dönüştürmek çalışırken hata vardı . SNICkerssss tarafından önerilen çözümü denedim ama yine de hatalar vardı (ilkinden farklı olsa da) e error/constitute.c/ReadImage/412 Sorunu çözen şey readdiğer girişlere koymaktı

 <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
Bu soruya gerçekten cevap vermiyor. Farklı bir sorunuz varsa Soru Sor'u tıklayarak bunu sorabilirsiniz . Ayrıca , yeterli itibara sahip olduğunuzda bu soruya daha fazla dikkat çekmek için bir ödül ekleyebilirsiniz . - Yorumdan
Sirence

Önerin için teşekkürler. Bu arada cevabımı düzenledim. Neyse ben gerçekten sNICkerssss cevap bir yorum olması gerektiğini hissettim, ama ekleyemiyorum beri anladım en iyi yolu
lambertmular

@Sirence bu bir cevap, diğer düşüncelerin kopyaları olduğu için kötü düşünülmüş.
9ilsdx 9rvj 0lo

@ 9ilsdx9rvj0lo yorumum düzenleme öncesi idi. stackoverflow.com/posts/52700739/revisions
Sirence
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.