13

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

<Directory(Match)>私はディレクティブでそれをやろうとしました。サーバー構成 (000-sites-enabled) は次のようになります。

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

4

6 に答える 6

3

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

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


編集

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

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

于 2011-03-13T23:13:17.687 に答える
1

これを使って:

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


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

オプションなどを追加したい場合があります。

秘訣は、ディレクティブがどのようにマージされるかです。

于 2011-03-20T14:38:01.413 に答える
0

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

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

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

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

于 2011-03-13T23:00:32.623 に答える
0

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

httpd.conf:

...
Options FollowSymLinks
...

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

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

Options Indexes

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

Options -Indexes

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

于 2014-04-08T13:06:49.637 に答える
0

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

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

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

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

于 2011-03-13T22:36:01.097 に答える