ImageMagickのconvert
を使ってキャプチャ画像を作りたい。
そして私は これ に従いますが、いくつか問題があります。
私のLinuxシェルで入力:
convert -background white -fill black -font FreeSerif-Bold -pointsize 36 label:'adfgh' ./test.png
エラーは次のとおりです。
変換:権限がありません
adfgh
@ error/configure.c/ReadImage/453。 convert:画像ファイル名がありません./test.png
@ error/convert.c/ConvertImageCommand/3015
私のImageMagick:バージョン:6.7.2-7、私はyum install ImageMagick
でそれをインストールします。
私は無知です。何かアドバイスがありますか?
注:これと他の答えの解決策は任意のコード実行の脆弱性を修正するためにある安全対策を無効にすることを含みます。例えば このゴーストスクリプト関連 と このubuntu関連 の発表をご覧ください。
convert
への入力が信頼できるソースからのものである場合にのみ、これらの解決策を進めてください。
Php(v.7.1)でImageMagickを使用してPDFファイルを画像にスライスしています。
最初に私はのようなエラーを得ました:
例外の種類:ImagickException
例外メッセージ:権限がありません..... @ error/configure.c/ReadImage/412
/etc/ImageMagick-6/policy.xml
にいくつかの変更を加えた後、私は以下のようなエラーが出始めます。
例外の種類:ImagickException
例外メッセージ:一時ファイルを作成できません.....アクセス許可が@ error/pdf.c/ReadPDFImage/465で拒否されました
私の修正 :
ファイル/etc/ImageMagick-6/policy.xml
(または/etc/ImageMagick/policy.xml
)内
コメント行
<!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
改行
<policy domain="coder" rights="none" pattern="PDF" />
に
<policy domain="coder" rights="read|write" pattern="PDF" />
行を追加
<policy domain="coder" rights="read|write" pattern="LABEL" />
その後、 Webサーバーを再起動します (nginx、Apache)。
私は何回もImageMagicのconvert
コマンドを使って*.tif
ファイルを*.pdf
ファイルに変換します。
理由はわかりませんが、今日は次のようなエラーが表示され始めました。
convert: not authorized `a.pdf' @ error/constitute.c/WriteImage/1028.
コマンド発行後:
convert a.tif a.pdf
上記の答えを読んだ後、私はファイル/etc/ImageMagick-6/policy.xml
を編集しました
そして行を変更しました:
policy domain="coder" rights="none" pattern="PDF"
に
policy domain="coder" rights="read|write" pattern="PDF"
そして今、すべてうまくいきます。
"Ubuntu 16.04.5 LTS"に "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28"があります。
Yumによってインストールされる/etc/ImageMagick/policy.xml
ファイルがあります。これはほとんどすべてのことを許可しません(セキュリティとImageMagick呼び出しでシステムが過負荷になるのを防ぐため)。
上記のようにReadImage
エラーが発生した場合は、その行を次のように変更できます。
<policy domain="coder" rights="read" pattern="LABEL" />
これで問題は解決するはずです。
ファイルにはたくさんのドキュメントが含まれているので、それを読むべきです。たとえば、より多くの権限が必要な場合は、次のようにそれらを組み合わせることができます。
<policy domain="coder" rights="read|write" pattern="LABEL" />
...これは、すべての許可チェックを削除する(つまり、その行を削除またはコメントアウトする)よりも望ましい方法です。
最高得票数の回答(ここにコメントを追加するのに十分な評判がありません)は、MVGの行をコメントアウトすることを示唆していますが、これに留意してください。
CVE-2016-3714
ImageMagickは ".svg/.mvg"ファイルをサポートしています。つまり、攻撃者はスクリプト言語でコードを作成することができます。 MSL(Magick Scripting Language)とMVG(Magick Vector Graphics)は、それをイメージファイルに偽装したサーバーにアップロードし、上記のようにサーバー側でソフトウェアに悪意のあるコマンドを実行させます。たとえば、ファイルに次のコマンドを追加し、脆弱なImageMagickバージョンを使用するWebサーバーにアップロードすると、サーバー上でコマンド "ls -la"が実行されます。
exploit.jpg:
グラフィックコンテキストビューボックスをプッシュ0 0 640 480 'url( https://website.com/image.png "| ls" -la)' popグラフィックコンテキストを入力
そして
7.0.1-2または6.9.4-0より下のバージョンは潜在的に脆弱であり、影響を受ける関係者はできるだけ早く最新のImageMagickバージョンにアップグレードするべきです。
誰かがインストール後に1つのコマンドでそれをする必要があるなら、これを実行してください!
sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml
私のUbuntu 16.04システムを最近アップデートした後、.psファイルでconvertを実行してそれらをpdfsに変換しようとしたときにも、このエラーが発生し始めました。
この修正は私のために働いた:
ターミナルランで:
Sudo gedit /etc/ImageMagick-6/policy.xml
これにより、geditテキストエディタでpolicy.xmlファイルが開きます。もしそうでなければ、あなたのimage magickは別の場所にインストールされているかもしれません。それから変更
rights="none"
に
rights="read | write"
ファイルの下部近くにあるPDF、EPS、およびPS行の場合。保存して終了すると、image magickは再び動作するはずです。
/etc/ImageMagick/policy.xmlファイルを削除するだけです。
また、イメージマジックを使用してepsをgifに変換しようとすると、エラーerror/constitute.c/ReadImage/453
が発生しました。 sNICkerssssによって提案された解決策を試しましたが、まだエラーがありました(最初のものとは異なります)e error/constitute.c/ReadImage/412
問題を解決したのは、read
を他のエントリに入れることでした
<policy domain="coder" rights="read" pattern="PS" />
<policy domain="coder" rights="read" pattern="EPS" />
<policy domain="coder" rights="read" pattern="PDF" />
<policy domain="coder" rights="read" pattern="XPS" />
<policy domain="coder" rights="read|write" pattern="LABEL" />