.htaccess - mod_authn_file

AuthUserFile ディレクティブ

AuthUserFile ディレクティブは、認証に使用するユーザとパスワードの一覧が格納されている、テキストファイル名を設定します。file-path はパスワードファイルへのパスを絶対パス、または相対パスで指定します。絶対パスでない場合は、ServerRoot からの相対パスとして扱われます。

# AuthUserFile ディレクティブの構文
AuthUserFile file-path
AuthUserFile ディレクティブの構文

パスワードファイルの各行には、username:password で記述します。password は平文ではなく、暗号化されたパスワードを設定します。また、同一の username が複数回登録された場合、mod_authn_file は最初に見つかったパスワードを使用して認証します。パスワードファイルを作成、または更新するには、htpasswd コマンドを使用します。

# htpasswd コマンドの構文
htpasswd    [ -c ] [ -m | -d | -s | -p ] passwdfile username
htpasswd -b [ -c ] [ -m | -d | -s | -p ] passwdfile username password
htpasswd -n        [ -m | -d | -s | -p ]            username
htpasswd -nb       [ -m | -d | -s | -p ]            username password
htpasswd コマンドの構文
htpasswd コマンドのオプション一覧
オプション説明
-bコマンドラインからパスワードを作成します。パスワードがコマンドライン上に見えてしまうため、このオプションは極めて注意して使用して下さい。
-cパスワードファイルを作成します。パスワードファイルがすでにある場合、上書きされます。このオプションは -n オプションと組み合わせることができません。Apache 2.4.4 では、このオプションを使用することによりパスワードが正しく設定されないバグがあります。 その場合、-b オプションを使用することで回避できます。
-nファイルを更新せずに標準出力に結果を表示します。このオプションは passwdfile の引数が省略されます。このオプションは -c オプションと組み合わせることができません。
-mパスワードに Apache の MD5 アルゴリズムを使用します。このアルゴリズムにより暗号化されたパスワードは、Apache 1.3.9 以降であれば移植可能です。
-dパスワードに crypt() 暗号化を使用します。Windows と TPF 以外のプラットフォームで使用可能です。
-sパスワードに SHA 暗号化を使用します。LDAP ディレクトリ変換フォーマット (ldif) を使用する Netscape サーバの移行を容易にします。
-pプレーンテキストパスワードを使用します。ただし、パスワードが暗号化されないため、次のような警告文が表示されます。"Warning: storing passwords as plain text might just not work on this platform."
passwdfileユーザ名とパスワードが含まれているファイル名です。-c フラグがある場合、ファイルが存在しなければファイルを新規作成し、存在していれば上書きされます。
usernamepasswdfile に作成、または更新するユーザ名です。username が存在しなければエントリを追加し、存在していればパスワードを変更します。
passwordファイルに暗号化されて記録されるプレーンテキストのパスワードです。-b オプションがある場合のみ使用されます。

htpasswd コマンド実行後には終了ステータスが返されます。終了ステータスの確認方法は、パスワードファイルの作成直後に echo $? で確認できます。ステータス値の内容は、以下の通りです。

# パスワードファイルの終了ステータス確認方法
% htpasswd -c /home/murashun/.htpasswd murashun
New password: 
Re-type new password: 
Adding password for user murashun
% echo $?
0
% 
パスワードファイルの終了ステータス確認方法
htpasswd コマンドの終了ステータス一覧
ステータス値説明
0 (true)ユーザ名とパスワードが正しく passwdfile に追加、または更新された。
1ファイルアクセスに問題が発生した。
2コマンドラインに関する文法誤りがあった。
3対話形式でパスワードを入力した際に確認のエントリがマッチしなかった。
4操作が中断された。
5ユーザ名、ファイル名、パスワード、最後に計算されたレコードにおいて値が長すぎる。Windows と MPE プラットフォームで htpasswd で暗号化されたパスワードは最大で 255 文字に制限されます。
6ユーザ名に不正な文字が含まれている。
7有効なパスワードファイルでない。
# htpasswd コマンドの例
htpasswd /usr/local/etc/apache/.htpasswd-users jsmith
htpasswd コマンドの例

上記の例では、ユーザ jsmith のパスワードを追加、または修正します。パスワードの入力は対話形式となり、ユーザはパスワードの入力を促されます。Windows 上で実行された場合、パスワードは Apache MD5 アルゴリズムを使用して暗号化されます。他のプラットフォームの場合は、crypt() 関数が使用されます。ファイルが存在しない場合、htpasswd はエラーを返す以外には何もしません。

# htpasswd コマンドの例
htpasswd -c /home/doe/public_html/.htpasswd jane
htpasswd コマンドの例

上記の例では、新しいパスワードファイルを作成し、ユーザ jane のレコードを作成します。パスワードの入力は対話形式となり、ユーザはパスワードの入力を促されます。ファイルが存在しても、入出力ができない場合は変更されず、htpasswd はメッセージを表示してエラーステータスを返します。

# htpasswd コマンドの例
htpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve
htpasswd コマンドの例

上記の例では、MD5 アルゴリズムを使ってコマンドラインからのパスワード (Pwd4Steve) を暗号化し、指定されたファイルに格納します。

htpasswd によって管理されるパスワードファイルは、Web サーバの URI の場所内にあるべきではありません。つまり、ブラウザによって呼び出し可能となるディレクトリに格納するべきではありません。本ディレクティブによって ServerRoot からのパスが指定できるため、公開ディレクトリの外に格納しましょう。

関連記事