web-dev-qa-db-ja.com

Apache2サーバー構成を使用してすべてのサブディレクトリへのアクセスを一致/拒否します

特定のディレクトリのすべてのサブディレクトリへのアクセスを拒否するにはどうすればよいですか? (ディレクトリツリー内の単一のアイテムのアクセス権を手動で変更することはできますが。)

<Directory(Match)>ディレクティブを使ってやってみました。サーバー構成(000サイト対応)は次のようになります。

_DocumentRoot /var/www
<Directory /var/www>
    Allow from all
    Deny from none
    Order deny,allow
</Directory>
<Directory /var/www/*>
    Deny from all
</Directory>
_

_http://localhost/_へのクエリは正常に_/var/www/index.html_を表示し、サブディレクトリへのすべてのクエリは失敗します。

問題は、httproot内のファイルへのクエリが失敗することです。つまり、_http://localhost/index.html_を要求すると、_403 Forbidden_になります。

<Directory(Match)>ディレクティブは、実際にはディレクトリとファイルに一致しているようです!?

これが本当かどうかを確認するために、私は試しました:

_<Directory /var/www/i*>
    Deny from all
</Directory>
_

これは、「i」で始まるファイル/ディレクトリへのアクセスのみを拒否します。

この動作を変更して、_<Directory>_をディレクトリのみに一致させる方法はありますか?すべてのサブディレクトリが拒否されることを達成する別の方法はありますか? (それらすべてを手動で拒否するか、すべてのファイルを手動で有効にする以外に)

12
coldfix

結局、解決策は非常に単純であることがわかります。

<Directory /var/www/*/>
    Allow from None
    Order allow,deny
</Directory>

ディレクトリパターンの後の末尾のスラッシュ/に注意してください。これにより、ファイルではなくディレクトリのみに一致するようになります。

これは、<Directory>-ディレクティブから期待されるのとまったく同じように機能します-/var/www/の直接サブディレクトリへのアクセスのみを拒否します。指定されたサブディレクトリ(ツリー内の任意の場所)は、<Directory>ディレクティブを使用して手動で再度有効にすることができます。

これは、<DirectoryMatch>とは対照的です。
-ツリー内のすべてのファイルとディレクトリにも一致し、
-overrideツリー内の任意のアイテムに対するすべての<Files>または<Directory>ディレクティブ。

16
coldfix

これは私のためにそれをしました。

<DirectoryMatch "^/var/www/(.+)/"> # don't put $ at the end
Order Allow,Deny
Deny From All
</DirectoryMatch>

編集

サブサブディレクトリ(以下のコメント)を拒否しないようにするには、構成ファイルの上記のDirectoryMatchの下に次のDirectoryMatchを追加します。

<DirectoryMatch "^/var/www/(.+?)/(.+)/"> # again no $, see comment
Order Deny,Allow
Allow From All
</DirectoryMatch>
3
dialer

これを使って:

<Directory /var/www/public>
    allow from all
</Directory>


<DirectoryMatch "^/var/www/public/(.+)/">
   deny from all
</DirectoryMatch>

オプションなどを追加することをお勧めします。

秘訣は ディレクティブのマージ方法 です。

1

最善のアプローチは、一般に公開されていないすべてのコンテンツを、/ home/my/app /のようなルートツリーの外のディレクトリに移動することです。

<Directory /home/my/app>
    Order Allow,Deny
    Deny from all
</Directory>

次に、そのディレクトリと、そのディレクトリにつながるすべてのディレクトリ(たとえば、/ homeと/ my)のApacheユーザーに読み取り権限を付与します。

このようにして、ルートディレクトリ構成エラーが発生したときにそのコンテンツの一部がリークするリスクはありません。

0
Clodoaldo Neto

だから、私は助けになるかもしれない(または役に立たないかもしれない)2つの考えを持っています。

1つ目は、場所によってディレクトリのアクセス許可が上書きされる可能性があることです。だからあなたがそれらを持っていないことを確認してください。 localhost /を押すと、rootとして設定したものがすべてヒットします。これは、おそらくセキュリティを上書きします。そのため、ファイルを直接指定すると、そのファイルにアクセスできません。したがって、他の人があなたのルートに到達できないようにする場合は、 ルートを指定しないでください

サブディレクトリへのアクセスを制限することについてのあなたのポイントについては、私はこの別の投稿をチェックします。 ...多分役に立たない。おそらく、ユースケースの詳細が役立つでしょう。

https://serverfault.com/questions/190447/Apache-2-htaccess-matching-all-sub-directories-of-current-directory

0
John Hinnegan

構成ファイル内のIndexesディレクティブからOptionsオプションを削除することにより、すべてのサブディレクトリで自動インデックス作成を無効にできます。したがって、デフォルト構成の場合、Optionsディレクティブは次のようになります。

httpd.conf:

...
Options FollowSymLinks
...

(「インデックス」オプションは設定されていません。)

次に、クライアントアクセスに使用できるようにする特定の各サブディレクトリ内にindex.htmlまたはindex.phpファイルを配置します。特定のディレクトリで自動インデックス作成を有効にしたい場合は、それらのディレクトリ内に.htaccessファイルを追加し、次の行を.htaccessファイル内に配置できます。

Options Indexes

.htaccessはそのディレクトリとそのすべてのサブディレクトリに再帰的に影響することに注意してください。したがって、.htaccessを追加し、次の方法で自動インデックスを無効にすることにより、このオプションを必要としない再帰的なサブディレクトリを除外する必要があります。

Options -Indexes

注:.htaccessファイルを有効にしてApache構成に影響を与えるには、AllowOveride Allファイルを配置するディレクトリの一致に.htaccessを配置する必要があります。

0
2i3r