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.


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.


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


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>

2

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


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.