Apache | アクセス権限 | アクセス権限の設定(Require)
アクセス権限の設定について説明する。
アクセス権限の設定(Require)
Apacheで使用されるすべてのファイルを対象に、アクセス制限を設定できる。アクセス制限は、セクションコンテナなどを使用してディレクトリ単位やファイル単位で設定できる。
セクションコンテナについては「アクセス許可範囲の設定(セクションコンテナ)」を参照する。
たとえば、次のように記述する。
<Directory "${SRVROOT}/htdocs">
Require all granted
Require not ip 10.252.46.165
</Directory>
アクセス制限はRequireで記述する。allを使用すると、すべて許可(granted)またはすべて拒否(denied)できる。また、hostやipを使用すると、特定のホストや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.comやwww.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はアクセス制限を記述する特別なファイルであり、別ページで詳しく説明する。
参照
- https://httpd.apache.org/docs/2.4/upgrading.html
- https://httpd.apache.org/docs/2.4/howto/access.html