2026年6月25日
2026年6月25日
WordPressで二要素認証(2FA)を管理者・編集者に強制する方法
二要素認証(2FA)を入れると、パスワードが漏れたり総当たりで当てられたりしても、認証アプリのコードなどが無ければログインできません。ただし、2FA プラグインの多くは「各ユーザーが自分で有効にする」仕組みで、入れただけでは設定しないユーザーが残ります。
この記事では、管理者や編集者など特定のロールに 2FA の設定を強制する方法を2つ説明します。
| 方法 | 強制の仕組み | 向いている場合 |
|---|---|---|
| WP 2FA | プラグインの設定(ポリシー)でロールごとに強制、猶予期間も指定できる | 画面の操作だけで済ませたい |
| Two Factor + コード | 2FA 未設定のユーザーを管理画面でプロフィールへ誘導する | WordPress 公式の機能プラグインを使いたい、挙動を細かく決めたい |
どちらの場合も、最初に自分の管理者アカウントで 2FA を設定し、ログアウトして入り直せることを確かめてから強制してください。
方法1:WP 2FA で強制する
WP 2FA は、無料版で「全ユーザー、または特定のロールのユーザーに 2FA を強制する」ポリシーと、設定までの猶予期間を指定できます(2026年11月時点、wordpress.org のプラグインページによる)。無料版の認証方法は認証アプリ(TOTP)とメールのコードで、バックアップコードも使えます。
wp plugin install wp-2fa --activate
管理画面からインストールする場合は「プラグイン」→「新規追加」で「WP 2FA」を検索します。有効化するとセットアップの案内が表示されるので、自分の 2FA を設定したうえで、強制の対象(全ユーザーまたはロール)と猶予期間を選びます。設定画面の項目名はバージョンで変わることがあるため、画面の表示に従ってください。
方法2:Two Factor プラグインにコードを加えて強制する
Two Factor は WordPress のコントリビューターが開発している機能プラグインです。2026年11月時点の 0.17.0 では、認証アプリ(TOTP)、メールのコード、バックアップコードが使えます(以前あった FIDO U2F はブラウザーの対応終了に伴い削除されました)。0.17.0 の動作要件は WordPress 7.0 以上、PHP 7.4 以上です。
Two Factor には、特定のロールに設定を強制する機能はありません。そこで、未設定のユーザーを管理画面でプロフィールへ誘導するコードを加えます。
ステップ1:インストールして自分の 2FA を設定する
wp plugin install two-factor --activate
- 「ユーザー」→「プロフィール」を開き、「2要素認証の設定」(英語表示では Two-Factor Options)までスクロールします。
- 「認証アプリ」を選び、表示された QR コードを Google Authenticator・Microsoft Authenticator・1Password などの TOTP 対応アプリで読み取ります。
- アプリに表示された 6 桁のコードを入力して確認します。
- バックアップコードを生成し、パスワードマネージャーなど安全な場所に保管します。スマートフォンを失くしたときの入口になります。
- 「プロフィールを更新」を押します。
いったんログアウトし、パスワードのあとにコードを求められることを確認します。
ステップ2:未設定のユーザーをプロフィールへ誘導する
次のコードを wp-content/mu-plugins/require-2fa.php として保存します(mu-plugins ディレクトリが無ければ作ります)。mu-plugins に置いたコードは管理画面から無効化できないため、強制の仕組みとして扱いやすくなります。
<?php
/**
* Plugin Name: Require Two Factor
* Description: 指定ロールのユーザーが 2FA を設定するまで、管理画面ではプロフィールしか開けないようにする。
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 2FA を必須にするロール
function r2fa_required_roles(): array {
return array( 'administrator', 'editor' );
}
// このユーザーは 2FA の設定が必要か
function r2fa_needs_setup( WP_User $user ): bool {
if ( ! class_exists( 'Two_Factor_Core' ) ) {
return false; // Two Factor が無効なら何もしない
}
if ( ! array_intersect( r2fa_required_roles(), (array) $user->roles ) ) {
return false;
}
return ! Two_Factor_Core::is_user_using_two_factor( $user->ID );
}
// 管理画面のプロフィール以外を開いたら、プロフィールの 2FA 設定欄へ移動させる
add_action(
'admin_init',
function () {
if ( wp_doing_ajax() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
return;
}
$user = wp_get_current_user();
if ( ! $user->exists() || ! r2fa_needs_setup( $user ) ) {
return;
}
global $pagenow;
if ( 'profile.php' === $pagenow ) {
return;
}
wp_safe_redirect( admin_url( 'profile.php#two-factor-options' ) );
exit;
}
);
// プロフィール画面に理由を表示する
add_action(
'admin_notices',
function () {
global $pagenow;
$user = wp_get_current_user();
if ( 'profile.php' !== $pagenow || ! $user->exists() || ! r2fa_needs_setup( $user ) ) {
return;
}
echo '<div class="notice notice-error"><p>';
echo esc_html( 'このアカウントでは二要素認証の設定が必要です。下の「2要素認証の設定」で認証アプリを登録してから、ほかの画面を利用してください。' );
echo '</p></div>';
}
);
Two_Factor_Core::is_user_using_two_factor()は、そのユーザーに使える認証方法(プライマリー)が設定されていれば true を返します。#two-factor-optionsは、Two Factor がプロフィール画面に出力する設定欄の ID です。- 対象のロールは
r2fa_required_roles()の配列で変えます。投稿者(author)なども対象にする場合は追加します。
このコードは「ログイン後、2FA を設定するまで管理画面のほかのページを使わせない」ものです。2FA 未設定のユーザーがパスワードだけでログインすること自体は止めません。設定が済むと、次回からはログイン時にコードが求められます。
ステップ3:設定状況を確認する
Two Factor 0.17.0 には WP-CLI のコマンドがあり、ユーザーごとの状態を確認できます。
# 1人分の状態(using_2fa、primary_provider、残りのバックアップコード数など)
wp two-factor status admin
# 管理者全員の状態を順に表示する
for u in $(wp user list --role=administrator --field=user_login); do
wp two-factor status "$u"
done
using_2fa が false のユーザーが、まだ設定していない人です。
締め出されたときの戻し方
スマートフォンを失くした、認証アプリを消したなどでログインできなくなった場合は、まずバックアップコードを使います。バックアップコードも無い場合は、SSH が使える管理者が次のように対処します。
# Two Factor 0.17.0 以降:そのユーザーの 2FA をすべて無効にする(セッションも破棄される)
wp two-factor disable admin --yes
# コードの入力ミスが続いて一時的にロックされただけなら、ロックだけ解除する
wp two-factor unlock admin
# プラグインごと止める場合
wp plugin deactivate two-factor
SSH も使えない場合は、FTP やサーバー会社のファイルマネージャーで wp-content/plugins/two-factor のフォルダー名を変えるとプラグインが無効になります。そのうえで、強制用の mu-plugins/require-2fa.php は Two Factor が無効なら何もしないため、管理画面に入れます。
API・WP-CLI からのアクセス
- Two Factor は、2FA を設定したユーザーが XML-RPC や REST API に通常のパスワードでログインすることを既定で拒否し、アプリケーションパスワードでのログインだけを許可します。アプリケーションパスワードは 2FA を経由しないので、不要なものは「ユーザー」→「プロフィール」で取り消します。
- WP-CLI はサーバー上でユーザーを指定して実行するため、2FA の対象外です。SSH のアクセス権そのものを管理してください。
注意点
- 2FA の強制を入れる前に、対象ユーザーへ設定方法と期限を知らせておくと、問い合わせや締め出しを減らせます。
- メールのコードを使う場合、サーバーからのメールが届かないとログインできなくなります。メール送信が安定していないサイトでは、認証アプリとバックアップコードを主にします。
- ログイン試行の制限や wp-login.php の保護など、2FA 以外の対策は WordPressのブルートフォース攻撃対策 にまとめています。