Tomcat tarafından bir dosyaya erişimin engellenmesi nasıl sağlanır?


10

Birkaç tomcat sunucumuz var ve herkese açık olmasını istemediğimiz bazı dosyaların bu dosyalara erişebildiğini keşfettik. Örneklemek:

Diyelim ki tomcat aracılığıyla yayınladığımız bir / var / www / html / klasörünüz var, ancak /var/www/html/conf/dbinfo.txt dosyasını göstermek istemiyoruz. Şu anda insanlar www.thissite.com/conf/dbinfo.txt adresine gidebiliyor ve bir şeyler görebiliyorlar. Bunu engellemek mümkün olacak, bu yüzden göstermiyor ama tomcat'in kendisi tarafından okunmasına izin veriyor.

Herhangi bir yardım takdir.


Çok sayıda iyi yanıt var, ancak üretim ortamımızda en kolay ve kolay 24 Haziran 2009'da yayınlanan cevap oldu.
Geo

Girdiğiniz için teşekkürler, cevap olarak kabul etmeden önce bazı oylar almayı umuyordum, çünkü oy kullanan başkaları da var. Teşekkürler!
Geo

Yanıtlar:


5

Tomcat'in dosya erişimi WEB-INF / web.xml dosyasının güvenlik kısıtlamaları bölümü tarafından kontrol edilir.

confBu şekilde engelleyebilirsiniz :

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

Statik içerik sunmak için apache kullanıyorsanız, tomcat URL'yi almadan önce apache'nin conf dosyalarını sunacağı için bu çalışmaz. Bu durumlarda, bunu apache'nin http yapılandırma dosyaları aracılığıyla çözmeniz gerekir.


4

Neden web dizini yapınızın dışında saklamıyorsunuz? / Var / www / html / altına hiçbir zaman bir kullanıcının keşfetmesini istemeyeceğimiz hiçbir şey koymayız.


4

Bu yayındaki tüm SysAdmin ve BT Çalışanlarına merhaba. Yanıtlarınız için teşekkürler. Sorularıma verilen cevapların çoğu kabul edilebilirdi ancak bu bizim üretim ortamımıza en uygun olanıydı.

Tamam. Bir dizini veya server.xml dosyasındaki bir sanal ana makine içindeki bir dosyayı engellemek için tomcat / conf dizinindeki server.xml dosyasına aşağıdaki kodu eklemeniz yeterlidir.

Önce:

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

Sonra:

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

Yani sorunun cevabı aşağıdaki satırları eklemektir:

    <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

Tavsiye sözü. İzinleri düzelttikten sonra. Tüm şifreleri değiştirin ve bir Google önbelleği olmadığından emin olun.


Teşekkürler! düzeltildi. Sadece bunun için daha iyi bir düzeltme olup olmadığını bilmek istiyorum. Cevap alamazsam düzeltmeyi gönderirim. Tekrar teşekkürler.
Geo

2

Normalde yapılandırma bilgileri (veritabanı bağlantı bilgileri gibi ...) Tomcat'e dağıtılan WAR dosyasının WEB-INF klasörü altındaki dosyalarda saklanır. WEB-INF altındaki dosyalara istemciler erişemez.


0

Aynı sorunu yaşıyorum, ancak kabul edilen cevabın gerçekten nasıl çalıştığını göremiyorum. Burada çağrılan vana ENTIRE webapp için geçerlidir. Bunun bir parçası değil. Bu yüzden, bir kez bağlamı bir web uygulamasını temsil ettiği olarak tanıyamazsa, sadece yönergeyi görmezden geldiğini ve günlük dosyasına bazı yorumlar attığını varsayıyorum.


0

Server.xml dosyası aracılığıyla genel erişimdeki dizini engelleyebilirsiniz

Bu satırları bu server.xml dosyasına ekleyin

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

o zaman http: // localhost: 8080 / orneklerine erişin o zaman 404 sayfa hatası olarak gösterilir, yani) engellenmiş demektir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.