Apacheの設定の話
内容はタイトルとおりです。 Apacheの設定関係で、意外と出回ってなかったという印象なので書いておきます。 よくあるのは、IPアドレスとベーシック認証のどちらかを使用してアクセス制限するタイプです。
そもそもダイジェスト認証があまりメジャーではない(?)印象なので、尚更書いている人が少ないように思います。
ダイジェスト認証とは?
Wikiによると、以下のとおりですね。詳細は書いてあるので割愛します。
Digest認証(ダイジェストにんしょう)とは、HTTPの認証方法の一つ。ユーザ名とパスワードをMD5でハッシュ(ダイジェスト)化して送る。Basic認証では防げなかった盗聴や改竄を防ぐために考案された。 https://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC
要するに、ベーシック認証はセキュリティ面で不安があるので、それを解決したのがダイジェスト認証ということです。 ちなみに、ベーシック認証のなにが不安なのかというと「ユーザーIDやパスワードの情報がほとんど加工されないまま送信される」点です。暗号化されていないパスワードでやりとりするとか恐ろしすぎます。
それでもダイジェスト認証があまり使われてないのは
ベーシック認証がダイジェスト認証よりも広く使われている理由には、対応していないブラウザがまだあるということらしいですね。
ページを閲覧するユーザがある程度決まっていて、どんなブラウザを使用するか把握している → ダイジェスト認証
想定されるユーザが多岐に渡ってブラウザ環境が不明 → ベーシック認証が無難
という解釈をしています。
環境次第でベーシック認証でいい
ベーシック認証はセキュリティ面で不安な面もありますが、SSLが確立されている場合や社内LANからのアクセスならそこまで慎重になる必要はなさそうです。
社内アクセスはIPアドレス認証し、社外からのアクセスはダイジェスト認証にする
ここまで書いた内容を考慮して、特定の社員がアクセスするページに対してこのような設定をすることにしました。
パスワードファイルを作成する
コマンドを叩くだけですが、何点か注意が必要です。
まずはApacheをインストールしたディレクトリに移動します。
htdigest -c
で新規のパスワードファイルを作ります。
htdigest -c パスワードファイル名 領域名 ユーザー名 #パスワードファイルを新規作成する場合は-cは必要です
- パスワードファイル名
絶対パスで指定します
- 領域名
後にhttpd.confのAuthNameで指定する名前になります。特に決まりはないです
- ユーザ名
ダイジェスト認証でユーザ名を聞かれたときに入力する値になります。adminがわかりやすいです
コマンドを実行すると、二度パスワードを入力せよと指示があるので入力します。 そのパスワードがダイジェスト認証のパスワードになるので忘れないようにしてください。
httpd.confに設定を書く
パスワードファイルができたら以下の設定を記述します。 ベーシック認証設定の内容とほぼ変わりません。
=== <Directory "<Directory_path>"> Order deny,allow #全拒否してから許可させるものを指定する Allow from <社内IP> #許可するIPアドレス Allow from <社内IP> Allow from <社内IP> Deny from All #すべてを拒否 #Digest AuthType Digest #ダイジェスト認証を使うぞ宣言 AuthName "<領域名>" #htdigestで入力した領域名 Options FollowSymLinks #シンボリックリンクファイルを認識させる AllowOverride All #上位で設定した設定値を、下位の設定で変更できるように許可を与える AuthUserFile "/etc/httpd/conf/.htdigest" #パスワードファイル名 Require valid-user #記述されているユーザを許可する Satisfy any #ダイジェスト認証かIP元どちらかをパスすればOKにする(defaultはAll) </Directory>
記述が終わったら、syntaxの確認をして・・・。
/etc/init.d/httpd configtest
問題なければサービスを再起動です。
service httpd restart
これにより、社内からのアクセスはダイジェスト認証が実施されずにページへアクセスできます。 それ以外のIPアドレスから来た場合、ダイジェスト認証のポップアップがでるようになります。
参考文献
ベーシック認証Wiki https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC ダイジェスト認証Wiki https://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC Apache HTTP サーバ バージョン 2.4 ドキュメント https://httpd.apache.org/docs/2.4/ja/ Basic認証(基本認証)とDigest認証、それぞれの役割と違いについて https://madalinazaharia.com/column/basic-authentication-and-digest-authentication/ ダイジェスト認証を設定する https://www.adminweb.jp/apache/allow/index8.html