web-dev-qa-db-ja.com

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

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

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

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

10
Geo

この投稿の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>
4
Geo

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構成ファイルを使用してこれを解決する必要があります。

5
sal

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

4
Beep beep

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

2
John Meagher

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

2
Joseph Kern

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

0
Horace

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ページエラーとして表示されます。つまり)ブロックされていることを意味します

0
Linux Sridharan