web-dev-qa-db-ja.com

Apache2オプションコマンドのコンテキストは、使用するフラグによって異なりますか?

Apacheのインストールが可能な限り安全であることを確認するためにさまざまなことをテストしていたので、ファイルのディレクトリリストが表示されるかどうかを確認することにしました。そこで、テストディレクトリを作成し、いくつかのファイルを追加しました。

/var/www/domain/public_html/test
/var/www/domain/public_html/test/a.txt
/var/www/domain/public_html/test/b.txt

驚いたことに、そのテストディレクトリに移動したときに、a.txtb.txtがリストされています。

セットアップファイルに戻ってOptions -Indexesのセットアップがあったので、ファイルa.txtおよびb.txtが表示されるのはなぜかと思っていました

私のセットアップだけがこのように見えました:

<VirtualHost domain:80>
  ...
  Options -Indexes
  ...
</VirtualHost>

Optionsコマンドのドキュメント を見ると、次のことが明確に示されています:

Context:    server config, virtual Host, directory, .htaccess

それでも、その特定のオプションをVirtualHostレベルに直接配置しても、何も実行されません。

Optionsタグ内のDirectoryを移動するように設定を変更しましたが、動作します。

<VirtualHost domain:80>
  ...
  <Directory "/var/www/domain/public_html/">
    Options -Indexes
  </Directory>
  ...
</VirtualHost>

それはただの大きな落とし穴!?オフにするオプションをオフにしないようにするために知っておく必要があること

4
Alexis Wilke

VirtualHostコンテナでOptions -Indexesを直接使用できます。ただし、ここで定義したときに目的の効果が得られるかどうかは、Optionsがサーバー構成の他の場所で定義されているかどうかによって異なります。たとえば、anywhere else(アクセスされるディレクトリに関連する)定義された<Directory>セクションは、リクエストの後半で処理されるため、これをオーバーライドする可能性があります。

VirtualHostコンテナで直接定義されたOptionsは、サーバー構成で直接定義されたOptionsのみをオーバーライドします。

Optionsディレクティブは「特定のディレクトリで使用可能なサーバー機能を制御する」ため、<Directory>コンテナでこれを表示するのが一般的です。 Optionsをサーバーconfig/VirtualHostで直接定義することは、base defaultの定義にのみ適しています。ただし、サーバー全体を制御するサーバー構成の<Directory />コンテナに設定されたデフォルトを確認するのが一般的です。ここでOptionsディレクティブは、VirtualHostで直接宣言されたOptionsをオーバーライドします。 (「サーバーのデフォルト」は+/-プレフィックスで宣言しないでください。したがって、mergedではありません。)

質問でリンクされているApacheドキュメントは、Apache 2.4を参照しています。 Apache 2.4では、Indexesはデフォルトでは有効になっていません(default:Options FollowSymLinks)。したがって、サーバーでこれを有効にするには、明示的に定義する必要がありますどこか

Apache 2.2では、Indexesはデフォルトで有効になっています(デフォルト:Options All)が、VirtualHostコンテナではオーバーライド可能です(そうでない場合)他の場所で定義されています)。

1
MrWhite

私は過去にこの問題に遭遇しました。厳密に言えば、ヘルプドキュメントに基づいて、options -indexesディレクティブはメインvhostブロックで動作するはずですが、私の経験では、ディレクトリインデックスの無効化を処理するときにこのディレクティブを使用する方法で利用可能なすべての例に基づいて、ディレクティブは<Directory ""></Directory> vhostファイル内のブロック。

2