The Imagemagick security policy seems to be not allowing me perform this conversion from pdf to png. Converting other extensions seem to be working, just not from pdf. I haven't changed any of the imagemagick settings since I installed it... I am using Arch Linux, if the OS matters.
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.
The ImageMagick change was kept after Ghostscript was fixed because applications (especially web applications) often feed arbitrary user-supplied files to ImageMagick, don't always enforce format restrictions properly, and, since Postscript (which PDF uses) is a turing-complete programming language running in a sandbox, there's always the possibility of another hole in the sandbox.
It's much better to leave things configured so ImageMagick refuses to process files that require running a program and, instead, just invoke Ghostscript directly when you intentionally want to permit Postscript rendering.
That would be accomplished by a Ghostscript command like this:
gs -dSAFER -r600 -sDEVICE=pngalpha -o foo.png myfile.pdf
Yes, this is a variation on the GhostScript command ImageMagic calls. (see ImageMagick's delegates.xml
. -o
is shorthand for -dBATCH -dNOPAUSE -sOutputFile=
)
What's important is that ImageMagick stays locked down, you don't needlessly invoke an intermediate program, and you get more control over the rendering parameters. (eg. -r600
is the DPI to render at and changing -sDEVICE=pngalpha
allows you to render directly to your desired format)
-sDEVICE=jpeg
. Well, I added
<policy domain="coder" rights="read | write" pattern="PDF" />
just before </policymap>
in /etc/ImageMagick-7/policy.xml
and that makes it work again, but not sure about the security implications of that.
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
and just uncommented it to make it work. rights="read|write"
on pattern="EPS"
will accomplish nothing if you don't do the same for pattern="PS'
, or move the EPS line above the PS line. convert-im6.q16: FailedToExecuteCommand
'gs'` , anybody has a clue how to fix this? I'm using Image Magick 6.9.10-23 Q16 x86_64 20190101 on Ubuntu 20 convert --version
shows Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org
and gs --version
shows 9.50
! Now this command works to convert all jpg images into my dir to a single out.pdf
!: convert *.jpg out.pdf
. See: AskUbuntu: Create a single pdf from multiple text, images or pdf files. <!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
was sufficient in /etc/ImageMagick-6/policy.xml
on Ubuntu 20.04. This issue is a workaround for a security vulnerability. The vulnerability has been addressed in Ghostscript 9.24, so if you have that or a newer version, you don't need the workaround anymore.
On Ubuntu 19.04 through 22.04 and probably any later versions with ImageMagick 6, here's how you fix the issue by removing that workaround:
Make sure you have Ghostscript ≥9.24:
gs --version
If yes, just remove this whole following section from /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" />
Removing just the line with pattern="PDF"
inside would be enough to re-enable PDF conversion. I can't see a good reason to keep the workaround for other PostScript-based file types, though.
Attribution: @jakob-r's comment on an alternative answer. And the helpful comments here below 🙂
sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
worked fine for me. sudo service php8.1-fpm restart
<!--
and -->
. pattern="PDF"
and it'd work. Manjaro April 2021
Just remove uncommented line inside <policymap>
in /etc/ImageMagick-7/policy.xml
I was experiencing this issue with nextcloud which would fail to create thumbnails for pdf files.
However, none of the suggested steps would solve the issue for me.
Eventually I found the reason: The accepted answer did work but I had to also restart php-fpm after editing the policy.xml file:
sudo systemctl restart php7.2-fpm.service
Thank you @tanius and others for the detailed answers !
I'd just add to it the following points.
The path of the policy file policy.xml may change with the version of the ImageMagick like /etc/ImageMagick-6/policy.xml or /etc/ImageMagick-7/policy.xml etc. So update it accordingly.
As the policy to prevent or allow the conversion for some filetypes is a security measure, you may like to reset the changes to the policy.xml after the task is done so that there is no possibilty of the corresponding attack, if the system is accessible to attackers !
Happy speedy file conversions meanwhile !
In my case i'm useing ubuntu 20.10 and the Imagick-7.
in my /etc/ImageMagick-6/policy.xml I've removed below lines, restarted my machine and I'm done.
<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" />
On Ubuntu 19.10, I have done this in /etc/ImageMagick-6/policy.xml
uncomment this
<policy domain="module" rights="read | write" pattern="{PS,PDF,XPS}" />
and comment this
<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
After that, this command work without error
convert -thumbnail x300 -background white -alpha remove sample.pdf sample.png
As a highly active comment by @Richard Kiefer, a simple fix is like this
$ sudo sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
For me on Arch Linux, I had to comment this:
<policy domain="delegate" rights="none" pattern="gs" />
/etc/ImageMagick-6/policy.xml
and /etc/ImageMagick-7/policy.xml
. Take care to edit the right one! rights="read|write"
like other answers suggest would work, but also found that I needed to fully comment this out. For those familiar with xml, would be sweet to adjust your answer to show that "comment this" means to take <foo... />
and make it <!-- <foo... /> -->
. Would spare the new user one extra search. /etc/ImageMagick-7/policy.xml
Works in Ubuntu 20.04
Add this line inside <policymap>
<policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" />
Comment these lines:
<!--
<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" />
-->
<policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" />
wasn't needed for me As pointed out in some comments, you need to edit the policies of ImageMagick in /etc/ImageMagick-7/policy.xml
. More particularly, in ArchLinux at the time of writing (05/01/2019) the following line is uncommented:
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
Just wrap it between <!--
and -->
to comment it, and pdf conversion should work again.
/usr/share/bug/imagemagick
, there are no policy.xml file inside imagemagick directory. For me on my archlinux system the line was already uncommented. I had to replace "none" by "read | write " to make it work.
For my system Ubuntu 20.04
wasnt working, but for my windows 10 was working just fine.
my main job was to add subtitles to a video and generate an output mp4
.
After messing around with the policy.xml
file i found a "potentially" bad workaround. which is delete all contents of the policy.xml
, which has worked for me and i was able to add my subtitles to the video.
Please be aware this might be a temporary fix untill you dont find a better solution.
Adding to Stefan Seidel's answer.
Well, at least in Ubuntu 20.04.2 LTS or maybe in other versions you can't really edit the policy.xml file directly in a GUI way. Here is a terminal way to edit it.
Open the policy.xml file in terminal by entering this command -
sudo nano /etc/ImageMagick-6/policy.xml
Now, directly edit the file in terminal, find
<policy domain="coder" rights="none" pattern="PDF" />
and replace none
with read|write
as shown in the picture. Then press Ctrl+X to exit.
<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->