【问题标题】:ImageMagick security policy 'PDF' blocking conversionImageMagick 安全策略“PDF”阻止转换
【发布时间】:2019-03-30 14:24:56
【问题描述】:

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.

【问题讨论】:

标签: linux ubuntu pdf imagemagick imagemagick-convert


【解决方案1】:

就我而言,我使用的是 ubuntu 20.10 和 Imagick-7。

在我的 /etc/ImageMagick-6/policy.xml 中,我删除了以下几行, 重新启动我的机器,我就完成了。

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

【讨论】:

    【解决方案2】:

    作为@Richard Kiefer 的一个高度活跃的评论,一个简单的修复是这样的

    $ sudo sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
    

    【讨论】:

      【解决方案3】:

      此问题是安全漏洞的解决方法。该漏洞已在 Ghostscript 9.24 (source) 中得到解决,因此如果您拥有该版本或更新版本,则不再需要解决方法。

      Ubuntu 19.1021.04 以及可能随 ImageMagick 6 一起提供的任何更高版本中,您可以通过以下方式通过删除解决方法来解决问题:

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

      【讨论】:

      • 只有在 Ubuntu 19.04 和 gs 9.26 上对我有用的修复。
      • sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml 对我来说效果很好。
      • 适用于 Ubuntu 20.04
      • @Christophvh:这意味着您将使用 Ghostscript 处理文件的全部权利授予 ImageMagick。这会将文件恢复到必须为 a security issue 引入此临时解决方法之前的状态,现在已修复。
      • 在 Ubuntu 21.04 上工作
      【解决方案4】:

      Manjaro 2021 年 4 月

      只需删除 /etc/ImageMagick-7/policy.xml 中 &lt;policymap&gt; 内未注释的行

      【讨论】:

      • 谢谢,帮我搞定了!
      【解决方案5】:

      ImageMagick 更改在 Ghostscript 被修复后保留,因为应用程序(尤其是 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 可让您直接渲染为所需的格式)

      【讨论】:

      • 哇,感谢这个非常棒的安全“解决方法”问题;值得更多的支持!
      【解决方案6】:

      补充 Stefan Seidel 的回答。

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

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

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

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

      【讨论】:

      • 退出前记得按ctrl+O保存
      • 这对我有用,Ubuntu 21.04。谢谢!
      【解决方案7】:

      对于 Arch Linux 上的我来说,我不得不对此发表评论:

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

      【讨论】:

      • 在我的系统上,有两个 policy.xml 文件:/etc/ImageMagick-6/policy.xml/etc/ImageMagick-7/policy.xml。注意编辑正确的!
      • 汉克斯,真的!! ``` lang-js > yay -F /etc/ImageMagick-7/policy.xml etc/ImageMagick-7/policy.xml 属于 extra/imagemagick 7.0.10.30-1 > yay -F /etc/ImageMagick-6 /policy.xml etc/ImageMagick-6/policy.xml 归 extra/libmagick6 6.9.11.30-1 > yay -Rs libmagick6 检查依赖项... 错误:准备事务失败(无法满足依赖项) :: 删除 libmagick6打破了inkscape ``` 所需的依赖项'libmagick6'
      • 奇数。我希望像其他答案建议的那样制作这个rights="read|write" 会起作用,但我也发现我需要完全评论这一点。对于那些熟悉 xml 的人来说,调整您的答案以表明“评论这个”意味着采用 &lt;foo... /&gt; 并使其成为 &lt;!-- &lt;foo... /&gt; --&gt; 会很不错。会让新用户多做一次搜索。
      【解决方案8】:

      适用于 Ubuntu 20.04

      &lt;policymap&gt;中添加这一行

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

      【讨论】:

      • 我不需要添加 &lt;policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" /&gt;
      【解决方案9】:

      我在使用 nextcloud 时遇到了这个问题,它无法为 pdf 文件创建缩略图。

      但是,没有任何建议的步骤可以为我解决问题。

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

       sudo systemctl restart php7.2-fpm.service
      

      【讨论】:

      • 哈哈。经过数小时尝试几乎所有可能的解决方案,这是最终的结果。结合@Stefan Seidel 解决方案:
      • 我也需要重启php fpm
      • 如果您使用的是 plesk,则服务名称为 plesk-php74-fpm
      • 谢谢大佬,帮了大忙!
      • 谢谢。就我而言,我不得不重新启动 apache。
      【解决方案10】:

      在 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 
      

      【讨论】:

        【解决方案11】:

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

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

        只需将其包裹在&lt;!----&gt; 之间进行注释,pdf 转换应该会再次起作用。

        【讨论】:

        • 确保 ghostscript 是最新的 kb.cert.org/vuls/id/332928
        • 这个功能有什么意义?防止用户制作 PDF?
        • 部分,是的。由于 ImageMagick 经常被网站用来处理上传的文件 - 而 PDF 是基本上可以包含任何可执行代码的文件格式之一 - 任何拥有上传权限的人都可以执行您的网络用户可以访问的任何任务。如果有人欺骗您亲自将恶意 PDF 转换为任何其他格式,也是如此。
        • 如果决定阻止我使用我的软件,我会感到愤怒,因为有人可能会找到一种作弊的方法。
        • @Gabriel 这更多是为了防止人们使用恶意 PDF 来对图像上传字段进行不充分的清理。 (即“当他们从不打算支持 PDF 和 Postscript 时,通过缩略图破解他们的网站”的情况。)
        【解决方案12】:

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

        【讨论】:

        • 确保 ghostscript 是最新的 kb.cert.org/vuls/id/332928
        • 相同。顺便说一句,我是最新的。
        • 建议注释行以禁用限制,或者,如您所述,定义权限>无。
        【解决方案13】:

        嗯,我加了

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

        就在/etc/ImageMagick-7/policy.xml 中的&lt;/policymap&gt; 之前,这使它再次工作,但不确定其安全隐患。

        【讨论】:

        • 我相信 PDF 策略是由于 Ghostscript 中的一个错误而添加的,我相信该错误现在已得到修复。因此,如果您使用的是当前的 Ghostscript,那么您应该可以授予此策略读|写权限。
        • 我找到了 &lt;policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" /&gt; 行,只是取消了它的注释以使其正常工作。
        • 此处引用了导致发行版实施该策略的安全漏洞:kb.cert.org/vuls/id/332928
        • @jakob-r: 我想你评论了... ;-)
        • 确保 ghostscript 已更新 kb.cert.org/vuls/id/332928
        猜你喜欢
        • 2019-12-04
        • 1970-01-01
        • 2021-05-30
        • 2020-09-11
        • 2021-09-19
        • 2021-08-21
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        相关资源
        最近更新 更多