Tomcat에서 파일에 대한 액세스를 차단하는 방법은 무엇입니까?


10

우리는 몇 개의 바람둥이 서버를 가지고 있으며 공개적으로 원하지 않는 일부 파일이 해당 파일에 액세스 할 수 있음을 발견했습니다. 예를 들면 다음과 같습니다.

Tomcat을 통해 게시하는 / var / www / html / 폴더가 있지만 /var/www/html/conf/dbinfo.txt를 노출하고 싶지는 않습니다. 현재 사람들은 www.thissite.com/conf/dbinfo.txt를 방문하여 볼 수 있습니다. 차단 할 수 있기를 원하므로 표시하지 않지만 바람둥이 자체로 읽을 수 있습니다.

도움을 주시면 감사하겠습니다.


좋은 답변이 많이 있지만 프로덕션 환경에서 가장 쉽고 쉬운 방법은 2009 년 6 월 24 일에 게시 된 것입니다.
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>

아파치를 사용하여 정적 컨텐츠를 제공하는 경우 Tomcat이 URL을 가져 오기 전에 아파치가 conf 파일을 제공하므로 작동하지 않습니다. 이 경우 아파치의 http 설정 파일을 통해이 문제를 해결해야합니다.


4

왜 웹 디렉토리 구조 외부에 저장하지 않습니까? 우리는 / var / www / html / 아래에 사용자가 발견하고 싶지 않은 것을 넣지 않습니다.


4

이 게시물의 모든 SysAdmin 및 IT 작업자에게 안녕하세요. 답변 주셔서 감사합니다. 내 질문에 대한 많은 답변이 수용 가능했지만 이것은 프로덕션 환경에 가장 적합했습니다.

확인. server.xml의 가상 호스트에서 디렉토리 또는 파일을 차단하려면 tomcat / conf 디렉토리의 server.xml에 다음 코드를 추가하면됩니다.

전에:

  <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

일반적으로 구성 정보 (예 : 데이터베이스 연결 정보 등)는 Tomcat에 배포 된 WAR 파일의 WEB-INF 폴더 아래 파일에 저장됩니다. WEB-INF 아래의 파일은 클라이언트가 액세스 할 수 없습니다.


0

같은 문제가 있지만 허용되는 답변이 실제로 어떻게 작동하는지 알 수 없습니다. 여기에서 호출 된 밸브는 ENTIRE 웹앱에 적용됩니다. 그것의 일부가 아닙니다. 따라서이 경우 웹 응용 프로그램을 나타내는 것으로 컨텍스트를 인식 할 수 없으면 지시문을 무시하고 로그 파일에 주석을 던지는 것입니다.


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 / examples에 액세스 하면 404 페이지 오류로 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.