JAAS

Entaxy ION предоставляет современную и гибкую систему безопасности с использованием JAAS (Java Authentication and Authorization Service), который поддерживает управление несколькими реалмами.

Realms (реалмы)

Реалм включает в себя определение модулей входа, используемых для аутентификации и/или авторизации в этом реалме. Модули входа определяют аутентификацию и авторизацию для данного реалма.

karaf jaas

Предустановленный 'realm karaf' по умолчанию включает в себя пять модулей:

  1. karaf-properties

  2. karaf-publickey

  3. karaf-file-audit

  4. karaf-log-audit

  5. karaf-eventadminaudit

    karaf jaas

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

    karaf move

Доступно удаление существующих или добавление дополнительных модулей безопасности. Полный перечень доступных модулей безопасности.

По умолчанию реалм Karaf настроен на использование локальных файлов для хранения данных авторизации. Для работы в кластере необходимо использовать распределенное хранилище, чтобы обеспечить синхронизацию данных между узлами. Например, можно добавить логин-модуль resource-jaas-login-module. В противном случае данные будут сохраняться только на одном узле, что может привести к несогласованности данных в кластере.

Создание реалма

Чтобы создать новый реалм, перейдите в раздел 'Безопасность' - 'jaas' и нажмите кнопку 'Add Jaas Realm'.

karaf addjaas

В появившемся окне вы увидите следующие параметры:

karaf addrealm
  1. General:

    1. *Factory: Идентификатор используемой фабрики. Обязательный параметр с предустановленным значением - jaas-realm.

    2. *Realm Name: Название реалма.

    3. Display Name: Отображаемое имя реалма. Необязательное поле.

    4. *Rank: -1 (Порядок, в котором реалмы, имеющие одинаковые имена, будут участвовать в процессе аутентификации и авторизации (отрицательное значение используется по умолчанию))

  2. Modules:

    1. Добавление Login Module.

Модули безопасности

karaf addloginmodule
  1. eventadmin-audit-jaas-login-module

    1. Этот модуль отслеживает попытки аутентификации с использованием службы OSGi Event Admin.

  2. file-audit-jaas-login-module

    1. Этот модуль записывает информацию о попытках аутентификации непосредственно в указанный вами файл. Он не использует инфраструктуру журналирования.

  3. jdbc-jaas-login-module

    1. Реализует аутентификацию и авторизацию, используя базу данных JDBC.

    2. Настройки JDBC (URL, пользователь, пароль) определяются при конфигурации модуля.

    3. Аутентификация проходит по имени пользователя и паролю, а авторизация возвращает роли, связанные с пользователем.

  4. ldap-jaas-login-module

    1. Обеспечивает аутентификацию и авторизацию через протокол LDAP/S (Lightweight Directory Access Protocol).

    2. Настройки включают адрес машины с LDAP/S-сервером, порт, имя пользователя и пароль.

    3. Аутентификация осуществляется по имени пользователя и паролю, а авторизация возвращает роли, связанные с пользователем.
      Подробнее: Создание и настройка LDAP/LDAPS модуля

  5. log-audit-jaas-login-module

    1. Записывает информацию о попытках аутентификации в лог-файлы, настроенные в инфраструктуре Pax logging.
      Подробнее: Настройка аудита безопасности

  6. properties-jaas-login-module

    1. Хранит данные пользователей в формате плоского файла. Пароли могут быть опционально зашифрованы алгоритмом хеширования.

    2. Данные пользователей можно редактировать напрямую текстовым редактором или управлять с использованием консольных команд jaas:*.

    3. Karaf по умолчанию использует этот модуль и хранит данные пользователей в файле /etc/users.properties.

    4. Аутентифицирует учетные записи с использованием имени пользователя и пароля, возвращая список связанных с аутентифицированным пользователем ролей.
      Подробнее: Настройка модуля karaf-properties

  7. publickey-jaas-login-module

    1. Реализует аутентификацию с использованием открытых ключей.

    2. Ключи пользователей хранятся в системе.

    3. Аутентификация осуществляется по предоставленному открытому ключу.
      Подробнее: Настройка модуля karaf-publickey

  8. resource-jaas-login-module

    1. Аутентифицирует учетные записи с использованием имени пользователя и пароля, возвращая список связанных с аутентифицированным пользователем ролей.

    2. По умолчанию данные пользователей хранятся в файле entaxy-file-internal:.security/users.properties

    3. Для использования в кластерной среде модуль можно настроить на работу с распределенным хранилищем, чтобы обеспечить синхронизацию данных пользователей между узлами.

Связь между пользователем и профилем в Entaxy

Для установки связи между пользователем и профилем в системе Entaxy используется обозначение вида PROFILE_<имя профиля>.

Создание пользователя в Entaxy

При создании пользователя в Entaxy и его ассоциации с определенным профилем, пользователю автоматически присваивается роль с соответствующим обозначением.

Например:

В системе существует профиль с именем system1c.
При создании пользователя, ассоциированного с этим профилем, ему будет автоматически присвоена роль PROFILE_system1c. Эта взаимосвязь между именем пользователя и профилем системы отображается в конфигурационном файле users.properties.

  • В модуле karaf.properties мы создали пользователя с именем test и привязали его к профилю system1c.

test system1 properties
  • В users.properties мы увидим запись вида:

test = test,PROFILE_system1c

users properties profilesystem1c

Это означает, что пользователь test связан с профилем system1c через соответствующую роль PROFILE_system1c.

Создание пользователя в LDAP-сервере

Аналогичным образом происходит связка пользователя в LDAP-сервере с профилем системы в Entaxy.

  1. В LDAP-сервере создайте пользователя вида PROFILE_<имя профиля> и группу, в которую будет входить данный пользователь.

  2. Настройте LDAP модуль в Entaxy с учетом параметров LDAP-сервера.

    • Эта роль PROFILE_<имя профиля> будет использоваться для ассоциации пользователей с профилями в системе Entaxy.

    • Если пользователь PROFILE_<имя профиля> не входит в группу, обеспечивающую необходимый доступ, то можно в настройках маппинга LDAP указать на нее маппинг, используя роль, обладающую соответствующими правами.

    mapping

Создание и настройка LDAP/LDAPS модуля

Ниже приведены шаги по созданию и настройке LDAP(LDAPS)-модуля для интеграции с системой управления пользователями. Этот модуль совместим с LDAP(LDAPS)-системами, такими как Active Directory и OpenLDAP.

В разделе "Безопасность", перейдите в подраздел "jaas", выберите необходимый реалм, и на вкладке "Properties" перейдите в раздел "modules". В открывшейся вкладке выполните следующие шаги:

  • Нажмите на кнопку "Add Login Module".

    realm addmodule
  • В открывшемся окне добавьте LDAP модуль выбрав "ldap-jaas-login-module".

    ldap jaas module
  • Нажмите кнопку "Next" для продолжения.

  • В открывшемся окне вы увидите перечень параметров:

    1. General

      karaf ldap general
      1. Factory: Идентификатор фабрики для создания LDAP-модуля;

      2. Display Name: Отображаемое имя модуля. Необязательное поле;

      3. Classifier: Классификатор (по умолчанию 'main');

      4. Options: Тип модуля (по умолчанию 'optional');

      5. Use Detailed Login Exceptions: Предоставление подробных сведений об исключениях при входе в систему.

    2. Connection

      connection ldap
      connection ldaps
      1. Connection Protocol: ldap/ldaps;

      2. Connection Host:

        1. LDAP: Адрес сервера управления пользователями;

        2. LDAPS: Доменное имя сервера с использованием LDAPS;

      3. Connection Port: Порт сервера управления пользователями;

      4. Username: Имя учетной записи;

      5. Password: Пароль учетной записи;

      6. Module Authentication: Аутентификационный модуль (по умолчанию 'simple').

        Примеры:

      7. Active Directory (AD):

        • Connection Host: Адрес доменного контроллера AD;

        • Connection Port: Порт AD (обычно равен 389 для LDAP-соединений и 636 для LDAPS-соединений);

        • Username: Имя пользователя в формате user@domain.com;

        • Password: Пароль пользователя.

      8. OpenLDAP:

        • Connection Host: Адрес сервера OpenLDAP;

        • Connection Port: Порт OpenLDAP (обычно равен 389 для LDAP-соединений и 636 для LDAPS-соединений);

        • Username: Имя пользователя, обычно в формате cn=user,ou=users,dc=example,dc=com;

        • Password: Пароль пользователя.

    3. LookUp

      karaf ldap lookup
      1. User base DN: Путь к организационному подразделению, в котором находятся пользователи;

      2. Role base DN: Путь к организационному подразделению, в котором находятся роли;

      3. User filter: Пользовательский фильтр;

      4. Role filter: Фильтр ролей;

      5. Role mapping: Определение соответствия ролей. Роли (группы) LDAP маппятся на роли karaf (Формат: ldapRole1=karafRole1,karafRole2;ldapRole2=karafRole3,karafRole4.)

        Примеры:

      6. Active Directory (AD):

        • User base DN: OU=Users,DC=example,DC=com

        • Role base DN: OU=Roles,DC=example,DC=com

        • User filter: (sAMAccountName=%u)

        • Role filter: (member=%fqdn)

      7. OpenLDAP:

        • User base DN: ou=Users,dc=example,dc=com

        • Role base DN: ou=Roles,dc=example,dc=com

        • User filter: (uid=%u)

        • Role filter: (roleOccupant=%fqdn)

    4. SSL
      Настройка SSL параметров.

    5. Others/Encryption/Jaspyt:
      Дополнительные настройки, включающие фабрику контекста, обработку исключений, шифрование и использование Jasypt.

Подключение к LDAPS

  1. Получите сертификат сервера LDAP (например, с Domain Controller AD).

  2. Импортируйте сертификат на машину "entaxy" в хранилище сертификатов с использованием утилиты keytool:

    keytool -import -trustcacerts -file <путь к сертификату> -alias <Алиас сертификата> -keystore <путь к хранилищу сертификатов>

    Например:

    keytool -import -trustcacerts -file ca_name.cer -alias selfsignedcert -keystore /opt/java11/jdk-pro-11.0.19/lib/security/cacerts
  3. Включите протокол LDAPS в настройках модуля ldap.jaas.login.module.

Использование LDAP в SOAP/REST сервисах

  1. Authorization Realm:

    karaf choicerealm

    Задается при создании сервиса.
    Определяет реалм авторизации для сервиса, связывая его с соответствующими настройками безопасности LDAP.

  2. Public Service Schema:
    Параметр, который позволяет сервису предоставить публичный доступ к своей схеме данных.

  3. Restrict Access by Roles:
    Чек-бокс, позволяющий ограничивать доступ к сервису на основе ролей.

  4. Roles Allowed to Access:
    Поле для указания ролей которым разрешен доступ к сервису.
    Возможные значения:

    • '*' (все): Разрешен доступ для всех ролей.

    • Указание конкретных ролей: Доступ разрешен только для пользователей, обладающих перечисленными ролями. При указании нескольких ролей, они разделяются запятой.

      Примеры:

      • Разрешен доступ для всех ролей:

        karaf roleaccessoff
        1. Authorization Realm: "LDAPRealm"

        2. Restrict Access by Roles: (чек-бокс не активирован)

        3. Roles Allowed to Access: '*'

      • Разрешен доступ только для пользователей с ролью "admin":

    karaf roleaccesson
    1. Authorization Realm: "LDAPRealm"

    2. Restrict Access by Roles: (чек-бокс активирован)

    3. Roles Allowed to Access: "admin"

Настройка модуля karaf-properties

Модуль поддерживает создание пользователей, ролей и групп.
Данные пользователей можно редактировать напрямую текстовым редактором или управлять с использованием консольных команд jaas:*. Karaf по умолчанию использует этот модуль и хранит данные пользователей в файле /etc/users.properties.

karaf properties
  1. Создание пользователей (Users)

    1. Add User: Добавление нового пользователя с указанием имени пользователя и пароля.

      karaf adduser
    2. Users List: Список пользователей (предустановленные пользователи - karaf и entaxy).

  2. Сведения о выбранном пользователе (User Details)

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

    1. Associated Profile: Выбор профиля для связи с выбранным пользователем.

      karaf userdetails
    2. Groups and Roles: Добавление групп и ролей.

      karaf addgrouptouser

    Количество результатов поиска зависит от числа ролей и групп, присвоенных пользователю, при этом роли внутри групп не учитываются.

  3. Управление группами/ролями (Group)

    1. Create Group: При создании новой группы ей автоматически присваивается предустановленная роль 'group'.

      karaf groupcreate
    2. Groups List: Список групп (предустановленная группа admingroup, включает роли: group, admin, manager, viewer, systembundles, ssh)

    3. Group Actions: Добавление/удаление ролей для выбранной группы.

      karaf addrolegroup

    В модуле предусмотрена автоматическая очистка системы от неиспользуемых групп: если группа была откреплена от последнего пользователя, связанного с этой группой, происходит автоматическое удаление данной группы из системы.

Настройка модуля karaf-publickey

Модуль аутентификации karaf.publickey использует файл etc/users.properties в качестве хранилища информации о пользователях, группах, ролях и паролях.

В файле users.properties изначально указан один пользователь – karaf (с паролем karaf), но по умолчанию строка закомментирована. Пользователь karaf является членом группы admingroup.
Группа всегда имеет префикс g:. Без этого префикса запись является пользователем.
Группа определяет набор ролей по умолчанию - admingroup, group, admin и manager.
Это означает, что у пользователя karaf будут роли, определенные в группе admingroup.

На уровне SSH Karaf поддерживает аутентификацию по ключу, что позволяет войти в систему без ввода пароля.

Ключи, разрешенные для подключения, хранятся в файле etc/keys.properties в следующем формате:
user=key,role.

pubkey

Проверка аутентификации

  1. Сгенерируйте публичный и приватный ключи для пользователя (putty-gen, ssh-keygen).

  2. Создайте нового пользователя:

    • Используя UI.
      Перейдите раздел Безопасность → jaas → karaf → modules → karaf.publickey. Откройте вкладку User Management, нажмите кнопку Add User. В открывшемся окне введите имя пользователя и в качестве пароля укажите сгенерированный публичный ключ (файл etc/keys.properties будет автоматически заполнен введенными данными).

    adduser pubkey button
    adduser pubkey
    • ИЛИ используя конфигурационный файл keys.properties.
      Создайте нового пользователя, указав его в файле etc/keys.properties, и вставьте публичный ключ (пользователь автоматически появится в UI в модуле karaf.publickey)

      test=[key],_g_:admingroup

      Подключитесь к Karaf, указав ваш приватный ключ в параметрах подключения и убедитесь в успешной аутентификации.

      publickey putty1
      publickey putty2
Аутентификация по сертификату доступна также и для доступа к MQ Artemis, но не доступна для веб-консоли Entaxy.

Регистрация и учет событий входа (выхода) пользователей

В модуле безопасности реалма karaf log-audit-jaas-login-module.karaf-log-audit необходимо включить модуль установив чек-бокс Module Enabled и указать значение Logger name - audit.log.logger