管理画面・自動更新からのWordPress本体更新が失敗する

TOP Forums バグ報告と提案(Requests and Feedback) 管理画面・自動更新からのWordPress本体更新が失敗する

管理画面・自動更新からのWordPress本体更新が失敗する

Viewing 4 reply threads
  • Author
    Posts
    • #1692
      kenfm0411
      Participant

        お世話になっております。WordPress本体のアップデートについて、ご相談させてください。

        ■環境
        KUSANAGI 9.10.4 / ConoHa VPS / CentOS Stream 9
        nginx131 + php-fpm(php85、実行ユーザー httpd / グループ www)
        WordPress 7.1(マルチサイト、サブドメイン型)
        wp-config.php に FS_METHOD='ftpext' を設定、vsftpd 稼働、FTP経由更新は設定済み

        ■症状
        WordPress管理画面(および自動更新)から、本体のアップデートを実行すると、「更新に失敗しました。再度、更新を行ってみてください」と表示され、失敗します。一方、プラグイン・テーマの更新は、管理画面から問題なく成功します。また、WP-CLI(wp core update)からは、本体更新も成功します。

        ■調査結果
        原因を切り分けたところ、実行ユーザーhttpdが、WordPress本体ディレクトリに書き込めないことが原因と特定しました。

        httpdユーザーで各ディレクトリへの書き込みを試したところ、

        ルート直下、wp-admin/、wp-includes/(所有者 kusanagi:kusanagi、755) → 書き込み失敗
        wp-content/(所有者 kusanagi:www、setgid + グループ書き込み可) → 書き込み成功

        でした。プラグイン・テーマ(wp-content配下)はhttpdが書けるので更新でき、本体はhttpdが書けないので更新が失敗する、という状況です。

        また、get_filesystem_method() がdirectを返しており、FS_METHOD='ftpext'の指定が反映されていないようです。

        ■お伺いしたいこと
        KUSANAGI のセキュリティ設計上、本体ディレクトリをhttpdから書けなくしていることは理解しております。そのうえで、セキュリティを保ったまま、WordPress本体を管理画面または自動更新から更新する、KUSANAGI推奨の方法があれば、ご教示いただけますでしょうか。

        (以前、本体の自動更新を補完する機能が提供予定と伺った記憶があるのですが、その関連の機能があれば、あわせて教えていただけると幸いです。)

      • #1693
        hideishi
        Participant

          kenfm0411さん

          KUSANAGIはhttpdによる更新をセキュリティ上許可していないのは認識の通りです。

          get_filesystem_method() がdirectを返しており、FS_METHOD='ftpext'の指定が反映されていないようです。

          wp-config.phpにFTP_HOST,FTP_USER,FTP_PASSは設定されていますか。
          FTP_USERがkusanagiであればkusanagi:kusanagiを更新できるのでエラーになりません。
          これらが空やコメントアウト、無効な値であればFS_METHOD ftpextが動作せず、directにフォールバックします。

        • #1694
          kenfm0411
          Participant

            hideishiさん

            ご回答ありがとうございます。ご指摘の点を確認しました。

            FTP設定は、以下の通り、正しく設定されておりました。

            FTP_USERはkusanagi
            FTP_PASSは有効な値(空でもコメントアウトでもない)
            FTP_HOSTはlocalhost
            PHPのftp_connect関数も使用可能

            しかし、それでもget_filesystem_method()はdirectを返し、管理画面からの本体更新は失敗します。

            追加で確認したところ、

            httpdユーザーは、本体ディレクトリ(ルート直下、wp-admin/、wp-includes/、いずれも kusanagi:kusanagiの755)に、書き込みできませんでした(touchで「許可がありません」)。
            一方、wp-content/(kusanagi:www、setgid+グループ書き込み可)には、httpdで書き込みできました。そのため、プラグイン・テーマの更新は管理画面から成功します。
            WP-CLI(kusanagiユーザー)からは、本体更新も成功します。

            FTP設定は有効なのにdirectが選択される、この状況で、本体更新をFTP経由(ftpext)で確実に実行させるには、どのような設定が必要でしょうか。
            あるいは、KUSANAGI環境で本体を管理画面から更新するための、推奨の方法をご教示いただけますでしょうか。

          • #1695
            hideishi
            Participant

              kenfm0411さん

              一部のWordPressプラグインが正しくWP_Filesystemを実装していないためにdirectになってしまうケースがあります。
              KUSANAGI Pluginでそのような現象を回避するための対策を入れているので、KUSANAGI Pluginが最新になっているかどうか確認できますか。

              現在の最新は 1.4.11 です。
              kusanagi pluginの更新は KUSANAGI が最新であれば kusanagi update plugin プロファイル名 で更新できます。
              KUSANAGI が最新でない場合は dnf update kusanagi-wp-plugins でプラグインのRPMを更新した後で kusanagi update plugin プロファイル名 で更新してください。

              それでも解決しない場合には、先のとおりWP_Filesystemを正しく実装していないプラグインが何か存在する可能性が高いです。
              1つずつプラグインを無効にしていくなどして調べるしかなさそうです。

            • #1696
              kenfm0411
              Participant

                hideishiさん

                ご教示ありがとうございました。おかげさまで、管理画面から本体更新ができるようになりました。

                KUSANAGI Pluginを1.4.11に更新した上で、以下の2点も対処したところ、解決しました。

                前回の更新失敗で残っていた更新ロック(core_updater.lock)が「別の更新が進行中」を出していたため、削除しました。これで、具体的なエラー「ファイルをコピーできませんでした:ja-xxxx.json」が表示されるようになりました。

                そのエラーの原因は、wp-content/languages/内の一部の翻訳ファイル(ja-xxxx.json)が httpd所有になっており、更新時のコピーを妨げていたことでした。languages配下をkusanagi所有に統一したところ、管理画面からの本体更新(再インストール)が成功しました。

                KUSANAGI Pluginの対策と、あわせてご案内いただいた「WP_Filesystem 関連」のお話が、解決の助けになりました。ありがとうございました。

            Viewing 4 reply threads
            • You must be logged in to reply to this topic.

            Next article

            フォーラムについて