Назад | Перейти на главную страницу

Как запретить Tomcat доступ к файлу?

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

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

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

Доступ к файлам 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-адрес. В этих случаях вам нужно будет решить эту проблему с помощью файлов конфигурации apache http.

Привет всем системным администраторам и ИТ-специалистам в этом посте. Спасибо за ответы. Многие ответы на мои вопросы были приемлемыми, но этот лучше всего подходит для нашей производственной среды.

Хорошо. Чтобы заблокировать каталог или файл на виртуальном хосте в 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>

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

Слово совета. После исправления разрешений. Измените все пароли и УБЕДИТЕСЬ, что это не кеш Google.

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

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

Вы можете заблокировать каталог в публичном доступе через файл 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, т.е.) означает заблокирован