Apacheで、特定のディレクトリ、例えば管理者用ログイン画面などを触られたくない場合や、特定のディレクトリを公開したくない場合にする設定のメモです。
# 新規 htpasswd -c /home/user/.htpasswd username # 更新 htpasswd /home/user/.htpasswd username
プロンプトに対し、パスワードを入力すれば.htpasswdファイルが作られます。
次にApacheの設定。色々試しましたが、私にはLocationディレクティブが一番シンプルで設定しやすかったです。
<VirtualHost *:443>
ServerName www.example.com:443
### 中略 ###
<Location /somedir/>
AuthUserFile /home/user/.htpasswd
AuthGroupFile /dev/null
AuthName "Input your ID and Password."
AuthType Basic
require valid-user
</Location>
</VirtualHost>
なお、.htaccessでやる場合は次の通りです。Satisfy Anyにするため、他に条件をセットする場合は要注意です。
Satisfy Any
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /home/user/.htpasswd
require valid-user
SetEnvIf Request_URI "^\/somedir\/.*" somedir
Order Allow,Deny
Allow from all
Deny from env=somedir
Basic認証は生のパスワードが流れるため、どうしてもhttpsで通信したいです。
また、これはあくまでも一時的な認証方法です。apacheの設定ファイルに直書きするため、Apacheの設定変更や、サーバ環境の移転の際などに情報が漏洩するリスクが高いです。
