Tomcatによるファイルへのアクセスをブロックするにはどうすればよいですか?


10

いくつかのTomcatサーバーがあり、公開したくない一部のファイルがそれらのファイルにアクセスできないことを発見しました。例証するには:

Tomcatを通じて公開しているフォルダ/ var / www / html /があるが、/ var / www / html / conf / dbinfo.txtを公開したくないとします。この時点で、人々はwww.thissite.com/conf/dbinfo.txtにアクセスでき、物事を見ることができます。私はそれをブロックできるようにしたいのでそれを示しませんが、それはそれがtomcat自体によって読まれるのを許します。

どんな助けでもありがたいです。


そこ良い答えの多くがありますが、当社の生産環境における最も簡単かつ容易では2009年の6月24日に掲載した1
ジオ

ご意見をお寄せいただきありがとうございます。投票のある方もいらっしゃるため、回答として承認する前に投票をお願いします。ありがとう!
ジオ

回答:


5

Tomcatのファイルアクセスは、WEB-INF / web.xmlのセキュリティ制約セクションによって制御されます。

confこの方法でブロックできます:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTP-Protected-Resource-1</web-resource-name>
        <description>Description here</description>
        <url-pattern>/conf/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>NOSOUPFORYOU</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>DEFAULT</auth-method>
    <realm-name>NOACCESSFORANYONE</realm-name>
</login-config>
<security-role>
    <role-name>NOSOUPFORYOU</role-name>
</security-role>

静的コンテンツを提供するためにApacheを使用している場合、tomcatがURLを取得する前にApacheがconfファイルを提供するため、これは機能しません。そのような場合は、Apacheのhttp構成ファイルを使用してこれを解決する必要があります。


4

それをあなたのウェブディレクトリ構造の外に保存しませんか?/ var / www / html /の下には、ユーザーに発見してほしくないものを入れません。


4

この投稿のSysAdminとITワーカーの皆さん、こんにちは。ご回答ありがとうございます。私の質問に対する回答の多くは受け入れられましたが、これは私たちの実稼働環境に最も適していました。

OK。server.xmlの仮想ホスト内のディレクトリまたはファイルをブロックするには、tomcat / confディレクトリのserver.xmlに次のコードを追加するだけです。

前:

  <Host name="www.customer.com" appBase="/usr/share/app4_0b/tomcat/webapps/" autoDeploy="false">
    <Context path="" docBase="./customer" />

    <Valapp className="org.apache.catalina.valapps.FastCommonAccessLogValapp"
           directory="weblogs/customer"
           prefix="www_customer_com_"
           suffix=".txt"
           pattern="combined"
           resolappHosts="false" />
  </Host>

後:

  <Host name="www.customer.com" appBase="/usr/share/app4_0b/tomcat/webapps/" autoDeploy="false">
    <Context path="" docBase="./customer" />

    <Context path="/app/xv/~customer/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
    <Context path="/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

    <Valapp className="org.apache.catalina.valapps.FastCommonAccessLogValapp"
           directory="weblogs/customer"
           prefix="www_customer_com_"
           suffix=".txt"
           pattern="combined"
           resolappHosts="false" />
  </Host>

したがって、質問への答えは次の行を追加することです:

    <Context path="/app/xv/~customer/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
    <Context path="/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

2

アドバイスの言葉。権限を修正した後。すべてのパスワードを変更し、そのgoogleキャッシュがないことを確認してください。


ありがとう!現在修正されています。そこにもっと良い修正があるかどうか知りたいだけです。返信がない場合は、修正を投稿します。再度、感謝します。
ジオジュン

2

通常、構成情報(データベース接続情報など)は、TomcatにデプロイされたWARファイルのWEB-INFフォルダーの下のファイルに格納されます。WEB-INFの下のファイルはクライアントからアクセスできません。


0

同じ問題がありますが、受け入れられた回答が実際にどのように機能するのかわかりません。ここで呼び出されるバルブは、Webアプリケーション全体に適用されます。その一部ではありません。したがって、この場合、コンテキストがWebアプリケーションを表すものとして認識できなくなると、それは単にディレクティブを無視し、ログファイルにコメントをスローすることになると想定しています。


0

server.xmlファイルを介して、パブリックアクセスでディレクトリをブロックできます。

この行をserver.xmlファイルに追加します

    <Context path="/opt/tomcat7/webapps/examples" docBase="" >
    <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

    <Context path="/examples" docBase="" >
    <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

次に、そのhttp:// localhost:8080 / examplesにアクセスすると、404ページエラーとして表示されます。つまり、ブロックされていることを意味します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.