Wie kann verhindert werden, dass der Zugriff auf eine Datei von Tomcat bereitgestellt wird?

10

Wir haben einige Tomcat-Server und haben gerade festgestellt, dass einige Dateien, die nicht öffentlich zugänglich sein sollen, Zugriff auf diese Dateien haben. Veranschaulichen:

Angenommen, wir haben einen Ordner / var / www / html /, den wir über tomcat veröffentlichen, aber wir möchten /var/www/html/conf/dbinfo.txt nicht verfügbar machen. In diesem Moment können die Leute auf www.thissite.com/conf/dbinfo.txt gehen und sie können Dinge sehen. Ich möchte es blockieren können, zeigt es also nicht an, aber es ermöglicht es, dass es von Tomcat selbst gelesen wird.

Jede Hilfe wird geschätzt.

Geo
quelle
Es gibt viele gute Antworten, aber die einfachste und einfachste in unserer Produktionsumgebung war die am 24. Juni 2009 veröffentlichte.
Geo
Vielen Dank für Ihre Eingabe. Ich hatte gehofft, einige Stimmen zu erhalten, bevor ich sie als Antwort akzeptierte, da es auch andere mit Stimmen gibt. Vielen Dank!
Geo

Antworten:

5

Der Dateizugriff von Tomcat wird durch den Abschnitt mit den Sicherheitsbeschränkungen in WEB-INF / web.xml gesteuert.

Sie können folgendermaßen blockieren 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>

Wenn Sie Apache verwenden, um statischen Inhalt bereitzustellen, funktioniert dies nicht, da Apache die conf-Dateien bereitstellt, bevor Tomcat die URL erhält. In diesen Fällen müssten Sie dies über die http-Konfigurationsdateien von Apache lösen.

sal
quelle
4

Warum speichern Sie es nicht außerhalb Ihrer Webverzeichnisstruktur? Wir haben niemals etwas unter / var / www / html / abgelegt, das ein Benutzer nicht entdecken soll.

Piep Piep
quelle
4

Hallo an alle SysAdmin- und IT-Mitarbeiter in diesem Beitrag. Vielen Dank für Ihre Antworten. Viele der Antworten auf meine Fragen waren akzeptabel, aber diese war am besten für unsere Produktionsumgebung geeignet.

In Ordnung. Um ein Verzeichnis oder eine Datei innerhalb eines virtuellen Hosts in server.xml zu blockieren, müssen Sie nur den folgenden Code zur server.xml im Verzeichnis tomcat / conf hinzufügen.

Vor:

  <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>

Nach:

  <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>

Die Antwort auf die Frage lautet also: Fügen Sie die folgenden Zeilen hinzu:

    <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>
Geo
quelle
2

Ein Rat. Nachdem Sie die Berechtigungen behoben haben. Ändern Sie alle Passwörter und stellen Sie sicher, dass kein Google-Cache vorhanden ist.

Joseph Kern
quelle
Vielen Dank! ist jetzt behoben. Ich möchte nur wissen, ob es da draußen eine bessere Lösung dafür gibt. Wenn ich keine Antworten bekomme, werde ich das Update veröffentlichen. Danke noch einmal.
Geo
2

Normalerweise werden Konfigurationsinformationen (wie Datenbankverbindungsinformationen, ...) in Dateien im Ordner WEB-INF der auf Tomcat bereitgestellten WAR-Datei gespeichert. Dateien unter WEB-INF sind für Clients nicht zugänglich.

John Meagher
quelle
0

Ich habe das gleiche Problem, aber ich kann nicht sehen, wie die akzeptierte Antwort wirklich funktionieren kann. Das hier aufgerufene Ventil gilt für die GESAMTE Webanwendung. Nicht Teil davon. Ich gehe also davon aus, dass in diesem Fall, wenn der Kontext nicht als eine Webanwendung dargestellt wird, die Anweisung einfach ignoriert und einige Kommentare in die Protokolldatei geworfen werden.


quelle
0

Sie können das Verzeichnis für den öffentlichen Zugriff über die Datei server.xml blockieren

Fügen Sie diese Zeilen zu dieser Datei server.xml hinzu

    <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>

Greifen Sie dann auf das http: // localhost: 8080 / examples zu, dann wird es als 404-Seitenfehler angezeigt, dh) bedeutet blockiert

Linux Sridharan
quelle