[Apache]Apache2.4でDigest認証を設定する

ソフトウェア開発

Digest 認証設定する機会があったので、備忘録も兼ねて手順を紹介して行きたいと思います。

Digest 認証を設定した時の環境

  • OS : Amazon Linux AMI release 2017.09
  • Webサーバ : Apache 2.4

今回は、 AWSEC2 で作成したサーバに Digest 認証を設定しました。

本当はクライアント認証かけようとかと思ってたんですが、検証用に作った環境なので、とりあえず Digest 認証だけで逃げる感じで・・・。

では、早速 Digest 認証を設定する手順を説明していきたいと思います!

Digest 認証のファイルを作成する

下記コマンドを実行して Digest 認証ファイルを作成します。

$ sudo htdigest -c /path/to/documentroot/.htdigest 'Digest Name' 【ID】
Adding password for 【ID】 in realm digest.
New password:【パスワード】
Re-type new password:【パスワード】

htdigest コマンド実行時のパスはドキュメントルートを指定します。利用している環境によって適宜変更してください。

【ID】と【パスワード】には Digest 認証時に利用する ID とパスワードを設定します。

Digest 認証に利用するモジュール【 mod_auth_digest 】が有効になっているか確認する

まず、 mod_auth_digest.so というファイルが存在するかをチェックします。

/etc/httpd/modules の中身を確認して mod_auth_digest.so というファイルが存在するか確認します。

なければ、 apxs を使って mod_auth_digest.so をコンパイルしてインストールしたりしないといけないみたいですが、今回は Apache 2.4 インストール時にデフォルトでインストールされてたので、コンパイル〜インストールの方法については今回は説明を省きます。

次に、 mod_auth_digest.soLoadModule されてるか確認します。

私の環境では、 /etc/httpd/conf.modules.d/00-base.conf の中に LoadModule の記述がありました。

なければ、 /etc/conf.d の中に digest.conf を作成するなりして、その中に下記の記述を行いましょう。

LoadModule auth_digest_module modules/mod_auth_digest.so

Apache の設定ファイルとして Digest 認証に関する設定ファイルを追加する

Digest 認証用の Apache の設定ファイルを作成します。

$ sudo vim /etc/httpd/conf.d/digest.conf

<Directory "/var/www/html/">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
      AuthType Digest
      AuthName "Digest Name"
      AUthUserFile "/path/to/documentroot/.htdigest"
      Require valid-user
</Directory>

Apache を再起動する

Apache を再起動しないと設定が反映されないので、忘れずに Apache を再起動します。

$ sudo service httpd restart

ページにアクセスした時に、こんな感じにIDをパスワードが要求されて、 Digest 認証ファイル作成時に設定した【ID】と【パスワード】を入力して認証されれば設定完了です。

Apache Digest 1

特定の IP アドレスからのアクセス時には Digest 認証をスキップする

例えば、社外からのアクセスは Digest 認証したいけど、社内からのアクセスの場合は Digest 認証なしでページを表示したい場合などに、この設定を行います。

Digest 認証をスキップしたい IP アドレスを設定していきます。

/etc/httpd/conf.d/digest.conf の設定に下記を追加します。

Satisfy Any
Order deny,allow
deny from all
Allow from XXX.XXX.XXX.XXX NNN.NNN.NNN.NNN

設定の全文はこんな感じになります。

<Directory "/var/www/html/">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
      AuthType Digest
      AuthName "Digest Name"
      AUthUserFile "/path/to/documentroot/.htdigest"
      Require valid-user
      Satisfy Any
      Order deny,allow
      deny from all
      Allow from XXX.XXX.XXX.XXX NNN.NNN.NNN.NNN
</Directory>

Allow fromIP アドレスを指定すると、該当する IP アドレスからのアクセスに対して Digest 認証をスキップさせることができるようになります。

最後に

Digest 認証を設定することで、お手軽にセキュリティ対応することができるようになります。社内で使ってるサイトとか、検証環境とかでそこまでのセキュリテイレベルが求められない場合や、あらかじめ利用者に ID とパスワードとかを連絡できる場合とかには十分使えるんじゃないかと思います。
そうじゃないと、 SSH にしてクライアント認証キーを配布してとか、かなり手間がかかるセキュリテイ対策しないといけなくなっちゃうんで...。
この辺は労力に見合った効果が得られるかなどを考慮して、どのようにアクセス制御をかけるのかを検討していけば良いかと思います。

スポンサーリンク
スポンサーリンク
ソフトウェア開発プログラミング
スポンサーリンク

コメント

タイトルとURLをコピーしました