因此,我正在寻找一种解决方案,用于对众多服务器进行 ssh 密钥授权访问,并且已指出使用 LDAP。我想介绍用例,看看 LDAP 是否适用,以及任何建议或帮助是否合适。
是否可以使用 LDAP 来限制每个用户/组使用 ssh 密钥对特定服务器的访问。因此,用户尝试访问一个框,该框将弹出到包含服务器和用户详细信息的 LDAP 服务器。然后,它将检查该人是否有权访问该服务器,并可能返回相关密钥以授予访问权限。
经过一些研究,似乎可以做到上述事情,但我找不到任何适用于特定服务器的地方。
另外,openLDAP 是否最好用,我尝试过设置它,但遇到了一些问题,例如配置文件的校验和等。
答案1
因此,用户尝试访问一个框,该框将弹出到 LDAP 服务器,其中包含服务器和用户详细信息。然后,这将检查该人是否有权访问该服务器
是也不是。LDAP 服务器的目的是存储信息,而不是执行任意检查。(它只是一个数据库。)
因此您可以实现这一点,但实际的授权检查将在 sshd 端进行(服务本身决定是否接受用户)。对于 Linux,这通常会在属于 LDAP 客户端软件(nslcd 或 sssd)的 PAM 模块内发生。
并可能返回相关密钥以授予访问权限。
注意身份验证和授权之间的区别。前者验证用户是谁;后者验证用户被允许做什么。
因此可能的配置 LDAP 软件以使其不返回任何密钥(因为它已经知道用户稍后会被拒绝),这不是 LDAP 客户端默认的工作方式,并且可能更难以实现。
相反,LDAP 服务器通常会总是返回 SSH 密钥,sshd 将在身份验证阶段接受它们——因为如果用户不被允许使用服务器,无论如何,他们都会在授权阶段被拒绝。
后一种方法的优点是无论使用哪种身份验证机制,效果都一样好。无论用户使用密码、SSH 密钥、智能卡还是 Kerberos 令牌进行身份验证,他们都会同样被拒绝(或接受)。
经过一些研究,似乎可以做到上述事情,但我找不到任何适用于特定服务器的地方。
如上所述,将密钥检索与授权分开可能会更容易。
配置 LDAP 客户端软件(SSSD 或 nslcd)以从目录中检索用户信息,并使用某些规则检查授权。(最传统的方法是使用
host:
用户帐户上的属性。)使用 测试 SSSD 的 pam_sss(或 nslcd 的 pam_ldap)是否正确检查权限
pamtester sshd Someusername acct_mgmt
。在 sshd_config 中配置一个
AuthorizedKeysCommand
以从 LDAP 检索密钥。如果您之前选择了 SSSD,它有一个内置的帮助程序;否则您可能需要自己编写。
遇到一些问题,例如配置文件的校验和等等。
OpenLDAP 有两种配置格式:
- 一个简单的文本文件
slapd.conf
,可直接编辑,没有有校验和。 - 基于 LDAP 的
cn=config
,尽管以 LDIF 文本文件的形式存储在磁盘上,但不能直接编辑。一旦您构建了 cn=config,您应该执行全部通过 LDAP 本身进行编辑(或通过,slapadd
如果有必要)。
你在查看第二个变体时发现了校验和。我只能假设它们是为了防止直接编辑而存在的(这并非不可能,但不应该紧急情况除外)。
答案2
LDAP 管理网络的许多方面,也可以设置为存储 SSH 公钥。这要求配置 SSH 客户端以查询 LDAP 以获取所需信息。
您可以在 Server Fault 文章中找到有关设置的说明 使用 LDAP 进行 SSH 密钥验证关于:
- 更新 LDAP 以包含 OpenSSH-LPK 架构
- 创建一个脚本,用于向 LDAP 查询用户的公钥
- 更新
sshd_config
以指向上一步中的脚本
在这种情况下,LDAP 仅用作具有访问控制的数据库。即使不使用 LDAP,您也可以使用各种其他类型的产品(从企业防火墙到提供单点登录解决方案的复杂管理)获得类似的结果。
如果您想使用 LDAP 以外的其他产品,那么选择范围非常广。我建议使用网络安全领域的公司或顾问的服务。适合您的解决方案取决于许多因素,例如您的地理位置、可用设备,当然还有预算。