その他
    ホーム 技術発信 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を入力する必要が出てきます。

    今回はここまでです。

    それではまた次回。