ImageMagick安全策略“ PDF”阻止转换

时间:2018-10-25 21:25:10

标签: pdf imagemagick imagemagick-convert

Imagemagick安全策略似乎不允许我执行从pdf到png的转换。转换其他扩展名似乎可行,只是不能从pdf中转换。自安装它以来,我尚未更改任何imagemagick设置...如果操作系统很重要,我正在使用Arch Linux。

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.

12 个答案:

答案 0 :(得分:68)

好吧,我补充了

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

</policymap>/etc/ImageMagick-7/policy.xml的前面,这使得它可以再次工作,但不确定其安全性。

答案 1 :(得分:39)

正如一些评论中指出的那样,您需要在/etc/ImageMagick-7/policy.xml中编辑ImageMagick的策略。更具体地说,在撰写本文时(2019年5月1日),在ArchLinux中,以下行未注释:

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

只需将其包装在<!---->之间即可对其进行注释,然后pdf转换应再次起作用。

答案 2 :(得分:11)

对我来说,在我的archlinux系统上,该行已被取消注释。我必须将“ none”替换为“ read | write”才能使其正常工作。

答案 3 :(得分:7)

在Arch Linux上对我来说我不得不发表评论:

Overlay

答案 4 :(得分:6)

或者,您可以使用 img2pdf 将图像转换为 pdf。在 Debian 或 Ubuntu 上安装它:

sudo apt install img2pdf

将一张或多张图片转换为 pdf:

img2pdf img.jpg -o output.pdf

它使用与 imagemagick 不同的机制将图像嵌入到 pdf 中。在可能的情况下,Img2pdf 将图像直接嵌入到 pdf 中,无需对图像进行解码和重新编码。

答案 5 :(得分:5)

补充 Stefan Seidel 的答案。

好吧,至少在 Ubuntu 20.04.2 LTS 或其他版本中,您无法真正以 GUI 方式直接编辑 policy.xml 文件。这是编辑它的终端方式。

  1. 通过输入此命令在终端中打开 policy.xml 文件 -

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

  2. 现在,直接在终端编辑文件,找到 <policy domain="coder" rights="none" pattern="PDF" /> 并将 none 替换为 read|write,如图所示。然后按 Ctrl+X 退出。

Edit in terminal

答案 6 :(得分:4)

在Ubuntu 20.04中工作

将此行添加到<policymap>

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

评论这些行:

  <!--
  <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" />
   -->

答案 7 :(得分:4)

在修复 Ghostscript 后保留了 ImageMagick 更改,因为应用程序(尤其是 Web 应用程序)经常将任意用户提供的文件提供给 ImageMagick,并不总是正确强制执行格式限制,并且由于 Postscript(PDF 使用的)是图灵-在沙箱中运行的完整编程语言,沙箱中总是有另一个漏洞的可能性。

最好保持配置,以便 ImageMagick 拒绝处理需要运行程序的文件,而是在您有意希望允许 Postscript 渲染时直接调用 Ghostscript。

这将通过像这样的 Ghostscript 命令来完成:

gs -dSAFER -r600 -sDEVICE=pngalpha -o foo.png myfile.pdf

是的,这是 ImageMagic 调用的 GhostScript 命令的变体。 (请参阅 ImageMagick 的 delegates.xml-o-dBATCH -dNOPAUSE -sOutputFile= 的简写)

重要的是 ImageMagick 保持锁定状态,您无需不必要地调用中间程序,并且您可以更好地控制渲染参数。 (例如,-r600 是要呈现的 DPI,更改 -sDEVICE=pngalpha 允许您直接呈现为您想要的格式)

答案 8 :(得分:2)

nextcloud遇到了这个问题,该问题无法为pdf文件创建缩略图。

但是,建议的步骤都无法为我解决问题。

最终,我找到了原因:可接受的答案确实起作用,但是在编辑policy.xml文件后,我还必须重新启动php-fpm:

referrers

答案 9 :(得分:1)

在Ubuntu 19.10上,我已经在/etc/ImageMagick-6/policy.xml中完成了此操作

取消注释

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

对此发表评论

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

此后,此命令将正常运行

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

答案 10 :(得分:1)

这是由于Ghostscript 9.24(source)中已解决的安全漏洞引起的。如果您有较新的版本,则不再需要此解决方法。在具有Ghostscript 6的Ubuntu 19.10上,这意味着:

  1. 确保您的Ghostscript≥9.24:

    gs --version
    
  2. 如果是,只需从/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" />
    

答案 11 :(得分:1)

Manjaro 2021 年 4 月

只需删除 /etc/ImageMagick-7/policy.xml 中 <policymap> 内未注释的行