ネットで検索すると .htaccess と .htpasswd というファイルを作るという説明が多数あった。
まず .htaccess について。
いきなり、認証をかけたい url に .htaccess を用意して、
AuthType BasicAuthName "Input your ID and Password."
AuthUserFile /url/.htpasswd
require valid-user
のように書けばよい、と書いてあるサイトがあるが、間違いだ。
ベーシック認証を許可するには、ベーシック認証を実行したい url で AuthType, AutoName, Require, AuthUserFile などの認証処理に必要なディレクティブが許可されていなければいけないのだ。
その方法は2つある。
1つ目は、上記の通り .htaccess を用意する方法だが、その url でベーシック認証に必要なディレクトリ群を使用許可していなければいけないので、 httpd.conf (以前書いた通り ubuntu の apace2 では apache2.conf)にて、
<Directory "/設定したい url /">AllowOverride AuthConfig
</Directory>
のようにして、ベーシック認証に必要なディレクティブの実行を許可しておく必要がある。
<Directory "/設定したい url /">AllowOverride None
</Directory>
などとなっている場合もあるので、 httpd.conf ( apache2.conf ) をよく見て修正する必要がある。
2つ目は、 httpd.conf ( apache2.conf ) に直接、
<Directory /ベーシック認証したいurl/>AuthType Basic
AuthName "Auth"
AuthUserFile .htpasswd
Require valid-user
</Directory>
のように記述する方法だ。
これらの方法で、ベーシック認証を行いたい url での認証許可や認証に使うファイルを指定しておく。
次は .htpasswd についてだ。
多くのサイトでの .htpasswd の作り方の紹介内容が問題だ。多くのサイトが、自分のページに、「暗号化されたパスワード文字列を生成するツール」を用意していて、それを使って作るように書いてある。
それは、あぶなくて使えない。
ネットのセキュリティを構築するためのパスワードなのに、どこの誰かも分からないサイトに、大事なユーザ名とパスワードを渡してしまえば、暗号化されたパスワードまで知られてしまう。
セキュリティはゼロになる。
暗号化されたパスワードは、自分で作れる。
apache2 のパッケージの中に htpasswd というコマンドがあるので、それで作るとよい。
ubuntu の場合、htpasswd コマンドは apache2-utils パッケージの中に含まれていて、 /usr/bin/ にインストールされる。
使い方は、「ApacheでBasic認証をするhtpasswdのコマンド」にも書かれているが、こちらの解説はユーザ名を指定して .htpasswd ファイルを作るとしか書かれていないので不十分である。
参考サイトに書かれているように
htpasswd -c ファイル名 ユーザ名
と入力したらどうなるかというと、そのユーザ名のためのパスワードを聞かれる。そして、決めたパスワードを入力すると、指定したファイル名でベーシック認証用のファイル(通常は .htpasswd )が作成される。
htpasswd -bc ファイル名 ユーザ名 パスワード
とすると、パスワードまで指定してコマンドを実行し、指定のファイル名でベーシック認証用のファイルを作成できる。
より詳しい使い方は htpasswd --help で自分で確かめてほしい。
おまけ:
「アクセス制限ベーシック認証 ~パスワードでページを守ろう~」では、 perl のスクリプトでパスワードの暗号化を行う例が示されている。