T. *_*ord 107 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.
Run Code Online (Sandbox Code Playgroud)
Ste*_*del 127
好吧,我补充道
<policy domain="coder" rights="read | write" pattern="PDF" />
Run Code Online (Sandbox Code Playgroud)
就在之前</policymap>,/etc/ImageMagick-7/policy.xml它使它再次起作用,但不确定它的安全含义.
tan*_*ius 126
此问题是针对安全漏洞的解决方法。该漏洞已在 Ghostscript 9.24 ( source ) 中得到解决,因此如果您拥有该版本或更新版本,则不再需要解决方法。
在 Ubuntu 19.10 到 21.04 以及 ImageMagick 6 附带的任何更高版本上,以下是通过删除解决方法来解决问题的方法:
确保你有 Ghostscript ?9.24:
gs --version
Run Code Online (Sandbox Code Playgroud)
如果是,只需从以下内容中删除整个以下部分/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" />
Run Code Online (Sandbox Code Playgroud)
Mic*_*ele 69
正如一些评论中所指出的,您需要编辑ImageMagick的策略/etc/ImageMagick-7/policy.xml.更具体地说,在撰写本文时(15/01/2019)ArchLinux中,以下行未被注释:
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
Run Code Online (Sandbox Code Playgroud)
只需将其包装<!--并对其-->进行评论,pdf转换应该再次起作用.
Muh*_*ooq 26
正如 @Richard Kiefer 的高度活跃评论,一个简单的修复如下
$ sudo sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
Run Code Online (Sandbox Code Playgroud)
Ost*_*PHP 19
适用于 Ubuntu 20.04
在里面添加这一行 <policymap>
<policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" />
Run Code Online (Sandbox Code Playgroud)
评论这些行:
<!--
<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" />
-->
Run Code Online (Sandbox Code Playgroud)
小智 13
在 Ubuntu 19.10 上,我已在 /etc/ImageMagick-6/policy.xml 中完成此操作
取消注释这个
<policy domain="module" rights="read | write" pattern="{PS,PDF,XPS}" />
Run Code Online (Sandbox Code Playgroud)
并评论这个
<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
Run Code Online (Sandbox Code Playgroud)
之后,此命令正常工作
convert -thumbnail x300 -background white -alpha remove sample.pdf sample.png
Run Code Online (Sandbox Code Playgroud)
就我而言,我使用的是 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" />
Run Code Online (Sandbox Code Playgroud)
我在使用 nextcloud 时遇到了这个问题,它无法为 pdf 文件创建缩略图。
但是,所有建议的步骤都不能为我解决问题。
最终我找到了原因:接受的答案确实有效,但我还必须在编辑 policy.xml 文件后重新启动 php-fpm:
sudo systemctl restart php7.2-fpm.service
Run Code Online (Sandbox Code Playgroud)
添加到 Stefan Seidel 的答案中。
好吧,至少在 Ubuntu 20.04.2 LTS 或其他版本中,您无法真正以 GUI 方式直接编辑 policy.xml 文件。这是编辑它的终端方式。
通过输入以下命令在终端中打开 policy.xml 文件 -
sudo nano /etc/ImageMagick-6/policy.xml
现在,直接编辑在终端的文件中,找到
<policy domain="coder" rights="none" pattern="PDF" />
并替换none有read|write如图片所示。然后按 Ctrl+X 退出。
对于我在Arch Linux上,我不得不评论:
<policy domain="delegate" rights="none" pattern="gs" />
Run Code Online (Sandbox Code Playgroud)
在修复 Ghostscript 后保留了 ImageMagick 更改,因为应用程序(尤其是 Web 应用程序)经常将任意用户提供的文件提供给 ImageMagick,并不总是正确强制执行格式限制,并且由于 Postscript(PDF 使用的)是图灵完备的编程在沙箱中运行的语言,总是有可能在沙箱中出现另一个漏洞。
最好保持配置,以便 ImageMagick 拒绝处理需要运行程序的文件,而是在您有意允许 Postscript 渲染时直接调用 Ghostscript 。
这将通过像这样的 Ghostscript 命令来完成:
gs -dSAFER -r600 -sDEVICE=pngalpha -o foo.png myfile.pdf
Run Code Online (Sandbox Code Playgroud)
是的,这是 ImageMagic 调用的 GhostScript 命令的变体。(参见 ImageMagick 的delegates.xml.-o是 的简写-dBATCH -dNOPAUSE -sOutputFile=)
重要的是 ImageMagick 保持锁定状态,您无需不必要地调用中间程序,并且您可以更好地控制渲染参数。(例如-r600,要渲染的 DPI 和更改-sDEVICE=pngalpha允许您直接渲染为所需的格式)
| 归档时间: |
|
| 查看次数: |
30465 次 |
| 最近记录: |