PR

【macOS Monterey 12.6】apache+php利用者はアップデート待機推奨、暫定対策はこれしかないかも

脆弱性に対応(HT213444:macOS Monterey 12.6 のセキュリティコンテンツについて)したmacOS Monterey 12.6にアップデートしました。

  1. 【12.6】従来のApache/2.4.53からApache/2.4.54にバージョンアップしています。

brewでインストールしたphp+apacheのWebサーバーの組み合わせ、opcache.soが原因で動作しません。

Failed loading /opt/homebrew/opt/php/lib/php/20210902/opcache.so: dlopen(/opt/homebrew/opt/php/lib/php/20210902/opcache.so, 0x0009): tried: ‘/opt/homebrew/opt/php/lib/php/20210902/opcache.so’ (code signature in <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX> ‘/opt/homebrew/Cellar/php/8.1.10/lib/php/20210902/opcache.so’ not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), ‘/opt/homebrew/Cellar/php/8.1.10/lib/php/20210902/opcache.so’ (code signature in <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX> ‘/opt/homebrew/Cellar/php/8.1.10/lib/php/20210902/opcache.so’ not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?))

  • opcache.soはプロセス利用できない
  • Team IDがない、platform binaryではない(カスタム ID またはアドホックで署名?)

brew upgrade phpで最新版(8.1.10_1)になりました。状況変わりませんでした。
回避策、対応策が公開されるまでmacOS Monterey 12.6へのアップデートは待った方が良さそうです。

【暫定】apacheでphpを動作させる手順

Safari(ブラウザー)からphpへアクセスしても無応答のままです。opcacheを利用しない方法で暫定的に動作させることができます。

  1. homebrewの標準環境でのご利用を想定しています。
  2. /opt/homebrew/etc/php/8.1/conf.d/ext-opcache.ini

    ここにopcache.soのフルパスが記載されています。行の先頭に;(セミコロン)を追加します。

    ;zend_extension=/opt/homebrew/opt/php/lib/php/20210902/opcache.so
  3. php.iniを見直します。
    • zend_extension=opcacheが有効になっている場合、コメントアウト(行頭セミコロン)します。
  4. 保存したiniを再度適用させるためapache再起動します。
    sudo  apachectl stop; sudo apachectl start 

php -vコマンドで無効にできたかを確認できます。

php -v
PHP 8.1.10 (cli) (built: Sep  3 2022 12:09:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.10, Copyright (c), by Zend Technologies
↓↓設定が正常ならZend OPCacheが消えているはずです。
PHP 8.1.10 (cli) (built: Sep  3 2022 12:09:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies

まとめ:opcacheの導入方法はたくさんあるが、disable・uninstall方法は見当たらない

phpでopcacheを有効にする方法やインストールする方法はたくさん見つけることができます。

今回はdlopenでopcacheをロードするタイミングでエラーが発生しています。この場合、どうしたらいいのか悩みます。disableやuninstall方法を探りましたが、php8の環境にマッチする情報を見つけることができませんでした。

今回の暫定方法は、php.iniのzend_extension=opcacheだけをコメントアウトしても、エラーのまま、このデフォルトで有効になっている状況を無効にしたいという思いから見つけることができました。

Team IDがない、platform binaryというエラーの指摘から推測すると、codesignで利用している自己証明書の作り方に原因がありそうです。

タイトルとURLをコピーしました