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
  1. 「ユーザー」→「プロフィール」を開き、「2要素認証の設定」(英語表示では Two-Factor Options)までスクロールします。
  2. 「認証アプリ」を選び、表示された QR コードを Google Authenticator・Microsoft Authenticator・1Password などの TOTP 対応アプリで読み取ります。
  3. アプリに表示された 6 桁のコードを入力して確認します。
  4. バックアップコードを生成し、パスワードマネージャーなど安全な場所に保管します。スマートフォンを失くしたときの入口になります。
  5. 「プロフィールを更新」を押します。

いったんログアウトし、パスワードのあとにコードを求められることを確認します。

ステップ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のブルートフォース攻撃対策 にまとめています。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲