Как защитить паролем директории приложений Tomcat

Иногда возникает необходимость закрыть доступ к некоторым приложениям Tomcat или отдельным их директориям.
В сервере Tomcat существует механизм подобный .htaccess сервера Apache. Для его реализации потребуется отредактировать файл web.xml того приложения, которе необходимо закрыть паролем. Как правило, файл web.xml располагается в директории WEB-INF.
Например, для того, что бы закрыть паролем доступ к админке exist-db и выполнение запросов XQuery через Sandbox нужно сделать следующее:
Откроем файл на редактирование:

vi /var/lib/tomcat6/webapps/exist/WEB-INF/web.xml

и вставим в него строки в начало файла после строки:

<display-name>eXist XML Database</display-name>

(включить режим вставки в vi нажатием insert):

<!-- !!!!!!!!!!!!!! SECURITY SECTION !!!!!!!!!!!!!!!!! -->
<!-- Define reference to the user database for looking up roles -->
<resource-env-ref>
 <description>Link to the UserDatabase instance from which we request lists of defined role names.</description>
  <resource-env-ref-name>UserDatabase</resource-env-ref-name>
   <resource-env-ref-type>org.apache.catalina.UserDatabase</resource-env-ref-type>
</resource-env-ref>
<!-- Define a Security Constraint on this Application -->
 <security-constraint>
  <web-resource-collection>
   <web-resource-name>exist</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <url-pattern>/sandbox/*</url-pattern>
  </web-resource-collection>
 <auth-constraint>
  <role-name>adminka</role-name>
 </auth-constraint>
 </security-constraint>
 <login-config>
  <auth-method>BASIC</auth-method>
   <realm-name>Adminka exist-db</realm-name>
 </login-config>
 <security-role>
  <description>The role that is required to log in to Exist/admin Application</description>
   <role-name>adminka</role-name>
 </security-role>
<!-- !!!!!!!!!!!!!! END OF SECURITY SECTION !!!!!!!!!!!!!!!!! -->

Сохраняем файл и выходим:

:wq

Что бы указать имя и пароль для созданной роли потребуется отредактировать еще один файл:

vi /etc/tomcat6/tomcat-users.xml

Добавляем в него строки в раздел :

<tomcat-users>
<role rolename="adminka"/>
<user username="admin" password="password" roles="adminka"/>
</tomcat-users>

Сохраняем файл и перезапускаем Tomcat:

/etc/init.d/tomcat6 restart

Для критичных приложений рекомендуется остановить приложение из Tomcat Web Application Manager, а потом уже перезагружать Tomcat.
Так как пароль в tomcat-users.xml хранится в открытом виде рекомендуется установить более строгие ограничения на доступ к файлу:

chown tomcat6:tomcat6 tomcat-users.xml
chmod 0600 tomcat-users.xml

Все, теперь обратившись по ссылке: http://yourhost/exist/admin получим окно с запросом имени и пароля.

Использовались материалы:

1. http://www.jguru.com/faq/view.jsp?EID=1082911

Метки: , . Закладка Постоянная ссылка.

Добавить комментарий

Ваш e-mail не будет опубликован.

*