Имя входа для преобразования имени участника Kerberos с использованием auth_to_local - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь перевести "локальные имена входа" в конкретное c имя участника Kerberos. На сервере Kerberos участники для пользователей хранятся в формате: / @ .

Например, я хотел бы, чтобы имя для входа в систему testUser1 было переведено на основное имя: testUser1 / Admins@HOME.COM

Причина, по которой я хотел бы использовать этот формат, заключается в том, чтобы я мог применять Контроль доступа Kerberos для пользователей, входящих в определенные группы c, через файл kadm5.acl. Только пользователи в группе «Администраторы» должны быть авторизованы для создания принципалов Kerberos.

Система состоит из 3 отдельных серверов: KRB-Server (krb-server.home.com), S SH -Server (s sh -server.home.com) и LDAP- Сервер (ldap-server.home.com). Все серверы работают под управлением Ubuntu 16.04. KRB-сервер работает под управлением KRB5 1.16-2 из репозитория zodops / ubuntu-backports. S SH -Server использует SSSD для включения аутентификации / авторизации с использованием сервера аутентификации Kerberos и сервера идентификации / авторизации LDAP.

Я попытался выполнить локальное имя пользователя для основных сопоставлений Kerberos, используя правила, определенные в опция auth_to_local.

RULE:[2:$1/$2@$0](.*\/Admins@HOME\.COM)s/\/Admins@HOME\.COM//

Из того, что я понимаю в первом разделе правила:

[2:$1/$2@$0]

Будет сопоставлять принципалы kerberos с двумя компонентами и переводить его в формат / @

Следующий раздел (. * / Admins@HOME.COM) будет соответствовать результату первого раздела и перейдет к третьему и последнему разделу выражения замены, который удалит второй компонент и область от имени участника.

s/\/Admins@HOME\.COM//

Это должно преобразовать имя участника Kerberos "testUser1 / Admins@HOME.COM" в локальное имя входа "testUser1". Однако эта конфигурация, похоже, не вступает в силу.

Файлы конфигурации имеют следующий вид:

/ etc / krb5.conf на krb-server.home.com

[libdefaults]
    default_realm = HOME.COM

[realms]
    HOME.COM = {
        kdc = krb-server.home.com
        admin_server = krb-server.home.com
        master_kdc = krb-server.home.com
        default_domain = home.com
        database_module = openldap_ldapconf

        auth_to_local = RULE:[2:$1/$2@$0](.*\/Admins@HOME\.COM)s/\/Admins@HOME\.COM//
        auth_to_local = DEFAULT         
    }

[domain_realm]
    .home.com = HOME.COM

[dbdefaults]
    ldap_kerberos_container_dn = cn=krb5,dc=home,dc=com

[dbmodules]
    openldap_ldapconf = {
        db_library = kldap
        ldap_kdc_sasl_mech = EXTERNAL
        ldap_kadmind_sasl_mech = EXTERNAL
        ldap_servers = ldaps://ldap-server.home.com
        ldap_conns_per_server = 5
    }

[logging]
   admin_server = FILE:/var/log/krb-admin-server.log
   kdc = FILE:/var/log/kdc.log
   default = FILE:/var/log/default-kdc.log

/ etc / krb5.conf на s sh -server.home.com

[libdefaults]
    default_realm = HOME.COM

[realms]
    HOME.COM = {
        kdc = krb-server.home.com
        admin_server = krb-server.home.com
        master_kdc = krb-server.home.com
        default_domain = home.com
        auth_to_local = RULE:[2:$1/$2@$0](.*\/Admins@HOME\.COM)s/\/Admins@HOME\.COM//
        auth_to_local = DEFAULT
    }

[domain_realm]
    .home.com = HOME.COM

При попытке аутентификации на S SH -Server через s sh testUser1@localhost или su - testUser1, в лог-файл Kerberos KD C выдается ошибка.

CLIENT_NOT_FOUND: testUser1@HOME.COM for krbtgt/HOME.COM@HOME.COM, Client not found in Kerberos database

Когда я пытаюсь пройти аутентификацию для участника с один компонент (testUser1@HOME.COM), аутентификация работает без нареканий. К сожалению, я не могу пройти проверку подлинности для двух имен участников компонента, как указано выше.

Верны ли мои предположения о параметре конфигурации auth_to_local? Если так, может кто-нибудь пролить свет на то, как заставить эту конфигурацию работать? Если нет, какие другие решения я могу использовать для этой проблемы?

1 Ответ

0 голосов
/ 16 марта 2020

Мне удалось решить эту проблему с помощью опции SSSD, ldap_user_principal.

Я определил новый атрибут и объектный класс для базы данных LDAP, которая будет содержать целевое имя участника. Затем я добавил новый объектный класс (krbHelper) и атрибут (PrincipalName) в запись LDAP, содержащую информацию о пользователе.

dn: uid=testUser1,ou=People,dc=home,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: krbHelper
uid: testUser1
-
-
principalName: testUser1/Admins@HOME.COM
-

Внутри файла sssd.conf я установил значение параметра ldap_user_principal для нового атрибут.

ldap_user_principal = principalName

Теперь я могу войти через S SH с принципалами, содержащими более двух компонентов.

Другим потенциальным решением будет определение псевдонимов для основных записей LDAP с использованием krbCanonicalName и дополнительные атрибуты krbPrincipalName, как указано в конце этой документации (https://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_ldap.html). Тогда для параметра SSSD krb5_canonicalize будет установлено значение true, чтобы канонизировать имя участника входа в систему.

Тестирование с kinit -C позволило мне успешно выполнить начальный запрос билета для двух имен участников компонента. Однако я не смог проверить это с SSSD, поскольку опция krb5_canonicalize недоступна в используемой версии SSSD.

...