WP-CLI の –allow-root オプションは非推奨です!

WP-CLIの日本語の公式ドキュメントにも書こうかと思っていますが、とりあえずこちらで。

WP-CLI コマンドを root 権限で実行しようとすると以下のようにエラーが出ます。

Error: YIKES! It looks like you’re running this as root. You probably meant to run this as the user that your WordPress install exists under.

If you REALLY mean to run this as root, we won’t stop you, but just bear in mind that any code on this site will then have full control of your server, making it quite DANGEROUS.

If you’d like to continue as root, please run this again, adding this flag:  –allow-root

If you’d like to run it as the user that this site is under, you can run the following to become the respective user:

    sudo -u USER -i — wp <command>

このメッセージは結構厳しめに本当に危ないからマジでやめたほうがいいけどどうしてもやるなら --allow-root をつけてねっていう意味なんですが、現在、この --allow-root は非推奨になっていまして後方互換性のためにのみ残されているもので、現在は wp help でも出てきません。

現在はテストもされていません。

どうしてもというユーザーもいますので残念ながら現在もこのオプションは使えますが、実際には使用しないことを強くおすすめします。

WP-CLI を root 権限で実行した時に起こりうるリスク

実際にどういうリスクがあるかと言いますと、たとえばみなさんのサイトで使用されているテーマやプラグインになにかよからぬことを企てるコードが入っている場合、これを root 権限で動作させてしまうことを意味しています。

最悪のシナリオは以下の通りです。

  1. あなたは、WordPress を普段 WP-CLI で管理していて、それが悪意のあるプラグイン等を経由してハッキングされました。
  2. あなたは、サイトに何らかの違和感を感じて、いつもどおりに --allow-root オプション付きで root 権限で WP-CLI コマンドを実行しました。

WP-CLI はみなさんの WordPress を require して動作していますので、一見何もしていないように見えても有効化済みのプラグインやテーマは読み込まれています。

したがってハッキングされた際に書き込まれたプログラムが root 権限で動作することを許してしまい、通常では考えられない多くの特権を与えてしまうことになります。

この場合、sudo wp plugin deactivate xxxx --allow-root でハッキングされたプラグインを無効化する時にもそれは動作し、悪意があるコードはその目的を達成するでしょう。

その結果、WordPress だけでなくサーバー全体の再構築が必要になります。

以下のリンク先のディスカッションでは、実際にそういう事例がホスティング会社によって確認されていることが報告されています。

https://github.com/wp-cli/wp-cli/pull/973

仮に悪意がないコードでもたとえばバックアップ系のプラグインやキャッシュ系のプラグインなど、ファイルを作る系のプラグインが何をするかは予想がつきません。

一方でいや僕はやるよという声があるのはわかるのですが、たとえばブログ等で --allow-root について紹介するときはとんでもなく大きなリスクがあることを書いておいていただけると幸いです。

また、他の方にはこの方法を決して推奨しないよう強くお願いいたします。

代替手段

どうしても root 権限で WP-CLI コマンドを実行したい場合は、WP-CLI の警告に出ているとおり以下の方法でコマンドを実行してください。

sudo -u USER -i -- wp <command>

USER の部分は、みなさんのウェブサーバーの実行ユーザーに置き換えてください。もしこれがうまく動作しない場合は、サーバーの設定を変えるか、WP-CLI を使用すること自体をあきらめる等を検討したほうがいいと思います。