ImageMagickのアップデートでPHP imagickの警告が出た。

GW中から話題になっていたImageMagickの脆弱性に対して、昨日5月9日(日本時間では今日?)やっとRedHatとCentOSで対策されたバージョンがリリースされたので、さっそくCentOS 6のWebサーバーでアップデートを実施しました。

(参考)
・ImageMagick の脆弱性 (CVE-2016-3714) に関する注意喚起
https://www.jpcert.or.jp/at/2016/at160021.html

・RedHat Important: ImageMagick security update
http://rhn.redhat.com/errata/RHSA-2016-0726.html

↑RetHatのエラータページから、RHEL6/CentOS 6の対応バージョンは
ImageMagick-6.7.2.7-4.el6_7
であることがわかります。

サーバーで現在のバージョンを確認。

 # rpm -qa | grep ImageMagick

ImageMagick-6.5.4.7-7.el6_5.x86_64
ImageMagick-devel-6.5.4.7-7.el6_5.x86_64

 

ImageMagick, ImageMagick-devel をアップデート。

 # yum update ImageMagick*

...
依存性関連をインストールしました:
  libwmf.x86_64 0:0.2.8.4-25.el6_7

更新:
  ImageMagick.x86_64 0:6.7.2.7-4.el6_7
  ImageMagick-devel.x86_64 0:6.7.2.7-4.el6_7

依存性を更新しました:
  libwmf-lite.x86_64 0:0.2.8.4-25.el6_7
...

 

オッケー、念のためApacheも再起動してみると、ApacheのエラーログにPHPの警告が。

 # /etc/init.d/httpd restart
 # less /var/log/httpd/error_log

[Tue May 10 12:38:20 2016] [notice] caught SIGTERM, shutting down
Notice: cleaning up shared memory
[Tue May 10 12:38:20 2016] [notice] Digest: generating secret for digest authentication ...
[Tue May 10 12:38:20 2016] [notice] Digest: done
Create or Joining shmem. name: /tmp/fileI8LHT8, size: 4856
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/imagick.so' - libMagickWand.so.2: cannot open shared object file: No such file or directory in Unknown on line 0
[Tue May 10 12:38:21 2016] [notice] Apache/2.2.15 (Unix) configured -- resuming normal operations

 

php -mコマンドでモジュールリストを確認したところ、同様のWarningメッセージが表示されて、リストにimagickモジュールがありません。

 # php -m

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/imagick.so' - libMagickWand.so.2: cannot open shared object file: No such file or directory in Unknown on line 0

...
iconv
json
...

 

ImageMagickをアップデートしたことで、PHP imagickモジュールが参照していたlibMagickWand.so.2 がなくなったようです。
依存関係の問題ですね。

次の記事を参考にして、、

(参考)
・libMagickWand.so.2 が無いと言われる
http://shobon.hatenablog.com/entry/2015/08/17/202022

PHP imagickモジュールをアップデートしてみます。
このサーバーでは、PECLでimagickモジュールをインストールしていたので、PECLコマンドでアップデートします。

まず、現在のバージョンを確認。
→3.1.2でした。

 # pecl list

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/imagick.so' - libMagickWand.so.2: cannot open shared object file: No such file or directory in Unknown on line 0
Installed packages, channel pecl.php.net:
=========================================
Package Version State
imagick 3.1.2   stable

 

アップデートを実施。

 # pecl upgrade imagick

--
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/imagick.so' - libMagickWand.so.2: cannot open shared object file: No such file or directory in Unknown on line 0
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading imagick-3.4.1.tgz ...
Starting to download imagick-3.4.1.tgz (239,829 bytes)
.................................................done: 239,829 bytes
19 source files, building
running: phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
Please provide the prefix of Imagemagick installation [autodetect] : ★Enterを入力★

...

Build process completed successfully
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
Installing '/usr/lib64/php/modules/imagick.so'
upgrade ok: channel://pecl.php.net/imagick-3.4.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini
--

 

アップデート後のバージョンを確認。
→3.1.2から3.4.1にアップデートされました。

 # pecl list

Installed packages, channel pecl.php.net:
=========================================
Package Version State
imagick 3.4.1   stable

 

php -mコマンドでモジュールリストを確認。
→WARNINGが出力されなくなり、imagickもちゃんとあります。

 # php -m

...
iconv
imagick
json
...

 

Apacheを再起動して、エラーログを確認します。
→今度はPHP Warningがなくなりました。

 # /etc/init.d/httpd restart
 # less /var/log/httpd/error_log

[Tue May 10 12:53:16 2016] [notice] caught SIGTERM, shutting down
Notice: cleaning up shared memory
[Tue May 10 12:53:17 2016] [notice] Digest: generating secret for digest authentication ...
[Tue May 10 12:53:17 2016] [notice] Digest: done
Create or Joining shmem. name: /tmp/filed7f9w2, size: 4856
[Tue May 10 12:53:17 2016] [notice] Apache/2.2.15 (Unix) configured -- resuming normal operations

 

念のため、WordPressで画像ファイルをアップロードしてみたところ、エラーすることなく画像が登録されました。

PHPモジュールに関連しそうなパッケージをアップデートしたときは、Apacheのエラーログやphp -mで要チェック!というお話。

PECLではなくて、EPEL等のサードパーティリポジトリからphp-pecl-imagickをyum installlしていれば、ImageMagickのyum update時に依存関係のメッセージが出て気づいたかもしれないのですが、php-pecl-imagickはバージョンが2.xですごく古いんですよね。
古くてもふつうのPHPアプリでは問題ないのかもしれませんが。