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アプリでは問題ないのかもしれませんが。