วิธีการบล็อกการเข้าถึงไฟล์จากการให้บริการโดย Tomcat?


10

เรามีเซิร์ฟเวอร์ Tomcat อยู่สองสามตัวและเราเพิ่งค้นพบว่าบางไฟล์ที่เราไม่ต้องการให้สาธารณะเข้าถึงไฟล์เหล่านั้นได้ เพื่อเป็นตัวอย่าง:

สมมติว่าเรามีโฟลเดอร์ / var / www / html / ที่เราเผยแพร่ผ่าน Tomcat แต่เราไม่ต้องการเปิดเผย /var/www/html/conf/dbinfo.txt ในขณะนี้ผู้คนสามารถไปที่ www.thissite.com/conf/dbinfo.txt และพวกเขาสามารถเห็นสิ่งต่าง ๆ ฉันจะชอบที่จะสามารถปิดกั้นมันจึงไม่แสดง แต่มันช่วยให้มันสามารถอ่านได้โดย Tomcat เอง

ความช่วยเหลือใด ๆ ที่ชื่นชม


ยังมีอีกหลายคำตอบที่ดีมี แต่ที่ง่ายที่สุดและง่ายขึ้นในสภาพแวดล้อมการผลิตของเราเป็นคนหนึ่งที่โพสต์ในวันที่ 24 มิถุนายน 2009
Geo

ขอบคุณสำหรับข้อมูลของคุณฉันหวังว่าจะได้รับคะแนนเสียงก่อนที่จะยอมรับว่าเป็นคำตอบเนื่องจากมีคนอื่น ๆ ที่มีคะแนนโหวตด้วย ขอบคุณ!
Geo

คำตอบ:


5

การเข้าถึงไฟล์ของ 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 เพื่อให้บริการเนื้อหาแบบคงที่สิ่งนี้จะไม่ทำงานเนื่องจาก apache จะให้บริการไฟล์ conf ก่อนที่ Tomcat จะได้รับ URL ในกรณีเหล่านี้คุณจะต้องแก้ปัญหานี้ผ่านไฟล์ http config ของ apache


4

ทำไมไม่จัดเก็บไว้นอกโครงสร้างสารบบเว็บของคุณ? เราไม่เคยใส่อะไรใน / var / www / html / ที่เราไม่ต้องการให้ผู้ใช้ค้นพบ


4

สวัสดีทุกคน SysAdmin และไอทีในโพสต์นี้ ขอบคุณสำหรับคำตอบของคุณ หลายคำตอบสำหรับคำถามของฉันเป็นที่ยอมรับ แต่สิ่งนี้เหมาะที่สุดสำหรับสภาพแวดล้อมการผลิตของเรา

ตกลง. ในการบล็อกไดเรกทอรีหรือไฟล์ภายในโฮสต์เสมือนใน server.xml คุณเพียงแค่ต้องเพิ่มรหัสต่อไปนี้ไปยัง server.xml ในไดเรกทอรี tomcat / conf

ก่อน:

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

2

คำแนะนำ หลังจากที่คุณแก้ไขสิทธิ์ เปลี่ยนรหัสผ่านทั้งหมดและทำให้แน่ใจว่าไม่มีแคชของ Google


ขอบคุณ! ได้รับการแก้ไขแล้ว ฉันแค่อยากรู้ว่ามีการแก้ไขที่ดีกว่าสำหรับมันหรือไม่ หากฉันไม่ได้รับคำตอบฉันจะโพสต์การแก้ไข ขอบคุณอีกครั้ง.
Geo

2

โดยปกติข้อมูลการกำหนดค่า (เช่นข้อมูลการเชื่อมต่อฐานข้อมูล ... ) จะถูกเก็บไว้ในไฟล์ภายใต้โฟลเดอร์ WEB-INF ของไฟล์ WAR ที่ปรับใช้กับ Tomcat ไฟล์ภายใต้ WEB-INF ไม่สามารถเข้าถึงลูกค้าได้


0

มีปัญหาเดียวกัน แต่ฉันไม่สามารถดูว่าคำตอบที่ยอมรับนั้นสามารถใช้งานได้จริง ๆ วาล์วที่ถูกเรียกใช้ที่นี่จะใช้กับเว็บแอปทั้งหมด ไม่ใช่ส่วนหนึ่งของมัน ดังนั้นฉันจึงสมมติว่าในกรณีนี้เมื่อไม่สามารถรับรู้บริบทที่เป็นตัวแทนของ webapp มันก็เพียงแค่ละเว้นคำสั่งและการแสดงความคิดเห็นบางส่วนในไฟล์บันทึก


0

คุณสามารถบล็อกไดเรกทอรีในการเข้าถึงสาธารณะผ่านไฟล์ 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 / ตัวอย่างจากนั้นแสดงเป็นข้อผิดพลาด 404 หน้าเช่น) หมายถึงถูกบล็อก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.