У нас есть несколько серверов 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, т.е.) означает заблокирован