RHEL7/CentOS7 のサポート期限は、2024年6月30日までです。早めに OS リプレイスの計画を立てましょう
この記事は RHEL/CentOS 6のPHP5.3.3 は安全か? の RHEL/CentOS 7 版です。
よく、 CentOS7.x にバンドルされている PHP5.4.16 を使用していると、
「まだ PHP5.4 なんて使ってるの?? セキュリティに対する意識あんの??」
って言われます。
確かに、PHP5.4.16 は2013年にリリースされたとても古いバージョンですし、5.4 系は2015年9月3日にリリースされた 5.4.45を最後に公式のサポートを終了しています。
でも、 CentOS7.x の PHP は、リリース当初の2014年から、 5.4.16 のままです。2017年12月現在でも、 5.4.16 のままです。これには理由があります。
CentOS は Linux の商用ディストリビューションである Redhat Enterprise Linux(RHEL) の、公開されたソースを元にしたディストリビューションであり PHP などのプログラム言語やアプリケーションも、 RHEL のパッケージを元に作成されています。
RHEL は、これら PHP などのパッケージを、独自に保守(ベンダーサポート)しており、何らかの脆弱性が見つかると、適宜アップデートされます。
CentOS も、基本的に RHEL のアップデートポリシーに準拠しており、 7.x は2024年6月30日まではサポートされます。
つまり、 CentOS7.x にバンドルしている PHP5.4.16 は、適切にアップデートしていれば、2024年6月30日まで安心して使うことができます。
では、本当に安心して使えるのか調べてみましょう。
2016年12月14日現在、 CentOS7.x での PHP の最新パッケージは php-5.4.16-42.el7 です。
ちなみに、 CentOS では、パッケージがアップデートされると、メーリングリストにこのような メールが流れます。
RHEL でリリースされたものを CentOS でクレジット等を修正してリリースするため、リリースにタイムラグが発生するようです。
まず、 PHP の SRPM ファイルを取得します。
RHEL7 より、 SRPM のリポジトリは https://git.centos.org/project/rpms に統合されたようです。
php-5.4.16-42.el7 のソースは、以下にあります。
https://git.centos.org/commit/rpms!php/8d87dc7113e1c756c4ddb82ef393ae85c2eeb6bb
差分に含まれるファイル、以下のような内容になっています。
From 8d87dc7113e1c756c4ddb82ef393ae85c2eeb6bb Mon Sep 17 00:00:00 2001
From: CentOS Sources <bugs@centos.org>
Date: Thu, 03 Nov 2016 06:07:09 +0000
Subject: [PATCH] import php-5.4.16-42.el7
---
SOURCES/php-5.4.16-CVE-2016-5766.patch | 94 +++++
SOURCES/php-5.4.6-bug65641.patch | 118 +++++++
SOURCES/php-5.4.16-bug71089.patch | 31 +
SOURCES/php-5.4.16-curltls.patch | 38 ++
SOURCES/php-5.4.16-CVE-2016-5767.patch | 30 +
SPECS/php.spec | 58 +++
SOURCES/php-5.4.16-CVE-2016-5399.patch | 47 ++
SOURCES/php-5.4.16-bug66833.patch | 40 ++
SOURCES/php-5.4.16-CVE-2016-5768.patch | 284 +++++++++++++++++
SOURCES/php-5.4.16-bug66762.patch | 137 ++++++++
SOURCES/php-5.4.16-wddx.patch | 41 ++
11 files changed, 912 insertions(+), 6 deletions(-)
さまざまなパッチが含まれていることがわかります。
CVE とついているのが、セキュリティパッチです。
この中の CVE-2016-5399 を見てみると、 PHP 7.0.8, 5.6.23, 5.5.37 で修正された不具合がバックポートされているのがわかります。
From f3feddb5b45b5abd93abb1a95044b7e099d51c84 Mon Sep 17 00:00:00 2001
From: Stanislav Malyshev <stas@php.net>
Date: Mon, 18 Jul 2016 22:20:45 -0700
Subject: [PATCH] Partial fix for bug #72613 - do not treat negative returns
from bz2 as size_t
---
ext/bz2/bz2.c | 80 +++++++++++++++++++++++---------------------
ext/bz2/tests/72613.bz2 | Bin 0 -> 351 bytes
ext/bz2/tests/bug72613.phpt | 23 +++++++++++++
3 files changed, 65 insertions(+), 38 deletions(-)
create mode 100644 ext/bz2/tests/72613.bz2
create mode 100644 ext/bz2/tests/bug72613.phpt
diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c
index de3250e..7cfcaa8 100644
--- a/ext/bz2/bz2.c
+++ b/ext/bz2/bz2.c
@@ -137,16 +137,20 @@ struct php_bz2_stream_data_t {
static size_t php_bz2iop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
{
struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract;
- size_t ret;
-
- ret = BZ2_bzread(self->bz_file, buf, count);
+ int bz2_ret;
+
+ bz2_ret = BZ2_bzread(self->bz_file, buf, count);
- if (ret == 0) {
+ if (bz2_ret < 0) {
+ stream->eof = 1;
+ return -1;
+ }
+ if (bz2_ret == 0) {
stream->eof = 1;
}
- return ret;
+ return (size_t)bz2_ret;
}
static size_t php_bz2iop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
{
このように、適切にアップデートされた CentOS7.x の PHP5.4.16 は安全です。
プログラマーの立場からすると、最新のプログラム構文が使えないのは、ストレスに感じるかもしれません。
常に新しいバージョンにアップデートできれば良いのですが、コストやリソースの問題もあり、すべての環境でアップデートできるとは限りません。
特に、 PHPの主要なフレームワークのサポート期間は4年程度である場合が多く、長期的に保守されるプロダクトの場合は注意が必要です。
枯れているから、、という理由で採用すると、案件をリリースして間もなくサポート切れになってしまうことになりかねません。
Linux ディストリビューションの長期サポートとも上手くおつきあいするのも、プログラマーの大切なスキルの一つだと思います。