konwersja: nie autoryzowany `aaaa` @ error / constit.c / ReadImage / 453

309

Chcę utworzyć zdjęcie captcha za pomocą convertImageMagick.

I śledzę to , ale jest jakiś problem.

Wejście w mojej powłoce linux:

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

Błąd jest następujący:

konwersja: brak autoryzacji adfgh@ error / constit.c / ReadImage / 453. konwersja: brak nazwy pliku obrazu ./test.png@ error / convert.c / ConvertImageCommand / 3015

My ImageMagick: Wersja: 6.7.2-7, instaluję go za pomocą yum install ImageMagick.

Nie mam pojęcia. Wszelkie porady proszę?

jianwei
źródło
7
Podwójna kontrola policy.xml. Opcje bezpieczeństwa mogą uniemożliwić label:protokół.
emcconville
2
dzięki! Zmieniam plik policy.xml, komentuję ten wiersz „<domain domain =„ coder ”rights =” none ”pattern =„ LAEBL ”>”. To działa ! Dzięki !
jianwei
3
Gdzie jest plik policy.xml?
Arnold Roa
3
/etc/ImageMagick/policy.xml
jianwei
6
/etc/ImageMagick-6/policy.xml
xerostomus

Odpowiedzi:

445

Uwaga: rozwiązanie w tej i innych odpowiedziach obejmuje wyłączenie środków bezpieczeństwa służących do naprawy luk w zabezpieczeniach wykonywania dowolnego kodu. Zobacz na przykład to związane z ghostscript i to ogłoszenie związane z ubuntu . Korzystaj z tych rozwiązań tylko wtedy, gdy dane wejściowe convertpochodzą z zaufanego źródła.

Korzystam z ImageMagick w php (v.7.1), aby pokroić plik PDF na obrazy.

Najpierw dostałem błędy takie jak:

Typ wyjątku: ImagickException

Komunikat wyjątku: brak autoryzacji ..... @ error / constit.c / ReadImage / 412

Po kilku zmianach /etc/ImageMagick-6/policy.xmlzaczynam dostawać błędy:

Typ wyjątku: ImagickException

Komunikat o wyjątku: nie można utworzyć pliku tymczasowego ..... Odmowa dostępu @ error / pdf.c / ReadPDFImage / 465

Moja poprawka :

W pliku /etc/ImageMagick-6/policy.xml(lub /etc/ImageMagick/policy.xml)

  1. linia komentarza

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. zmień linię

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

    do

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. dodaj linię

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

Następnie uruchom ponownie serwer WWW (nginx, apache).

sNICkerssss
źródło
54
To powinna być akceptowalna odpowiedź, jeśli wystąpił ten problem na komputerze z systemem Ubuntu od 4 października 2018 r. Jakieś inne problemy z innych dystrybucji?
LucasBr
12
Właśnie dostaję ten problem już dziś na Ubuntu 16.04. Czy coś się zmieniło? Nie musiałem też dodawać linii LABEL, po prostu zmień prawa do PDF z „none” na „read”.
Bryant Kou,
4
Rozwiązuje bardzo podobny problem w moim Ubuntu 18.04.1 LTS box
mhernandez
3
Na moim serwerze policy.xmlplik został ostatnio zaktualizowany 29 września, ale problemy pojawiają się dzisiaj. Używam serwera Ubuntu 14.04.5, ale ustaw automatyczną aktualizację. W dzienniku apt znalazłem informacje o tej aktualizacji:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia
12
Oto powiązany dziennik zmian: launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13
Donny Kurnia
161

Używam wielokrotnie convertpolecenia ImageMagic do konwersji *.tifplików*.pdf pliki.

Nie wiem dlaczego, ale dzisiaj zacząłem otrzymywać następujący błąd:

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

Po wydaniu polecenia:

convert a.tif a.pdf

Po przeczytaniu powyższych odpowiedzi dokonałem edycji pliku /etc/ImageMagick-6/policy.xml

i zmieniłem linię:

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

do

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

a teraz wszystko działa dobrze.

Mam „ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28” na „Ubuntu 16.04.5 LTS”.

Lv2eof
źródło
1
Korzystam z openSuse Leap 15.0 i użyłem „porównaj”, aby porównać strony PDF, ten sam błąd, nawet po aktualizacji openSuse 10 października 2018. Po zmianie linii, jak opisano tutaj, zadziałało.
Keks Dawka
Jestem na Ubuntu Xenial 16.04 LTS i nagle zacząłem widzieć ten błąd w logach Apache. Potwierdzam, że po zmianie opisanej tutaj polityki problem został rozwiązany.
user2641103,
5
Jest to minimalna poprawna odpowiedź - odpowiedź sNICkerssss jest technicznie poprawna, jednak tylko jeden krok jest potrzebny do użycia convertpliku PDF w wierszu polecenia .
davidA
1
Ten „problem” to szybka i brudna „poprawka” funkcji Ghostscript, w dłuższej perspektywie powinniśmy znaleźć zamiennik Ghostscript (i prawdopodobnie ImageMagick).
9ilsdx 9rvj 0lo
4
Nie rób tego To ograniczenie zostało wprowadzone jako środek bezpieczeństwa ze względu na możliwe zdalne wykonanie kodu (patrz launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Prawidłowa odpowiedź brzmi: powinieneś użyć innego programu do tego zadania.
Marian
66

Uwaga: to rozwiązanie i każde inne rozwiązanie „edytuj plik policy.xml” wyłącza zabezpieczenia przed lukami w zabezpieczeniach przed wykonaniem dowolnego kodu w ImageMagick. Jeśli potrzebujesz przetworzyć dane wejściowe, których nie kontrolujesz w 100%, powinieneś użyć innego programu (nie ImageMagick).

Jeśli nadal tu jesteś, próbujesz edytować obrazy, nad którymi masz pełną kontrolę, wiesz, że są bezpieczne i nie mogą być edytowane przez użytkowników.

Tam jest /etc/ImageMagick/policy.xml plik instalowany przez yum. Nie zezwala na prawie wszystko (dla bezpieczeństwa i dla ochrony twojego systemu przed przeciążeniem wywołaniami ImageMagick).

Jeśli otrzymujesz ReadImagebłąd jak wyżej, możesz zmienić linię na:

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

co powinno rozwiązać problem.

Plik zawiera sporo dokumentacji, więc powinieneś to przeczytać. Na przykład, jeśli potrzebujesz więcej uprawnień, możesz je połączyć w następujący sposób:

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

... co jest lepsze niż usunięcie wszystkich kontroli uprawnień (tj. usunięcie lub skomentowanie linii).

Krystyna
źródło
2
Nie rób tego To ograniczenie zostało wprowadzone jako środek bezpieczeństwa ze względu na możliwe zdalne wykonanie kodu (patrz launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Prawidłowa odpowiedź brzmi: powinieneś użyć innego programu do tego zadania.
Marian
5
@Marian Korzystanie z innego programu nie jest pomocne - PO zapytał konkretnie o ImageMagick. Odpowiedź powinna brzmieć: „Powinieneś wiedzieć, co robisz, rób to na własne ryzyko, upewnij się, że system jest bezpieczny, oto dlaczego nie powinieneś, a oto jak to zrobić”.
KolonUK
2
OP (i ludzie przybywający tu przez wyszukiwarkę internetową, w tym ja) używali ImageMagick do tej pory; więc ich pierwszą próbą rozwiązania tego problemu jest znalezienie rozwiązania za pomocą ImageMagick, ponieważ wymaga to najmniejszej liczby zmian. Nie oznacza to, że bezwarunkowo chcą korzystać z ImageMagick.
Marian
3
Uważam, że to lekceważące podejście do bezpieczeństwa jest bardzo nieodpowiednie w przypadku witryny z pytaniami i odpowiedziami widzianymi przez tysiące osób (ta strona była wyświetlana 100 000 razy i jest najlepszym wynikiem wyszukiwania tego problemu) - i bądźmy szczerzy, tutaj była duża i głośna próba podkreślenia znaczenie tej luki, w tym dedykowanej witryny utworzonej w celu jej opublikowania ( imagetragick.com ) - sugestia Mariana, że ​​należy szukać alternatyw zamiast omijać zabezpieczenia, jest ważna. Zamiast tego wybrałem GIMP. popplerjest alternatywą dla GhostScript (który convertpolega na rasteryzacji stron PDF do obrazów)
Louis Maddox
1
Czy nie ma opcji wiersza polecenia, która tymczasowo wyłącza politykę bezpieczeństwa? Następnie moglibyśmy użyć go do określonych plików PDF, którym ufamy.
HRJ
27

Jeśli po instalacji ktoś musi to zrobić za pomocą jednego polecenia, uruchom to!

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
źródło
6
Krótszy:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
lewej około
5
Bardziej zwięzłe. I sudo jest wymagane do edycji pliku w / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed
pamiętaj, aby zaktualizować ghostscript kb.cert.org/vuls/id/332928
porządku, mówi: Przywróć Monikę
24

Odpowiedź z największą liczbą głosów (nie mam wystarczającej reputacji, aby dodać komentarz) sugeruje skomentowanie linii MVG, ale pamiętaj o tym:

CVE-2016-3714

ImageMagick obsługuje pliki „.svg / .mvg”, co oznacza, że ​​osoby atakujące mogą tworzyć kod w języku skryptowym, np. MSL (Magick Scripting Language) i MVG (Magick Vector Graphics), przesyłać go na serwer zamaskowany jako plik obrazu i wymuszać oprogramowanie do uruchamiania złośliwych poleceń po stronie serwera, jak opisano powyżej. Na przykład dodanie następujących poleceń do pliku i przesłanie go do serwera WWW korzystającego z wrażliwej wersji ImageMagick spowoduje uruchomienie polecenia „ls -la” na serwerze.

exploit.jpg:

push graficzny kontekst kontekstowy 0 0 640 480 wypełnij „url ( https://website.com/image.png " | ls "-la)" pop graficzny kontekst

I

Każda wersja poniżej 7.0.1-2 lub 6.9.4-0 jest potencjalnie podatna na atak, a strony, których to dotyczy, powinny jak najszybciej uaktualnić do najnowszej wersji ImageMagick.

Źródło

Nikołaj Iwanow
źródło
3
Nie skomentowałem MVG i PDF -> Konwersja JPG nadal działa. Dziękuję Ci.
Rimu Atkinson,
1
6.7.7-10 wygląda jak najnowsza wersja, wydana 28.09.2018). czego mi brakuje? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran,
dostępna jest nowsza wersja imagemagick.org/script/download.php Prawdopodobnie Twoja dystrybucja Linuksa używa starszej wersji. Ubuntu 16.04 używa obecnie 6.8.9-9
Nikołaj Iwanow
1
Fajnie, więc właściwym rozwiązaniem dla zespołu Ubuntu byłoby zaktualizowanie imagemagick do nowszej wersji, a nie uszkodzenie istniejącej.
9ilsdx 9rvj 0lo
2
Nie. Ubuntu jest dystrybucją zawierającą funkcje i nie będzie dostarczać nowszych wersji.
Buo-Ren Lin
19

Po ostatniej aktualizacji mojego systemu Ubuntu 16.04 zacząłem również pojawiać się ten błąd podczas próby konwersji plików .ps w celu ich konwersji na pliki pdf.

Ta poprawka zadziałała dla mnie:

W biegu terminalowym:

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

To powinno otworzyć plik policy.xml w edytorze tekstu gedit. Jeśli nie, twoja magia obrazu może zostać zainstalowana w innym miejscu. Następnie zmień

rights="none" 

do

rights="read | write" 

dla linii PDF, EPS i PS w dolnej części pliku. Zapisz i wyjdź, a magia obrazu powinna znów działać.

Murray Hoggett
źródło
1
pamiętaj, aby zaktualizować ghostscript kb.cert.org/vuls/id/332928
porządku, mówi: Przywróć Monikę
Pomogło to w Ubuntu 18.04 ImageMagick 6.9.7-4. Dzięki.
I
11

Wystarczy usunąć plik /etc/ImageMagick/policy.xml.

Jarda Pavlíček
źródło
1
proste, ale idealne. Zrobiłem to, ponieważ test nie
udał się na Travis
1
To jedyne rozwiązanie, które działało z ton postów. Zmieniłem nazwę na policy-disabled.xml. Myślę, że przywrócę go, dopóki nie
upewnię się,
Po ponownym uruchomieniu jądra w przypadku notesu jupyter
Nicole Douglas
2

Po przeczytaniu kilku sugestii i połączeniu pomysłów, dla mnie konieczne były następujące zmiany w pliku /etc/ImageMagick-6/policy.xml:

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

... prawa = „brak” nie pomogło. ... wzór = „ETYKIETA” nie była konieczna. Chociaż nie pracuję z dużymi plikami png (tylko ~ 1 Mb), konieczne były również pewne zmiany limitów pamięci:

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

(zamiast 256Mib) i

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

(zamiast 128 MB)

Kristjan Adojaan
źródło
2

Wystąpił ten błąd podczas próby konwersji pliku pdf do formatu jpg i rozwiązałem go przy użyciu tej metody: sudo vi /etc/ImageMagick*/policy.xml

zmiana:

domena strategii = prawa „kodera” = „brak” wzorzec = „PDF”

do:

domain domain = „coder” rights = „read | write” pattern = „PDF”

Źródło: http://realtechtalk.com/ImageMagick_Convert_PDF_Not_Authorized-2217-articles

Areeb Soo Yasir
źródło
2

Jeśli nie potrzebujesz obsługiwać plików rastrowych i plików PDF / PS / EPS za pomocą tego samego narzędzia, nie poluzuj zabezpieczeń ImageMagick.

Zamiast tego, zachowaj swoją głęboką obronę dla swoich aplikacji internetowych w nienaruszonym stanie, sprawdź, czy Ghostscript został załatany pod kątem wszystkich znanych -dSAFERluk, a następnie wywołaj go bezpośrednio.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER rezygnuje ze starszej kompatybilności „Uruchom Postscript uzyska pełne pozwolenie na interakcję ze światem zewnętrznym jako tryb pełnego języka programowania”.
  • -r300 ustawia pożądaną DPI na 300 (domyślnie 72)
  • -sDEVICEokreśla format wyjściowy ( inne opcje można znaleźć w sekcji Urządzenia instrukcji).
  • -o jest skrótem od -dBATCH -dNOPAUSE -sOutputFile=
  • W tej sekcji instrukcji Ghostscript podano kilka przykładowych formatów wyjściowych plików wieloplikowych, ale dla faktycznej definicji składni wskazuje ona dokumentację funkcji C printf (3) .

Jeśli renderujesz pliki EPS, dodaj, -dEPSCropaby nie dopasowywał wydruków do rozmiaru strony i nie służy -sDEVICE=pngalphado uzyskania przezroczystego tła.

ssokolow
źródło
Dzięki za bezpieczniejsze rozwiązanie. Nie jestem jednak pewien, czy kiedykolwiek będę w stanie zapamiętać opcje wiersza poleceń GhostScript! :)
Cris Luengo
@CrisLuengo ja też nie. Dlatego opublikowałem go w tylu wynikach Google, ile mogłem znaleźć, gdzie była to dobra odpowiedź na postawione pytanie. : P
ssokolow
1
Znalazłem dobre wyniki przy -r600 -dDownScaleFactor=4tworzeniu pliku o rozdzielczości 150 dpi, ale z lepszym antyaliasingiem.
John Cole
0

Miałem również błąd error/constitute.c/ReadImage/453 podczas próby konwersji eps na gif z magią obrazu. Wypróbowałem rozwiązanie zaproponowane przez sNICkerssss, ale nadal miałem błędy (choć różne od pierwszego) e error/constitute.c/ReadImage/412 Rozwiązaniem problemu było umieszczenie readinnych wpisów

 <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
źródło
1
To tak naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając Zadaj pytanie . Możesz także dodać nagrodę za zwrócenie większej uwagi na to pytanie, gdy będziesz mieć wystarczającą reputację . - Z recenzji
Sirence,
Dzieki za sugestie. W międzyczasie zredagowałem swoją odpowiedź. W każdym razie naprawdę czułem, że powinien to być komentarz do odpowiedzi sNICkerssss, ale ponieważ nie mogę tego dodać, jest to najlepszy sposób, jaki wymyśliłem
lambertmular,
@ Sirence to odpowiedź, uważana za kiepską, ponieważ kopiuje z innych odpowiedzi.
9ilsdx 9rvj 0lo
@ 9ilsdx9rvj0lo mój komentarz był przed edycją. stackoverflow.com/posts/52700739/revisions
Sirence