ImageMagick安全策略'阻塞转换

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.
271365 次浏览

嗯,我补充道

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

</policymap>之前,在/etc/ImageMagick-7/policy.xml中,这使它再次工作,但不确定这样做的安全影响。

在我的archlinux系统上,这行已经没有注释了。我不得不将“none”替换为“read | write”以使其工作。

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

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

只需将它包装在<!---->之间以注释它,pdf转换应该再次工作。

对于Arch Linux的我来说,我不得不这样评论:

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

在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

此问题是安全漏洞的解决方案。该漏洞已在Ghostscript 9.24 (看到)中解决,所以如果你有这个或更新的版本,你不再需要解决方案了。

Ubuntu 19.0422.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" />
    

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

然而,这些建议的步骤都不能解决我的问题。

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

 sudo systemctl restart php7.2-fpm.service

适用于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" />
-->

为斯特凡·赛德尔的答案补充一点。

好吧,至少在Ubuntu 20.04.2 LTS或其他版本中,你不能以GUI方式直接编辑policy.xml文件。这里有一个终端的方式来编辑它。

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

    # EYZ0

  2. 现在,直接在终端编辑文件,找到 # EYZ0 并将none替换为read|write,如图所示。

    .按“Ctrl+X”退出

Edit in terminal

在Ghostscript修复之后,ImageMagick的修改被保留了下来,因为应用程序(尤其是web应用程序)经常向ImageMagick提供任意用户提供的文件,并不总是正确地执行格式限制,而且,由于Postscript (PDF使用的)是一种在沙盒中运行的图turing-complete编程语言,沙盒中总是有另一个漏洞的可能性。

最好保持配置,以便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可以让你直接渲染到你想要的格式)

2021年4月,马加罗

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

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

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

在我的情况下,我使用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" />

对于我的系统Ubuntu 20.04不能工作,但是对于我的windows 10工作得很好。

我的主要工作是为视频添加字幕并生成输出mp4

在捣毁了policy.xml文件后,我发现了一个"潜在的"糟糕的解决方案。这是删除所有的内容policy.xml,这已经为我工作,我能够添加我的字幕视频。

请注意,这可能是一个临时的修复,直到你没有找到更好的解决方案。

谢谢@tanius和其他人的详细回答!

我只想补充以下几点。

  1. 策略文件policy.xml的路径可能会随着ImageMagick的版本而改变,如/etc/ImageMagick-6/policy.xml或/etc/ImageMagick-7/policy.xml等。所以要相应地更新它。

  2. 由于防止或允许某些文件类型转换的策略是一种安全措施,您可能希望在任务完成后重新设置对policy.xml的更改,以便如果攻击者可以访问系统,则没有相应的攻击的可能性!

快乐的快速文件转换同时!