У меня есть две области 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, если эта функция используется.