2026年10月21日、PHPのセキュリティ修正版が公開されました。今回は、ソースからインストールしていたPHP 8.3.8を8.3.36へ更新した作業を記録します。実サーバーの名称や構成固有の情報は伏せています。
1、ソースビルド環境は自分で更新するaptなどのパッケージ管理とは異なり、ソースから入れたPHPは原則として新しいソースの取得、configure、make、make installが必要になります。ただし古いソースを改変する必要はなく、新しいディレクトリで従来のオプションを使ってビルドできます。
cd /usr/local/src
wget https://www.php.net/distributions/php-8.3.36.tar.gz
tar xzf php-8.3.36.tar.gz
cd php-8.3.36
./configure \
--enable-mbstring \
--with-openssl \
--with-apxs2=/usr/bin/apxs2 \
--enable-zts \
--with-pdo-pgsql \
--with-curl
make -j"$(nproc)"configureのオプションは環境ごとに違います。以前のconfig.logで元のオプションを確認し、必要な拡張を落とさないようにします。ダウンロードしたソースは公式のチェックサムや署名でも検証します。
2、ビルドとインストールは別makeが成功しても稼働中のPHPは切り替わりません。実際にこの段階でphp -vを実行すると、従来の8.3.8が表示されました。更新する前にCLI、Apacheモジュール、設定をバックアップし、復旧方法を用意してからインストールします。
php -v
php-config --prefix
php --ini
apache2ctl -M | grep -E "php|mpm"
# バックアップとメンテナンス準備の後
cd /usr/local/src/php-8.3.36
make install
apache2ctl configtest
systemctl restart apache2検証用のWebサイトにはBasic認証を設定していました。しかし認証の有無だけでPHP処理系の脆弱性を無視できるとは限りません。攻撃成立条件は公式のアドバイザリで確認し、WebからPHPに到達できる構成では速やかな更新を優先します。
4、CLIだけで使うPHPなら別の環境ではWeb公開ディレクトリからPHPを除外し、Apacheのmod_phpを無効化していました。外部からPHPのWeb処理系へ到達できないことが確認できれば、Web経由の攻撃面を大きく減らせます。ただしPHP-FPM、CGI、外部入力を処理するジョブなど別経路の確認は必要です。
5、Apache経由でのバージョン確認までが更新CLIのphp -vが新しいだけではApacheのPHP更新を証明できません。制限された検証用URLでPHP_VERSIONとPHP_SAPIを出力し、8.3.36 apache2handlerを確認しました。次回はこの確認時に遭遇した、PHPソースがそのまま表示される問題を紹介します。



