#18 Apache httpd 2.4のアクセス制御

icon incmplt が 2020/06/08 15:30 に投稿 ( icon incmplt が 2020/06/08 15:46 に編集 <更新履歴> )
  投稿を編集(サインイン)
  ストック
  アンケート回答

  目次

Apache httpd は、2.4系以降 .htaccess や httpd.confで記述するアクセス制御の記述方法が変更になった。

httpd 2.2などが動いている古いOSから httpd 2.4系にアップグレードしたときに、アクセス制御の記述方式によりエラーになったり、正しくアクセス制御ができない不具合が発生する。

アクセス制御の記述の違い

Apache httpd 2.0/2.2と2.4では、次のように記述が異なる。

Apache httpd 2.0/2.2

Apache httpd 2.0/2.2では次のようにアクセス制御を設定していた。

Order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx

Apache httpd 2.4

Apache httpd 2.4以降は、以下のようにアクセス制御の記述が変更になる。

<RequireAny>
Require all denied
Require ip xxx.xxx.xxx.xxx
</RequireAny>

Requireの記述

ディレクティブ内容
Require all granted全てのアクセスを許可。
Require all denied全てのアクセスを拒否。
Require [not] env [env-var] [env-var] ...指定した環境変数が定義されていればアクセスを許可。not を指定した場合には、指定した環境変数が提起されていた場合にアクセスを拒否。RequireAny を指定した場合には、notを指定することはできない。
Require method [HTTP-METHOD] ...指定された HTTP-METHOD(メソッド)である場合にはアクセスを許可
Require valid-userBASIC認証などで認証が通り有効なユーザーの場合にはアクセスを許可。
Require ip [IPADDRESS]クライアントのIPアドレスが指定されたIPアドレスの場合にアクセスを許可

RequireAll | RequireAny | RequireNone

アクセス制御は、RequireAll, RequireAnym, RequireNone ディレクティブで、複数のRequire条件 を AND もしくは OR の指定ができる。

ディレクティブ内容
RequireAllディレクティブ内の、全ての条件にマッチしたときにアクセスを許可
RequireAnyディレクティブ内の、いずれかの条件にマッチしたときにアクセスを許可
RequireNoneいずれかの条件にマッチする場合には、アクセスを拒否

RequireNoneだけが、拒否の条件を記述することになるので注意が必要である。

環境変数のセット SetEnvIf ディレクティブ

Require env で指定する環境変数は、SetEnvIf ディレクティブで設定する。

SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...

詳しい設定方法は、Apache httpd mod_setenvif のマニュアルを参照。

設定の例

いくつかの設定方法。

全てのアクセスを許可する

全てのアクセスを許可するには、単純に以下の記述だけで問題ない。
一般公開しているコンテンツなどは、.htaccess や Directory ディレクティブで、以下の設定を追加する。

Require all granted

特定のディレクトリにBASIC認証をかける

AuthType Basic
AuthName "Authentication Directory"
AuthUserFile /path/to/.htpasswd

SetEnvIf Request_URI "^/*" allow_page
SetEnvIf Request_URI "^/auth-dir/*" !allow_page

<RequireAny>
Require env allow_page
Require vaild-user
</RequireAny>

<Files ~ "^\.(htaccess|htpasswd)$">
Require all denied
</Files>

特定IPアドレスかはBASIC認証でアクセスを許可

オフィスや拠点からのアクセスの時にはアクセスを許可し、それ以外のネットワークからのアクセスの場合にはBASIC認証で認証してアクセスを許可したい場合には、次のように記述する。

AuthType Basic
AuthName "Authentication Directory"
AuthUserFile /path/to/.htpasswd

<RequireAny>
Require valid-user
Require ip xxx.xxx.xxx.xxx
</RequireAny>

 添付ファイル     - [0]


 コメント追加