Làm cách nào để chặn quyền truy cập vào tệp được Tomcat phục vụ?


10

Chúng tôi có một vài máy chủ tomcat và chúng tôi vừa phát hiện ra rằng một số tệp mà chúng tôi không muốn công khai có quyền truy cập vào các tệp đó. Để làm gương

Giả sử chúng tôi có một thư mục / var / www / html / mà chúng tôi đang xuất bản thông qua tomcat, nhưng chúng tôi không muốn tiết lộ /var/www/html/conf/dbinfo.txt. Tại thời điểm này, mọi người có thể truy cập www.thissite.com/conf/dbinfo.txt và họ có thể thấy mọi thứ. Tôi muốn có thể chặn nó để không hiển thị nhưng nó cho phép nó được đọc bởi chính tomcat.

Bất kỳ trợ giúp được đánh giá cao.


Có rất nhiều câu trả lời hay, nhưng dễ nhất và dễ dàng hơn trong môi trường sản xuất của chúng tôi là câu trả lời được đăng vào ngày 24 tháng 6 năm 2009.
Geo

Cảm ơn cho đầu vào của bạn, tôi đã hy vọng nhận được một số phiếu trước khi chấp nhận nó như một câu trả lời, vì cũng có những người khác có phiếu bầu. Cảm ơn!
Geo

Câu trả lời:


5

Quyền truy cập tệp của Tomcat được kiểm soát bởi phần ràng buộc bảo mật của WEB-INF / web.xml.

Bạn có thể chặn conftheo cách này:

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

Nếu bạn đang sử dụng apache để phục vụ nội dung tĩnh, điều này sẽ không hoạt động vì apache sẽ phục vụ các tệp conf trước khi tomcat nhận được URL. Trong những trường hợp đó, bạn sẽ cần giải quyết vấn đề này thông qua các tệp cấu hình http của apache.


4

Tại sao không lưu trữ bên ngoài cấu trúc thư mục web của bạn? Chúng tôi không bao giờ đặt bất cứ điều gì dưới / var / www / html / mà chúng tôi sẽ không muốn người dùng khám phá.


4

Xin chào tất cả các nhân viên SysAdmin và IT trong bài viết này. Cảm ơn câu trả lời của bạn. Nhiều câu trả lời cho câu hỏi của tôi đã được chấp nhận nhưng câu trả lời này phù hợp nhất với môi trường sản xuất của chúng tôi.

Đồng ý. Để chặn một thư mục hoặc một tệp trong một máy chủ ảo trong server.xml, bạn chỉ cần thêm đoạn mã sau vào server.xml trong thư mục tomcat / conf.

Trước:

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

Sau:

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

Vì vậy, câu trả lời cho câu hỏi là thêm các dòng sau:

    <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

Lời khuyên. Sau khi bạn sửa quyền. Thay đổi tất cả mật khẩu và làm cho SURE không có bộ nhớ cache của google.


Cảm ơn! được sửa chữa ngay bây giờ. Tôi chỉ muốn biết nếu có một sửa chữa tốt hơn cho nó ra khỏi đó. Nếu tôi không nhận được trả lời, tôi sẽ đăng bản sửa lỗi. Cảm ơn một lần nữa.
Geo

2

Thông thường thông tin cấu hình (như thông tin kết nối cơ sở dữ liệu, ...) được lưu trữ trong các tệp trong thư mục WEB-INF của tệp WAR được triển khai cho Tomcat. Không thể truy cập các tệp trong WEB-INF cho khách hàng.


0

Có cùng một vấn đề, nhưng tôi không thể thấy câu trả lời được chấp nhận thực sự có thể hoạt động như thế nào. Van được gọi ở đây áp dụng cho ứng dụng web ENTIRE. Không phải là một phần của nó. Vì vậy, tôi giả sử rằng trong trường hợp này một khi nó không thể nhận ra bối cảnh là đại diện cho một ứng dụng web, thì đơn giản là bạn bỏ qua chỉ thị và ném một số nhận xét vào tệp nhật ký.


0

Bạn có thể chặn thư mục trong truy cập công cộng thông qua tệp server.xml

Thêm dòng này vào tệp 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>

sau đó truy cập http: // localhost: 8080 / ví dụ sau đó nó hiển thị dưới dạng lỗi trang 404, nghĩa là) có nghĩa là bị chặn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.