我有两个可以进行身份验证的 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: [email protected]
givenName: User
shadowLastChange: 15504
shadowExpire: 15522
cn: User.Test
userPassword: {SASL}[email protected]
无论如何,我想要做的是指定每个用户使用哪个身份验证服务器/领域对用户进行身份验证。配置 kerberos 来处理多个领域很容易。
但是,如何配置其他实例(如 PAM)来处理某些用户来自 INTERNAL.COM 而某些用户来自 EXTERNAL.COM 的情况?需要进行某种 LDAP 查找,从中获取领域和身份验证名称,然后进行实际身份验证。
是否有标准化的方法将此信息添加到 LDAP 或查找它?对于多领域用户群,还有其他解决方法吗?我也可以接受单领域解决方案,只要我可以为用户单独指定用户名 - 领域组合即可。
答案1
我认为最好的方法是使用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(但您已经这样做了)。
答案2
您正在寻找的设置位于 /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
}
答案3
pam_ldap
对于 ssh 密码/质询响应 LDAP 示例条目已经足够。
修改 中的相应文件/etc/pam.d
以使用该pam_ldap
库。
设置SASL 直通身份验证在您的 OpenLDAP 服务器上。RHEL
(CentOS): nss_ldap
Debian: libpam-ldap
Ubuntu:ldap-auth-client
krb5配置文件
auth_to_local
应该适用于基于 GSSAPI 的身份验证。
[realms]
$LOCALREALM = {
auth_to_local = RULE:[1:$1]
auth_to_local = DEFAULT
}
这可能太宽松了。
!pam_krb5
alt_auth_map
不应该像man
之前页面中引用的那样工作OpenSSH will reject usernames that don't match local accounts
答案4
Windows 针对不同域进行身份验证的方式是除了登录名之外还指定域。那么,您是否可以做类似的事情并让人们以以下身份登录[电子邮件保护]或者[电子邮件保护]? 如果您只使用“user3”,您就可以登录到默认域。
根据 pam_krb5(5), 这是可能的:
如果提供给 PAM 的用户名包含“@”,并且 Kerberos 可以将用户名视为主体,将其映射到本地帐户名,则 pam_authenticate() 会将 PAM 用户更改为该本地帐户名。这允许用户使用其 Kerberos 主体登录,并让 Kerberos 映射到帐户。
不幸的是,它继续说道:
但请注意,此功能不能与 OpenSSH 一起使用。在完成重新映射之前,OpenSSH 将拒绝与本地帐户不匹配的用户名,并将无效密码传递给 PAM 模块。还请注意,其他几个常见的 PAM 模块(如 pam_securetty)需要能够使用 getpwnam() 查找用户,如果使用此功能,则不能在 pam_krb5 之前调用。