ホーム DoRuby apacheでアクセス制限をしてみよう その1

apacheでアクセス制限をしてみよう その1

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。タジです。

今回は、apacheでのアクセス制限についてです。

ページにアクセスした際、IDとPassを聞かれることがあると思います。

いわゆるBasic認証というものです。


Basic認証は、ディレクトリ(<Directory /usr/local/apache/htdocs>)や、ロケーション(< Location /admin>)などのディレクティブで使います。

この設定は.htaccessというファイルに記述することもありますが、apacheの設定ファイル(httpd.conf)に書くこともできます。

書き方は比較的簡単です。

まず、認証に使うIDとPassを作ります。
作成には、apacheに付属しているhtpasswdコマンドを使用します。

htpasswd -c <ファイルを置く場所> <ID>

上記コマンドを使用すると、直後にパスワードの作成を求められます。
入力したパスワードは、ファイルを置く場所として指定された場所に、保持されるようになります。
htpasswdコマンドの-cというオプションは、ファイルを新規作成するためのオプションで、ユーザを追加する場合は付けないようにしてください。
(-cをつけると再度ファイルが新規作成されてしまいます。)

Basic認証では、IDとPassは特定のファイルに保存されるため、ファイルを置く場所と、使用するIDをコマンドの引数として渡す必要があります。
置く場所はどこでも構いませんが、外部から見えない方が望ましいです。

次に、apacheの設定ファイル内に、以下のように書きます。

<Location /admin>
AuthName "enter id and pass"
AuthType Basic
AuthUserFile /usr/local/apache2/conf/.htpasswd
Require valid-user
</Location>

AuthName:該当のページにアクセスした際に出てくる文言を設定します。
AuthType:認証のタイプを選択します。Basic認証以外にも、ダイジェスト認証などがあります。
AuthUserFile:パスワードを設定したファイルをフルパスで指定します。
Require:対象となるユーザを設定します。基本的にはvalid-userにしておけば、全てのユーザでパスが聞かれるようになります。

また、ディレクトリのディテクティブとロケーションのディテクティブの両方を使ったり、Requireでユーザを個別指定することで、初めにアクセスした際にIDとPassを聞かれ、さらに内部で特定のページにアクセスした際にIDとPassを聞かれるような構造にすることもできます。

例えば、require userA useB userCというディレクティブ1と、require userAというディレクティブ2があったとすると、はじめにディレクティブ1にアクセスした時に皆IDとPassの入力を求められ、userAとしてアクセスした人以外はディレクティブ2にアクセスした際に再度ディレクティブ2に設定されたIDとPassを入力する必要が出てきます。

今回はここまでです。

それではまた次回。

記事を共有

最近人気な記事