ApacheでBASIC認証(パスワード認証)を設定する

Apacheでベーシック認証を設定する

Apache HTTP Serverで、
パスワードを設定してWebページへのアクセス制限を行うBASIC(ベーシック)認証の方法をメモします。

環境: Apache/2.4.6 (CentOS)、Google Chrome 80.0.3987.122(Official Build) (64 ビット)、 Safari 13.0.5

Apacheをインストールしているサーバーへログインし以下の手順を行っていきます。

パスワードファイルと認証ユーザーを作成する

1. htpasswdコマンド を管理者権限で実行

sudo htpasswd -c /etc/httpd/htpasswd ユーザ名

-cオプションで、パスワード認証用ファイル(拡張子なし)を※任意のパスと名前で作成します。
ユーザ名にもページアクセスの際の任意のログイン名を指定します。
(サーバのユーザー名と異なってもOK)

続けて、ログインする際に必要なパスワードを入力して実行するとパスワードファイルが作成されます。

※例では/etc/httpdディレクトリ内にコマンドと同じ名前のファイル「htpasswd」を作成します。

2. 1で作成したパスワードファイルを確認

$ cat /etc/httpd/htpasswd 
ユーザ名:$apr1$1EUQyMiS$KK1T0nJ15fI/JW6r74WXm/

パスワードファイル作成時に指定したユーザ名と暗号化されたパスワードが記述されている事を確認します。

3. パスワードファイルのアクセス権限を変更する

$ sudo chown apache:apache /etc/httpd/htpasswd
$ sudo chmod 600 /etc/httpd/htpasswd

安全のため、Apacheのみアクセス出来るようにしています。

認証ユーザーを追加する場合

htpasswdコマンドを再度実行し、作成済みのパスワードファイルに新しいユーザ名とパスワードを追加します。
(初回と違い、-cオプションは必要ありません)

$ sudo htpasswd /etc/httpd/htpasswd 追加するユーザ名

Apacheの設定を行う

1. Apacheの設定ファイル /etc/httpd/conf/httpd.confを編集する

$ sudo vi /etc/httpd/conf/httpd.conf

ファイルをviで開き、インサートモードに切り替えて以下の様にDirectoryタグを追記し保存します。

<Directory "/var/www/html">
  AuthType Basic
  AuthName "auth"
  AuthUserFile /etc/httpd/htpasswd
  Require valid-user
</Directory>

Directoryタグ開始の場所にアクセス制限をかけたいWebページが存在するパスを指定する。
(例では /var/www/html としてApacheの公開ディレクトリ丸ごとアクセス制限を行なっている)

他、Directoryタグの中身の項目について

AuthType(認証の種類)
Basicと記述
AuthName(ダイアログメッセージに※表示する名前)
(任意)※Google Chrome、Safariには表示されませんが正しく動作させるために設定しておく必要がありました。
AuthUserFile(パスワードファイル)
htpasswdコマンドで作成したパスワードファイルのファイル名をパスから記述
Require(認証するユーザ)
「valid-user」でパスワードファイルに記述された全ユーザが対象となる

2. 設定ファイルを再読み込みする

$ sudo systemctl reload httpd.service

再読み込みして変更を反映させます。

アクセス制限の設定に該当するページへアクセスして、ログインのダイアログが表示されれば設定完了です。

ログイン後、ブラウザを終了するまでページの閲覧が有効です。
(ログアウトはありません)

Follow me!