Назад | Перейти на главную страницу

Как определить область Kerberos из каталога LDAP?

У меня есть две области Kerberos, в которых я могу пройти аутентификацию. Один из них я могу контролировать, а другой - внешний, с моей точки зрения. У меня также есть внутренняя база данных пользователей в LDAP. Допустим, это области INTERNAL.COM и EXTERNAL.COM. В ldap у меня есть такие записи пользователей:

1054 uid=testuser,ou=People,dc=tml,dc=hut,dc=fi
shadowFlag: 0
shadowMin: -1
loginShell: /bin/bash
shadowInactive: -1
displayName: User Test
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uidNumber: 1059
shadowWarning: 14
uid: testuser
shadowMax: 99999
gidNumber: 1024
gecos: User Test
sn: Test
homeDirectory: /home/testuser
mail: testuser@internal.com
givenName: User
shadowLastChange: 15504
shadowExpire: 15522
cn: User.Test
userPassword: {SASL}testuser@INTERNAL.COM

Я хотел бы каким-то образом указать для каждого пользователя основу, на которой аутентифицируется сервер / область, на которой пользователь аутентифицируется. Настроить kerberos для обработки нескольких областей очень просто.

Но как мне настроить другие экземпляры, такие как PAM, для обработки того факта, что некоторые пользователи находятся с INTERNAL.COM, а некоторые с EXTERNAL.COM? Должен быть какой-то поиск LDAP, из которого выбирается область и имя аутентификации, а затем сама аутентификация.

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

Я думаю, что лучше всего было бы использовать sssd. Это дает вам максимальную гибкость, поскольку sssd поддерживает то, что он называет доменами. Обратите внимание, что более новые дистрибутивы уже используют sssd. Это сбывшаяся мечта, и нет оправдания использованию libpam_krb5.so, libpam_ldap.so или любых из них.

Самый простой подход - использовать фильтр ldap для выбора области, в которую вам нужно перейти для таких tgts:

Сначала создайте две группы безопасности, которые содержат участников для внешней и внутренней областей, чтобы иметь возможность добраться до правильного kdc.

Установите sssd и проверьте его документацию, этот фрагмент представляет собой набросок того, как вам нужно настроить два домена.

[domain/internal.com]
access_provider = ldap
id_provider = ldap
ldap_access_filter = memberOf=cn=allowedusersinternal,ou=Groups,dc=internal,dc=com
auth_provider = krb5 

[domain/external.com]
access_provider = ldap
ldap_access_filter = memberOf=cn=allowedusersexternal,ou=Groups,dc=internal,dc=com
id_provider = ldap
auth_provider = krb5

Затем настройте ваш Kerberos для двух областей в соответствии с потребностями (но вы уже это получили).

pam_ldap
Для ssh пароль / запрос-ответ пример записи LDAP уже достаточно.
Измените соответствующий файл (ы) в /etc/pam.d использовать pam_ldap библиотека.
Настроить SASL passthough аутентификация на вашем сервере (ах) OpenLDAP.
RHEL (CentOS): nss_ldap
Debian: libpam-ldap
Ubuntu: ldap-auth-client

krb5.conf
auth_to_local должен работать для аутентификации на основе GSSAPI.

[царства]
$ LOCALREALM = {
auth_to_local = ПРАВИЛО: [1: $ 1]
auth_to_local = ПО УМОЛЧАНИЮ
}
Это может быть слишком снисходительно.

! pam_krb5 alt_auth_map не должно работать, как указано в man страница перед OpenSSH will reject usernames that don't match local accounts

Настройки, которые вы ищете, находятся в /etc/krb5.conf, здесь вы можете сохранить несколько областей под тегом [realms], каждая из которых указывает на свой собственный сервер LDAP.

[realms]
       INTERNAL.COM = {
               kdc = some.server.internal.com:88
               admin_server = some.server.internal.com:749
               default_domain = internal.com
       }
       EXTERNAL.COM = {
               kdc = some.server.external.com:88
               admin_server = some.server.external.com:749
               default_domain = external.com
       }  

Способ Windows для аутентификации в разных доменах - указать домен в дополнение к имени пользователя. Итак, приемлемо ли для вас сделать что-то подобное и заставить людей входить в систему как user1@internal.com или user2@external.com? И если вы просто используете «user3», вы можете войти в домен по умолчанию.

Согласно pam_krb5 (5) это возможно:

Если имя пользователя, предоставленное PAM, содержит "@" и Kerberos может, рассматривая имя пользователя как принципала, сопоставить его с именем локальной учетной записи, pam_authenticate () изменит пользователя PAM на имя этой локальной учетной записи. Это позволяет пользователям входить в систему со своим принципалом Kerberos и позволять Kerberos выполнять сопоставление с учетной записью.

К сожалению, это продолжается:

Однако имейте в виду, что эту возможность нельзя использовать с OpenSSH. OpenSSH отклонит имена пользователей, не совпадающие с локальными учетными записями, прежде чем это переназначение может быть выполнено, и передаст неверный пароль в модуль PAM. Также имейте в виду, что некоторые другие распространенные модули PAM, такие как pam_securetty, ожидают, что смогут искать пользователя с помощью getpwnam () и не могут быть вызваны до pam_krb5, если эта функция используется.