ユーザー、パスワードの設定

apache2のベーシック認証のユーザーとパスワードの設定ファイルを作成する場合、以下のコマンドを実行します。

htpasswd -c [設定ファイルパス] [ユーザー名]

設定ファイルを /etc/apache2/.htpasswd、 ユーザー名 abcd とする場合、コマンドは以下のようになります。

htpasswd -c /etc/apache2/.htpasswd abcd

htpasswd -c /etc/apache2/.htpasswd abcd
New password: 
Re-type new password: 
Adding password for user abcd
実行するとパスワード入力を2回求められますので、同じものを2回入力します。

.htpasswdファイルの中身

ユーザーとパスワードをabcdとした場合、デフォルトで作成されたファイルの内容は/以下のようになります。

abcd:$apr1$SzbRF5Yz$.mwdsKrF8V6qTsj5Pray90

これは以下のようになっています。

[ユーザー名]:$[暗号化アルゴリズム]$[ソルト]$[暗号化されたパスワード]

ユーザー名: abcd
暗号化アルゴリズム: apr1
ソルト: SzbRF5Yz
パスワードとソルトから暗号化された文字列: .mwdsKrF8V6qTsj5Pray90
ユーザー名を除いた部分の文字列は、openssl を使って作成することもできます。 MD5(APR)の場合、コマンドは以下のようになります。
openssl passwd -apr1 -salt [ソルト] [パスワード]

例 暗号化アルゴリズム apr1、ソルト SzbRF5Y、パスワード abcd の場合、

 openssl passwd -apr1 -salt SzbRF5Yz abcd
$apr1$SzbRF5Yz$.mwdsKrF8V6qTsj5Pray90

htpasswdコマンド

htpasswdコマンドは暗号化アルゴリズムを指定しない場合、MD5(APR)を使って暗号化します。 オプションを使うと、bycryptやSHA-512等に変更することができます。

暗号化アルゴリズムを指定するオプションと、作成された文字列中の暗号化アルゴリズを示す文字列は以下のようになります。

暗号化アルゴリズ htpasswdのオプション 暗号化アルゴリズを示す文字列 備考
MD5(APR) 指定なし または -m apr1
SHA-1 -s {SHA} 例 htpasswd -s -c .htpasswd user
SHA-256 -2 5 例 htpasswd -2 -c .htpasswd user
SHA-512 -5 6 例 htpasswd -5 -c .htpasswd user
bcrypt -B 2y 例 htpasswd -B -c .htpasswd user

設定ファイル

ベーシック認証の設定ファイルを以下のディレクトリに作成します。

/etc/apache2/sites-available/

設定ファイル名が basic_auth.conf とする場合、以下のファイルを作成します。

/etc/apache2/sites-available/basic_auth.conf

デフォルトでは、/var/www/html 以下が公開ディレクトリになります。 パスワード情報ファイルを /etc/apache2/.htpasswd として、 全ページにベーシック認証を有効にする場合は以下のようになります。

<Directory /var/www/html>
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/apache2/.htpasswd
    require valid-user
</Directory>

有効化

作成できたら以下のコマンドを実行して basic_auth.conf を有効にします。

sudo a2ensite basic_auth.conf
成功すると、/etc/apache2/sites-enabled/にリンクが作成されています。

有効にしたbasic_auth.confは、apache2にはまだ反映されていないので、リスタートして反映させます。

sudo systemctl restart apache2

無効化

有効になっているベーシック認証を無効化する場合、以下を実行してconfファイルのリンクを削除して設定ファイルの無効化をします。

sudo a2dissite basic_auth.conf

変更を反映するためにapache2をリロードします。

sudo systemctl reload apache2

特定ディレクトリの認証

全ページでなく特定ディレクトリ以下だけベーシック認証を有効にしたい場合は、そのパスを指定して設定します。 この方法を使用する場合、ディレクトリ一覧表示のオプションが有効になっている場合があります。 ディレクトリ一覧表示を確実に無効にしたい場合は、Options FollowSymLinksを追加します。

例 /var/www/html/secret ディレクトリ以下のみベーシック認証を有効にする

<Directory /var/www/html/secret>
    Options FollowSymLinks

    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/apache2/.htpasswd
    require valid-user
</Directory>
想定通りになっているかは、"/secret" や "/secret/" にアクセスして確認します。