Tomcat Realm manager и JMX MBeans#
Realm — это «база данных» имен пользователей и паролей, которые идентифицируют пользователей веб-приложения (или набора веб-приложений), а также перечень ролей, связанных с каждым пользователем. Каждый из пользователей может иметь любое количество ролей.
Tomcat определяет Java-интерфейс (org.apache.catalina.Realm), который реализуется через «подключаемые» компоненты для установки соединения и содержит реализации Realm для поддержки подключения к различным источникам информации об аутентификации:
JNDIRealm- позволяет интегрировать аутентификацию и авторизацию пользователей с использованием данных, хранящихся в LDAP-каталоге или других каталогов, поддерживающих протокол LDAP.JDBCRealm— позволяет интегрировать аутентификацию и авторизацию пользователей с использованием данных, хранящихся в реляционной базе данных. Использует JDBC (Java Database Connectivity) для подключения к базе данных и выполнения SQL-запросов для проверки учетных данных и получения ролей пользователей.DataSourceRealm- позволяет интегрировать аутентификацию и авторизацию пользователей с использованием данных, хранящихся в реляционной базе данных. Использует JNDI (Java Naming and Directory Interface) для получения подключения к базе данных черезDataSource.UserDatabaseRealm— позволяет управлять аутентификацией и авторизацией пользователей с использованием данных, хранящихся в XML-файле. Не требует подключения к внешним базам данных или каталогам.JAASRealm— позволяет управлять аутентификацией и авторизацией пользователей с использованием JAAS (Java Authentication & Authorization Service).MemoryRealm- позволяет управлять аутентификацией и авторизацией пользователей с использованием данных, хранящихся в оперативной памяти. Данные о пользователях и ролях загружаются из XML-файла при запуске и хранятся на протяжении всей работы сервера.CombinedRealm- позволяет управлять аутентификацией и авторизацией пользователей с использованием несколькихRealm.LockOutRealm- является дополнением дляCombinedRealm. Позволяет реализовать отключение пользователя при большом количестве неудачных попыток аутентификации за определенный период времени.
Ведение журнала в Realm#
Ведение журнала в Realm позволяет отслеживать события, связанные с аутентификацией: успешные и неудачные попытки входа, ошибки доступа и прочие действия. Это полезно для мониторинга безопасности, диагностики проблем и аудита.
Tomcat использует JULI — Apache Commons Logging, который связан с использованием фреймворка java.util.logging, что гарантирует независимое ведение журнала Tomcat и веб-приложений.
Типы событий, доступные для записи в журнале:
Удачная аутентификация;
Неудачная аутентификация;
Ошибки авторизации;
Ошибки
Realm;Другие события.
JULI включен по умолчанию и поддерживает конфигурацию для каждого загрузчика классов в дополнение к обычной глобальной конфигурации java.util.logging. Это означает, что ведение журнала можно настроить на следующих уровнях:
SEVERE- критические ошибки.WARNING- предупреждения.INFO- информационные сообщения.FINE- детальные сообщения.FINER- более детальные сообщения.FINEST- максимально детализированные сообщения.
Шифрование паролей в Tomcat Realm manager#
В Tomcat пароли пользователей, хранящиеся в различных реализациях Realm, могут быть зашифрованы с использованием алгоритмов хеширования. Tomcat поддерживает несколько алгоритмов хеширования: MD5, SHA-1, SHA-256, SHA-512 и другие.
По умолчанию пароли пользователей хранятся в открытом виде.
Пароли пользователей преобразуются в хеш с использованием одного из представленных выше алгоритмов. Хешированный пароль сохраняется в базе данных, XML-файле или другом хранилище. При аутентификации введенный пользователем пароль хешируется и сравнивается с сохраненным хешем.
Настройка JMX MBeans#
Tomcat использует технологию JMX MBeans для реализации оптимального управления своими компонентами. Описания JMX MBeans для Catalina находятся в файле mbeans-descriptors.xml. При создании пользовательских компонентов нужно добавить описания MBeans, чтобы избежать исключения ManagedBean is not found.
Описания MBeans для пользовательских компонентов добавляются в файл mbeans-descriptors.xml. Файл должен находиться в том же пакете, что и классы, которые он описывает. Синтаксис файла определяется DTD-файлом.
Пример записи для пользовательского Realm аутентификации LDAP может выглядеть следующим образом:
<mbean name="LDAPRealm"
className="org.apache.catalina.mbeans.ClassNameMBean"
description="Custom LDAPRealm"
domain="Catalina"
group="Realm"
type="com.myfirm.mypackage.LDAPRealm">
<attribute name="className"
description="Fully qualified class name of the managed object"
type="java.lang.String"
writeable="false"/>
<attribute name="debug"
description="The debugging detail level for this component"
type="int"/>
.
.
.
</mbean>