Polityka bezpieczeństwa ImageMagick blokująca konwersję „PDF”


176

Wydaje się, że polityka bezpieczeństwa Imagemagick nie pozwala mi na wykonanie tej konwersji z formatu pdf na png. Wydaje się, że konwersja innych rozszerzeń działa, ale nie z pliku PDF. Nie zmieniłem żadnych ustawień imagemagick odkąd go zainstalowałem ... Używam Arch Linux, jeśli system operacyjny ma znaczenie.

user@machine $ convert -density 300 -depth 8 -quality 90 input.pdf output.png
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert: no images defined `output.png' @ error/convert.c/ConvertImageCommand/3288.

Odpowiedzi:


214

Cóż, dodałem

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

tuż przed </policymap>in /etc/ImageMagick-7/policy.xmli to sprawia, że ​​działa ponownie, ale nie jestem pewien, jakie mają to konsekwencje dla bezpieczeństwa.


3
Uważam, że polityka PDF została dodana z powodu błędu w Ghostscript, który, jak sądzę, został już naprawiony. Więc jeśli używasz aktualnego Ghostscriptu, powinieneś być w porządku, dając tej polityce prawa do odczytu | zapisu.
fmw42

30
Znalazłem linię <policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />i po prostu odkomentowałem ją, aby działała.
jakob-r

8
Luki w zabezpieczeniach, które spowodowały, że dystrybucje wdrożyły tę politykę, są wymienione tutaj: kb.cert.org/vuls/id/332928
Jason Siefken

17
@ jakob-r: Przypuszczam, że skomentowałeś to ... ;-)
AstroFloyd

1
Upewnij się, że ghostscript jest zaktualizowany kb.cert.org/vuls/id/332928
ykay mówi Przywróć Monikę

98

Jak wskazano w niektórych komentarzach, musisz edytować zasady ImageMagick w /etc/ImageMagick-7/policy.xml. W szczególności w ArchLinux w momencie pisania (05/01/2019) następujący wiersz nie jest komentowany:

<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />

Po prostu zawiń go między <!--i, -->aby go skomentować, a konwersja pdf powinna znów działać.


1
upewnij się, że ghostscript jest aktualny kb.cert.org/vuls/id/332928
tak mówi Przywróć Monikę

6
Jaki jest sens tej funkcjonalności? Aby uniemożliwić użytkownikom tworzenie plików PDF?
Limited Atonement

6
Częściowo tak. Ponieważ ImageMagick jest często używany przez strony internetowe do przetwarzania przesłanych plików - a PDF jest jednym z formatów plików, które mogą w zasadzie zawierać dowolny kod wykonywalny - każdy z uprawnieniami do przesyłania mógłby w przeciwnym razie wykonać dowolne zadanie, do którego użytkownik sieci ma dostęp. To samo, jeśli ktoś nakłoni Cię do osobistej konwersji złośliwego pliku PDF na inny format.
TwoD


25

Wynika to z luki w zabezpieczeniach, którą rozwiązano w Ghostscript 9.24 ( źródło ). Jeśli masz nowszą wersję, nie potrzebujesz już tego obejścia. W przypadku Ubuntu 19.10 z Ghostscript 6 oznacza to:

  1. Upewnij się, że masz Ghostscript ≥9,24:

    gs --version
    
  2. Jeśli tak, po prostu usuń całą następującą sekcję z /etc/ImageMagick-6/policy.xml:

    <!-- disable ghostscript format types -->
    <policy domain="coder" rights="none" pattern="PS" />
    <policy domain="coder" rights="none" pattern="PS2" />
    <policy domain="coder" rights="none" pattern="PS3" />
    <policy domain="coder" rights="none" pattern="EPS" />
    <policy domain="coder" rights="none" pattern="PDF" />
    <policy domain="coder" rights="none" pattern="XPS" />
    

Tylko poprawka, która działała dla mnie na Ubuntu 19.04 z gs 9.26.
ManuelTS

3
sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xmldziałało dobrze dla mnie.
Richard Kiefer

1
Pracował dla Ubuntu 20.04
Alex K.,

21

dla mnie na arch linux musiałem skomentować:

  <policy domain="delegate" rights="none" pattern="gs" />

W moim systemie były dwa pliki policy.xml: /etc/ImageMagick-6/policy.xmli /etc/ImageMagick-7/policy.xml. Uważaj, aby edytować właściwy!
SylvainB

4

W Ubuntu 19.10 zrobiłem to w /etc/ImageMagick-6/policy.xml

odkomentuj to

<policy domain="module" rights="read | write" pattern="{PS,PDF,XPS}" />

i skomentuj to

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

Następnie to polecenie działa bez błędów

convert -thumbnail x300 -background white -alpha remove sample.pdf sample.png 

0

Miałem problem z usługą nextcloud, która nie tworzyła miniatur dla plików pdf.

Jednak żaden z sugerowanych kroków nie rozwiązałby problemu.

W końcu znalazłem powód: zaakceptowana odpowiedź zadziałała, ale musiałem również ponownie uruchomić php-fpm po edycji pliku policy.xml:

 sudo systemctl restart php7.2-fpm.service
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.