Apache 2.4のアクセス制御記述例メモ

Apache 2.4からアクセス制御の書き方が大きく変わったので、自分で良く使う記述をメモしておく。

どこからでもアクセス可能

<Directory /var/www/>
  Require all granted
</Directory>

基本アクセス禁止、ローカルと特定のIPアドレスの範囲のみアクセス可能

(たとえば、192.168.1.0/24。CIDRによるIPアドレスの範囲指定

<Directory /var/www/>
  Require local
  Require ip 192.168.1.0/24
</Directory>

上は以下のと同じ。RequireAnyはどれか一つの条件に合致すればOKというもの。

<Directory /var/www/>
  <RequireAny>
  Require local
  Require ip 192.168.1.0/24
  </RequireAny>
</Directory>

基本アクセス禁止、特定にIPアドレスからか、そうじゃなければDigest認証(.htaccessを使った場合)

Digest認証を利用するためには、auth_digestモジュールを有効化する必要がある。

% sudo a2enmod auth_digest

/var/www/html/sandboxにて.htaccessを用いてアクセス制限を行う場合は、sites-avaliable以下の設定ファイルでその旨指定する。以下の設定は.htaccessで何でも設定できるようにしている。指定できる範囲を狭める場合は適切なオプションを選ぶ→AllowOverride

<Directory /var/www/html/sandbox>
  AllowOverride All
</Directory>

Apacheを再起動する。

% sudo apache2ctl restart

ディレクトリやファイルの準備をする。

% sudo mkdir -p /var/www/html/sandbox
% sudo touch /var/www/html/sandbox/.htaccess

.htaccessの中身を以下のようにする。

AuthType Digest
AuthName "Require Auth"
AuthUserFile /var/www/html/sandbox/.htdigest

Require all denied
Require ip 192.168.1.0/24
Require valid-user

アクセスできるユーザとパスワードを用意する。

% sudo htdigest -c .htdigest 'Require Auth' USER_NAME

オプション-cをつけるのはファイルを作成するときのみ。ユーザの追加時は不要。'Require Auth'の部分は.htaccessのAuthNameの文字列を記述する。USER_NAMEは作成したいユーザ名。

最後にファイルの所有権変更して終了(自分のホームディレクトリの下ならば不要)。

% chown -R wwb-data:wwb-data /var/www/html/sandbox