Apache | アクセス権限 | アクセス権限の設定(Require)

アクセス権限の設定について説明する。

アクセス権限の設定(Require)

Apacheで使用されるすべてのファイルを対象に、アクセス制限を設定できる。アクセス制限は、セクションコンテナなどを使用してディレクトリ単位やファイル単位で設定できる。

セクションコンテナについては「アクセス許可範囲の設定(セクションコンテナ)」を参照する。

たとえば、次のように記述する。

<Directory "${SRVROOT}/htdocs">
    Require all granted
    Require not ip 10.252.46.165
</Directory>

アクセス制限はRequireで記述する。allを使用すると、すべて許可(granted)またはすべて拒否(denied)できる。また、hostipを使用すると、特定のホストやIPアドレスに対して許可または拒否を設定できる。

形式 意味
Require all granted すべてのアクセスを許可
Require all denied すべてのアクセスを拒否
Require ip IPアドレス 該当IPアドレスを許可
Require not ip IPアドレス 該当IPアドレスを拒否
Require host ホスト 該当ホストを許可
Require not host ホスト 該当ホストを拒否

all

allを指定すると、すべてのアクセスが対象になる。Require all grantedであればすべてのアクセスが許可され、Require all deniedであればすべてのアクセスが拒否される。

IPアドレス

IPアドレスを指定する場合、そのIPアドレスのクライアントだけがアクセスできる。Require ip 192.168.1.1であれば、IPアドレス192.168.1.1からのアクセスだけが許可される。

IPアドレスは次のように記述できる。

192.168.1.2
192.168.1
192.168.1.0/255.255.255.0
192.168.1.0/24

1つ目は個別のIPアドレスを指定する。2つ目の書き方は192.168.1.0/24に相当する。3つ目と4つ目はネットマスクを使った書き方で、192.168.1.0から192.168.1.255までのアドレスが対象になる。

ホスト

ホストまたはドメインで指定できる。アクセスしたIPアドレスからホストを取得し、そのホストと対象に指定されたホストまたはドメインの末尾が一致する項目が対象になる。

Require host devkuma.com

たとえば上のように記述した場合、ユーザーがアクセスしたIPアドレスから求めたホスト名の末尾がdevkuma.comと一致すれば許可される。一致する例としては、host1.devkuma.comwww.sub.devkuma.comのように末尾が一致するものがある。

設定の優先順位

<Directory>を使用してディレクトリに対するアクセス制限を設定すると、指定したディレクトリとすべてのサブディレクトリが対象になる。たとえばサブディレクトリに別のアクセス制限を設定した場合は、そのサブディレクトリの設定によって上書きされる。

では、デフォルト設定がどうなっているかをhttpd.confファイルで見てみる。アクセス制限部分だけを抜粋すると次のようになる。

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Files ".ht*">
    Require all denied
</Files>

<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

まず、ルートディレクトリ/に対してすべてのアクセスを拒否するように設定されている。前述のとおり、ディレクトリに対する権限設定はすべてのサブディレクトリも含むため、このルートディレクトリに対する設定により、Apacheに含まれるすべてのファイルへのアクセスが拒否される。

次に、ドキュメントルートである${SRVROOT}/htdocsディレクトリには、すべてのアクセスが許可されている。ドキュメントルートのディレクトリとサブディレクトリは外部に公開されるため、アクセスを許可しておく必要がある。

そして先に説明したように、サブディレクトリの設定によって上書きされるため、ルートディレクトリに設定された「すべて拒否」は、ドキュメントルート配下のディレクトリでは「すべて許可」に上書きされる。

また、cgi-binディレクトリもすべてのアクセスが許可されている。このディレクトリはCGIなどが配置されるディレクトリである。

Filesを使用して、.ht*というワイルドカードに該当するすべてのファイルへのアクセスが拒否されている。これは、配置されているディレクトリに関係なく、.htaccessのようなファイルを外部からアクセスできないようにするためである。.htaccessはアクセス制限を記述する特別なファイルであり、別ページで詳しく説明する。

参照