WordPress の管理画面は、ID とパスワードが分かれば入れてしまいます。パスワードを長くしても、ほかのサービスから漏れたものを使い回していれば意味がありません。そこで、自分で運営している WordPress のサイトの管理者に、スマホの認証アプリを使った 2 段階認証を入れました。
使ったのは、WordPress.org のコントリビューターが作っている「Two-Factor」というプラグインです。前から入れていた SiteGuard WP Plugin とは役が違うので、2 つを組み合わせています。入れ方と、入れるときに気をつけたことをまとめます。
SiteGuard と Two-Factor の役の違い
SiteGuard WP Plugin にも、ログインを守る機能がたくさんあります。ただ、2 段階認証の機能はありません。Two-Factor は、そこを足すためのプラグインです。
| 守り方 | 担当するプラグイン |
|---|---|
| ログインの画面の URL を変える | SiteGuard |
| 画像の文字を入れさせる(画像認証) | SiteGuard |
| 何度も失敗したらロックする | SiteGuard |
| パスワードのあとに、スマホの 6 けたの番号を入れさせる | Two-Factor |
| スマホをなくしたときの予備の番号(リカバリーコード) | Two-Factor |
2 つを入れると、ログインの流れは「SiteGuard のログインの画面(画像認証つき)でパスワードを入れる → 次の画面でスマホの 6 けたの番号を入れる」になります。2 つを同時に入れても、ぶつかることはありませんでした。
入れる前にすること
- データベースのバックアップをとる:プラグインを入れるだけなので壊れることはまずありませんが、ログインの仕組みに関わるので、念のためとっておきます。
- サーバーにファイルで入れる道(FTP か SSH)を確かめておく:万が一ログインできなくなったときに、プラグインを止める道になります(下の「ログインできなくなったとき」)。
- スマホに認証アプリを入れておく:Google Authenticator・Microsoft Authenticator など、6 けたの番号が出るアプリなら使えます。パスワードの管理アプリ(1Password など)の中には、この番号を出せるものもあります。
入れ方
1. プラグインを入れて有効にする
管理画面の「プラグイン」→「新規追加」で「Two-Factor」を探し、作者が「WordPress.org Contributors」のものを入れて有効にします。似た名前のプラグインが多いので、作者を確かめてください。
有効にしただけでは、何も変わりません。2 段階認証は、ユーザーごとに自分で設定します。
2. 自分のプロフィールで認証アプリを登録する
- 「ユーザー」→「プロフィール」を開き、下のほうの「Two-Factor Options」の欄まで進みます。
- 「Authenticator App」の「Enable Authenticator App」に印を入れると、QR コードが出ます。
- スマホの認証アプリで QR コードを読み取ります。
- アプリに出た 6 けたの番号を入れて、登録します。
- 欄のいちばん下の「Primary Method」(主に使う方法)で「Authenticator App」を選び、プロフィールを保存します。
2 段階認証の設定を変えるときは、少し前にログインしたばかりであることを求められます。ログインしてから時間がたっていると「To update your Two-Factor options, you must first revalidate your session.」と出るので、「Revalidate now」を押して確認し直してから設定してください。
3. リカバリーコードを作る
同じ欄の「Recovery Codes」に印を入れて、予備の番号(リカバリーコード)を作ります。スマホをなくしたり、機種を変えて認証アプリが空になったりしたときに、この番号でログインできます。1 つの番号は 1 回しか使えません。
作った番号は、その場でしか表示されません。パスワードの管理アプリなど、スマホとは別の安全な場所に控えておきます。紙に書くなら、パソコンの近くに置きっぱなしにしないようにします。
4. ログアウトして、ログインし直してみる
いったんログアウトし、ログインし直して、パスワードのあとに 6 けたの番号を聞かれることを確かめます。ここで入れれば、設定は完了です。
入れたあとに気づいたこと
アプリケーションパスワードの API はそのまま使えた
外のツールから REST API で記事を読み書きするために、WordPress の「アプリケーションパスワード」を使っていました。2 段階認証を入れたあとも、アプリケーションパスワードでの API の呼び出しは、そのまま使えました。ブラウザでのログインだけが 2 段階になります。
Two-Factor の設定の欄にも「REST API と XML-RPC には、ふだんのパスワードではなくアプリケーションパスワードを使う」と書かれています。ふだんのパスワードで API を呼んでいる仕組みがあれば、先にアプリケーションパスワードへ切り替えておきます。
メールで番号を受け取る方法もある
認証アプリのほかに、ログインのたびにメールで番号を送る「Email」も選べます。ただ、メールのアカウントが乗っ取られると意味がないので、主に使う方法は認証アプリにし、リカバリーコードを予備にしています。
サイトの名前に「&」があると、アプリに「&」と出る
サイトのタイトルに「&」が入っているサイトでは、認証アプリに出る名前が「&」になりました。WordPress がサイトのタイトルの「&」を「&」という形で保存していて、それがそのまま認証アプリの名前に使われるためです。
番号はそのまま使えるので、困るのは見た目だけです。気になるときは、認証アプリの中で名前を書き換えてください。
自分で作るプラグインやテーマで、サイトのタイトルをメールの件名などに使うときは、wp_specialchars_decode() で元の「&」に戻してから使います。くわしくは get_bloginfo() の逆引きにまとめています。
2 段階認証にするのは、まず管理者から
Two-Factor は、ユーザーが自分で設定する作りです。まずは、いちばん力の強い管理者のアカウントから設定しました。編集者など、ほかのユーザーがいるサイトでは、その人にも設定してもらうよう伝えます。
ログインできなくなったとき
スマホもリカバリーコードも手元にないときは、サーバーのファイルからプラグインを止めます。
- FTP か SSH で、wp-content/plugins/ の中を開きます。
- 「two-factor」のフォルダの名前を、たとえば「two-factor-off」に変えます。
- WordPress はプラグインを見つけられなくなって止めるので、パスワードだけでログインできます。
- ログインしたら、フォルダの名前を元に戻して、プラグインを有効にし直し、認証アプリを登録し直します。
この方法を使えるのは、サーバーに入れる人だけです。サーバーの管理画面に入る方法も、あわせて控えておきます。
まとめ
- SiteGuard(ログインの URL・画像認証・ロック)に、Two-Factor(スマホの 6 けたの番号)を足すと、パスワードが漏れても管理画面に入られにくくなる。
- 入れる前に、データベースのバックアップと、サーバーのファイルに入る道を確かめておく。
- 認証アプリを登録したら、リカバリーコードを作って、スマホとは別の場所に控える。
- ログインできなくなったら、wp-content/plugins/two-factor のフォルダの名前を変えれば止められる。


