nginxでBasic認証を行うには?
nginxでBasic認証を行うことができるよう、auth_basicディレクティブ,auth_basic_user_fileディレクティブやパスワードファイルの生成方法について確認していきます。
Basic認証を行うための設定
nginxでは、「HTTP Basic Authentication」 プロトコルを用いた、ユーザ名とパスワードによるアクセス制御がhttp_auth_basic_moduleで提供されています。
Basic認証を行うには、auth_basicディレクティブとauth_basic_user_fileディレクティブを使って次のように設定します。
location / {
auth_basic "Restricted area";
auth_basic_user_file /path/to/.htpasswd;
}
auth_basicディレクティブは、Basic認証をこのコンテキストで行うことを示しており、http, server, location, limit_except コンテキストで設定することができます。auth_basicは継承されるため、auth_basicディレクティブに off と指定することで、継承を打ち消す事ができます。 auth_basicディレクティブに設定する値は、realm 名になります。
auth_basic realm名 又は off;
auth_basic_user_file ディレクティブは、ユーザ名とパスワードが入ったファイルの場所を設定します。auth_basic_user_file ディレクティブの書式とパスワードファイルの形式は、次のフォーマットとなります。
auth_basic_user_file パスワードファイルのパス;
# comment
ユーザ名1:password1
ユーザ名2:password2:コメント
...
ただし、nginx自体にはパスワード生成ツールが付属していないので、別途 htpasswd コマンドなどを利用してファイルを作成します。
http_auth_basic_moduleで使用可能なパスワードには、次のものがあります。
- Apacheの htpasswd コマンドや、OpenSSL の openssl passwd コマンド などで作った crypt() 関数由来のパスワード。
- MD5 に基づいたapr1アルゴリズムでハッシュ化されたパスワード。
- その他、PLAIN, SHA, SSHA などのパスワードに対応していますが、PLAINやSHA-1は、使用しないようにとドキュメントに書かれています。
パスワードファイルの作り方
nginx自体にはパスワード生成ツールが付属していないので、パスワードファイルを生成することができるツールを使って生成します。例えば、ユーザ名が foo でパスワードが bar のパスワードファイルを作ってみます。
opensslコマンドを使ったパスワードファイルの作り方
OpenSSLが入っている場合、次のコマンドでパスワードファイルを生成することができます。
$ sudo echo "foo:$openssl passwd -crypt bar)" > /path/to/.htpasswd
また、apr1アルゴリズムの場合は、次のコマンドでパスワードファイルを生成することができます。
$ sudo echo "foo:$(openssl passwd -apr1 bar)" > /path/to/.htpasswd
Apatchのhtpasswdコマンドを使ったパスワードファイルの作り方
htpasswdコマンドを利用するためにhttpd-toolsのインストールから。
$ sudo yum -y install httpd-tools
htpasswdコマンドを使ってパスワードファイルを生成することができます。
$ sudo htpasswd -c /path/to/.htpasswd foo
New password: bar(パスワードを入力)
Re-type new password: bar(パスワードを入力)
以上でnginxでのBasic認証が実現できます。