WordPressのログイン画面にBasic/Digest認証をかける

WordPressのログイン画面に辿り着く前にもう一つの認証をつけてみます。完成図はこんな感じになります。

Basic/Digest認証を導入する理由

Basic/Digest認証の導入を検討するに至った理由はいくつかあるので紹介しましょう。

他人のサイトでログインを試せてしまう

特に初期設定から変更していない限り,WordPressのログイン画面は誰でも入れてしまいます。また,複数回ログインを失敗した端末のIPアドレスを拒否する設定を施していない場合,ログインを無限に試することができます。

試しにログインページにアクセスできるWordPressベースの有名サイトを並べてみました。(絶対にログインを試さないでください。)

このようにサイトのURLに + /wp-admin と付け加えるだけでログインページにリダイレクトされてしまう・・・。恐ろしい。

Basic認証ではなく,Digest認証をかけたい

wp-login.phpに認証をかけようと調べていると,Basic認証について紹介している記事は多くありましたが,Digest認証の設定を解説している記事はほとんど見つけられませんでした。

確かにサイトがTLS(SSL)に対応していればBasic認証で送られる情報も暗号化されるはず。つまり,盗聴されても中身は解読されにくいわけで,設定する手間を考えればBasic認証でも十分と考える人もいます。

(そもそもBasic認証もDigest認証も本認証の前に置く,おまけの認証でしかないので。)

しかし,私は雑記帳のネタにはなりそうだから,Digest認証を採用しました。

Basic/Digest認証の設定方法

勉強のためにBasic認証もDigest認証の方法も記録しておきます。流石に本番環境での設定をネタにはできないので,実験用の仮想環境で試した設定方法を載せますね。

まずはBasic認証,Digest認証共通の設定。次にそれぞれの設定を説明していきます。

実験環境

  • CentOS Linux release 7.7.1908 (仮想環境)
  • Apache/2.4.6
  • URL) http://192.168.3.9/blog

.htaccessの有効化

httpd.confの設定で無効になっている場合は有効にしてください。

#AllowOverride None
AllowOverride All

.htaccessはディレクトリ毎の設定をするファイルですが,httpd.confの設定を頻繁に変えたくなかったり,そもそも権限がない人はここに書かなければいけません。

[Basic認証 1] .htpasswdの作成

Basic認証に使うユーザ名とパスワードを保存したファイルを作成します。-cは新しいファイルを作成, -mはパスワードはmd5で保存するというオプションです。

$ cd /etc/httpd/conf
$ sudo htpasswd -c -m .htpasswd <ユーザ名>
 New password:<パスワード>
 Re-type new password:<パスワード>
 Adding password for user user

$ cat .htpasswd
 <ユーザ名>:$apr1$W0W01YDj$U6KIhTJBN54GXUVjzC2Hv1

[Basic認証 2] .htaccessの作成

WordPressのインストールされているディレクトリにある.htaccessを編集して以下を追加します。

<Files wp-login.php>
AuthType Basic
AuthName "Please enter your ID and password" 
AuthUserFile /etc/httpd/conf/.digestpass 
require valid-user
</Files> 

AuthNameは本来領域名ですが認証ボックスに表示されるだけなので何でもOKらしい。

[Digest認証 1].digestpassの作成

Digest認証に使うユーザ名とパスワードを保存したファイルを作成します。<領域名>は任意の文字列でOKです。

$ cd /etc/httpd/conf
$ sudo htdigest -c .digestpass "<領域名>" <ユーザ名>
 Adding password for user in realm <領域名>.
 New password:
 Re-type new password:

$ cat .digestpass
 <ユーザ名>:<領域名>:83b0c7f1eaa530b1252578d43bbc6c70

[Digest認証 2] .htaccessの作成

WordPressのインストールされているディレクトリにある.htaccessを編集して以下を追加します。

<Files wp-login.php>
AuthType Digest 
AuthName "<領域名>"
AuthUserFile /etc/httpd/conf/.digestpass 
require valid-user
</Files>

AuthNameは.digestpassを作成したときの領域名を入力してください。

[Digest認証 3] Digest認証モジュールの有効化

Digest認証を行うために,モジュールの有効化をしなければなりません。私の環境ではデフォルトで有効になってました。

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.modules.d/00-base.conf

上記の設定ファイルどちらかにDigest認証に関する記述があるはずです。私の環境では下。

$ cat 00-base.conf | grep digest
 LoadModule auth_digest_module modules/mod_auth_digest.so

このモジュールがコメントアウトされている場合は外して保存してください。

Apache再起動

すべて設定し終わったらApacheを再起動します。問題がなければOKです。

$ sudo systemctl restart httpd

参考にさせて頂いたサイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です