覆盖默认的ImageMagick policy.xml文件

23

我在ubuntu-16.04上使用ImageMagick将pdf文件转换为png图像。

最近,转换停止工作了,因为安装包imagemagick-common/etc/ImageMagick-6/policy.xml文件中添加了<policy domain="coder" rights="none" pattern="PDF" />

我不想修改/etc/ImageMagick-6/policy.xml以启用PDF,因为这个文件属于程序包,另一个更新可能会重写此文件。

$dpkg -S /etc/ImageMagick-6/policy.xml 
imagemagick-common: /etc/ImageMagick-6/policy.xml

我在主目录中创建配置文件

$ cat ~/.config/ImageMagick/policy.xml
<policymap>
    <policy domain="coder" rights="read|write" pattern="PDF" />
</policymap>

看起来,这个文件已经被找到并加载:

$ identify -list policy
Path: /etc/ImageMagick-6/policy.xml
...
Policy: Coder
    rights: None 
    pattern: PDF
...
Path: /home/vasiliy/.config/ImageMagick/policy.xml
Policy: Coder
    rights: Read Write 
    pattern: PDF

但这并没有帮助。

出现了未授权异常。

如何强制ImageMagick优先使用~/.config/ImageMagick/policy.xml的设置而不是/etc/ImageMagick-6/policy.xml的设置?或者我是否可以使用其他解决方案来允许PDF读取|写入?


1
你只能让你的自定义policy.xml更加严格。你需要编辑主文件才能将PDF条目更改为读写。 - fmw42
5个回答

20
我和你一样遇到了相同的问题。由于安全更新,ImageMagick现在默认禁止处理PDF文件。ghostscript中的潜在漏洞(https://www.kb.cert.org/vuls/id/332928)已经修复,但默认配置尚未更改回来。
我对~/.config/ImageMagick/policy.xml进行了一些实验,发现该配置实际上被使用并且有效。但是,您不能允许全局禁用的事项。您只能向用户进程添加进一步限制。
因此,我的建议是:
  1. 调整/etc/ImageMagick-6/policy.xml
  2. 等待软件包维护人员决定再次默认激活该功能
更新:
当使用#1时,请确保不会破坏自动更新。也许这可以帮助您找到解决方案:https://unix.stackexchange.com/questions/138751/unattended-upgrades-and-modified-configuration-files

9

我花了几个小时来解决这个问题,最终找到了一个相对简单的解决方案。

你需要告诉ImageMagick使用比默认配置更高的优先级加载你的配置文件。你可以通过设置MAGICK_CONFIGURE_PATH环境变量为存放policy.xml文件的目录来实现。


2
命令MAGICK_CONFIGURE_PATH=$HOME/.config/ImageMagick mogrify -format png test.pdf对我无效,仍然显示“未授权”。我的policy.xml与问题中的相同。我做错了什么?您能在答案中添加一个具体的示例吗? - Fritz
你的 policy.xml 文件里有什么内容?我只是复制了默认文件,编辑了需要更改的部分,并设置了 MAGICK_CONFIGURE_PATH=/app/.magick。你可以使用 identify -list policy 命令检查它是否找到并加载了该文件。 - Drarok

6

https://github.com/ImageMagick/ImageMagick/issues/1342#issuecomment-429494152

如果已经安装了ImageMagick,则仅强制执行系统路径中的策略,否则,如果可以轻松地被覆盖,那么它就不会是一个安全策略。在某些情况下,用户可以设置某些资源限制,但仅可以设置比管理员设置的较小值(例如,管理员设置2GB的内存限制,用户可以设置1GB的限制,但不能设置3GB)。
ImageMagick有一个未安装的构建选项。使用该构建选项,ImageMagick将允许通过您在帖子中提到的任何路径中的任何策略来覆盖安全策略。
更新(Ubuntu 18.04,2019-10,ImageMagick 6.9.7-4 Q16 x86_64,8:6.9.7.4+dfsg-16ubuntu6.7):
在MAGICK_CONFIGURE_PATH之前添加路径即可。
/my/path/policy.xml

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

MAGICK_CONFIGURE_PATH='/my/path/:/etc/ImageMagick-6/' identify -list policy
MAGICK_CONFIGURE_PATH='/my/path/:/etc/ImageMagick-6/' identify -list resource


2
我有6.9.11版本,尽管我可以添加策略,但我无法重新启用已禁用的内容。这是一个非常愚蠢的设计决定;如果我可以运行命令,我应该能够覆盖系统策略。在最好的情况下,用户拥有root访问权限并更改了整个系统的策略!如果这还不够可怕,那么还有另一种选项,即编译自己的ImageMagic以绕过此问题,然后最可能用户编译的版本将不会更新或检查漏洞,从而导致潜在的额外风险。 - Thomas Guyot-Sionnest

0

针对 Windows 操作系统:

Under Windows, ImageMagick searches for these configuration files in the 
following order, and loads them if found:

$MAGICK_CONFIGURE_PATH
<windows registry>
$PREFIX/config
$USERPROFILE/.config/ImageMagick
<client path>

因此,您可以在cmd.exe中运行下一个命令来打开环境变量编辑器:
START "" "%SystemRoot%\System32\rundll32.exe" "%SystemRoot%\System32\sysdm.cpl",EditEnvironmentVariables

然后点击其中一个“新建”按钮并输入:

Variable Name: MAGICK_CONFIGURE_PATH
Variable Value: PATH\TO\THE\INSTALL\DIR\ROOT ( It may be something like this C:\Program Files\ImageMagick)

然后重新启动任何打开的cmd.exe窗口以更新变量并进行测试!


0
我在为 Moodle 插件添加 PHP 扩展时遇到了这个问题。这是我的解决方法: 我在 /etc/ImageMagick-6/policy.xml 中进行了更改。
<policy domain="coder" rights="none" pattern="PDF" />

转换成这个

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接