Как заблокировать доступ к файлу от обслуживания Tomcat?

10

У нас есть несколько серверов tomcat, и мы только что обнаружили, что некоторые файлы, которые мы не хотим, чтобы общедоступные имели доступ к этим файлам. В качестве примера:

Допустим, у нас есть папка / var / www / html /, которую мы публикуем через tomcat, но мы не хотим показывать /var/www/html/conf/dbinfo.txt. В этот момент люди могут перейти на www.thissite.com/conf/dbinfo.txt, и они могут видеть вещи. Я хотел бы иметь возможность блокировать его, поэтому не показывает его, но он позволяет читать его самому tomcat.

Любая помощь приветствуется.

Geo
источник
Есть много хороших ответов, но самый простой и легкий в нашей производственной среде был тот, который был опубликован 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-файлов конфигурации Apache.

Сэл
источник
4

Почему бы не хранить его вне структуры веб-каталогов? Мы никогда не помещаем ничего в / var / www / html /, что бы мы не хотели, чтобы пользователь обнаружил.

Beep Beep
источник
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>
Geo
источник
2

Слово совета. После того, как вы исправите разрешения. Измените все пароли и убедитесь, что в нем нет кеша Google.

Джозеф Керн
источник
Спасибо! исправлено сейчас. Я просто хочу знать, есть ли лучшее решение для этого там. Если я не получу ответы, я опубликую исправление. Еще раз спасибо.
Geo
2

Обычно информация о конфигурации (например, информация о подключении к базе данных, ...) хранится в файлах в папке WEB-INF файла WAR, развернутого в Tomcat. Файлы под WEB-INF недоступны для клиентов.

Джон Мигер
источник
0

Возникла та же проблема, но я не понимаю, как принятый ответ действительно может работать. Вызванный здесь клапан относится ко всему веб-приложению. Не часть этого. Поэтому я предполагаю, что в этом случае, когда он не может распознать контекст как представление веб-приложения, он просто игнорирует директиву и добавляет некоторые комментарии в файл журнала.


источник
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 страницы, т.е.

Linux Sridharan
источник