Jak zablokować dostęp do pliku przed obsługiwaniem przez Tomcat?

10

Mamy kilka serwerów tomcat i właśnie odkryliśmy, że niektóre pliki, których nie chcemy, aby były publiczne, mają dostęp do tych plików. Dla przykładu:

Załóżmy, że mamy folder / var / www / html /, który publikujemy za pośrednictwem tomcat, ale nie chcemy ujawniać /var/www/html/conf/dbinfo.txt. W tej chwili ludzie mogą wejść na stronę www.thissite.com/conf/dbinfo.txt i mogą zobaczyć różne rzeczy. Chciałbym móc go zablokować, więc go nie pokazuje, ale pozwala go odczytać sam tomcat.

Każda pomoc jest mile widziana.

Geo
źródło
Istnieje wiele dobrych odpowiedzi, ale najłatwiejszym i łatwiejszym w naszym środowisku produkcyjnym była ta opublikowana 24 czerwca 2009 r.
Geo
Dziękuję za pański wkład. Miałem nadzieję, że otrzymam kilka głosów, zanim zaakceptuję je jako odpowiedź, ponieważ są też inni z głosami. Dzięki!
Geo

Odpowiedzi:

5

Dostęp do plików Tomcat jest kontrolowany przez sekcję ograniczeń bezpieczeństwa WEB-INF / web.xml.

Możesz zablokować w conften sposób:

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

Jeśli używasz apache do dostarczania zawartości statycznej, to nie zadziała, ponieważ apache będzie obsługiwał pliki conf, zanim tomcat otrzyma adres URL. W takich przypadkach należy rozwiązać ten problem za pomocą plików konfiguracyjnych http apache.

sal
źródło
4

Dlaczego nie przechowywać go poza strukturą katalogu? Nigdy nie umieszczamy niczego w / var / www / html /, których nie chcielibyśmy, aby użytkownik odkrył.

Sygnał dźwiękowy
źródło
4

Witam wszystkich pracowników SysAdmin i IT w tym poście. Dziękuję za twoje odpowiedzi. Wiele odpowiedzi na moje pytania było do zaakceptowania, ale ta najlepiej pasowała do naszego środowiska produkcyjnego.

Ok. Aby zablokować katalog lub plik na wirtualnym hoście w server.xml, wystarczy dodać następujący kod do server.xml w katalogu tomcat / conf.

Przed:

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

Po:

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

Tak więc odpowiedzią na pytanie jest dodanie następujących wierszy:

    <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
źródło
2

Słowo rady. Po naprawieniu uprawnień. Zmień wszystkie hasła i UPEWNIJ SIĘ, że nie ma go w pamięci podręcznej Google.

Joseph Kern
źródło
Dzięki! jest teraz naprawiony. Chcę tylko wiedzieć, czy jest na to lepszy sposób. Jeśli nie otrzymam odpowiedzi, opublikuję poprawkę. Dzięki jeszcze raz.
Geo,
2

Zwykle informacje o konfiguracji (takie jak informacje o połączeniu z bazą danych, ...) są przechowywane w plikach w folderze WEB-INF pliku WAR wdrożonego w Tomcat. Pliki w WEB-INF nie są dostępne dla klientów.

John Meagher
źródło
0

Mam ten sam problem, ale nie widzę, jak zaakceptowana odpowiedź może naprawdę działać. Przywołany tutaj zawór dotyczy CAŁEJ aplikacji internetowej. Nie częścią tego. Zakładam więc, że w tym przypadku, gdy nie może rozpoznać kontekstu reprezentującego aplikację internetową, po prostu ignoruje dyrektywę i wrzuca pewne komentarze do pliku dziennika.


źródło
0

Możesz zablokować katalog w publicznym dostępie poprzez plik server.xml

Dodaj te linie do tego pliku 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>

następnie uzyskaj dostęp do tego http: // localhost: 8080 / przykładów, a następnie wyświetli się jako błąd strony 404, tzn. oznacza zablokowany

Linux Sridharan
źródło