LDAP 是正确的选择吗?

LDAP 是正确的选择吗?

因此,我正在寻找一种解决方案,用于对众多服务器进行 ssh 密钥授权访问,并且已指出使用 LDAP。我想介绍用例,看看 LDAP 是否适用,以及任何建议或帮助是否合适。

是否可以使用 LDAP 来限制每个用户/组使用 ssh 密钥对特定服务器的访问。因此,用户尝试访问一个框,该框将弹出到包含服务器和用户详细信息的 LDAP 服务器。然后,它将检查该人是否有权访问该服务器,并可能返回相关密钥以授予访问权限。

经过一些研究,似乎可以做到上述事情,但我找不到任何适用于特定服务器的地方。

另外,openLDAP 是否最好用,我尝试过设置它,但遇到了一些问题,例如配置文件的校验和等。

答案1

因此,用户尝试访问一个框,该框将弹出到 LDAP 服务器,其中包含服务器和用户详细信息。然后,这将检查该人是否有权访问该服务器

是也不是。LDAP 服务器的目的是存储信息,而不是执行任意检查。(它只是一个数据库。)

因此您可以实现这一点,但实际的授权检查将在 sshd 端进行(服务本身决定是否接受用户)。对于 Linux,这通常会在属于 LDAP 客户端软件(nslcd 或 sssd)的 PAM 模块内发生。

并可能返回相关密钥以授予访问权限。

注意身份验证和授权之间的区别。前者验证用户是谁;后者验证用户被允许做什么。

因此可能的配置 LDAP 软件以使其不返回任何密钥(因为它已经知道用户稍后会被拒绝),这不是 LDAP 客户端默认的工作方式,并且可能更难以实现。

相反,LDAP 服务器通常会总是返回 SSH 密钥,sshd 将在身份验证阶段接受它们——因为如果用户不被允许使用服务器,无论如何,他们都会在授权阶段被拒绝。

后一种方法的优点是无论使用哪种身份验证机制,效果都一样好。无论用户使用密码、SSH 密钥、智能卡还是 Kerberos 令牌进行身份验证,他们都会同样被拒绝(或接受)。

经过一些研究,似乎可以做到上述事情,但我找不到任何适用于特定服务器的地方。

如上所述,将密钥检索与授权分开可能会更容易。

  1. 配置 LDAP 客户端软件(SSSD 或 nslcd)以从目录中检索用户信息,并使用某些规则检查授权。(最传统的方法是使用host:用户帐户上的属性。)

    使用 测试 SSSD 的 pam_sss(或 nslcd 的 pam_ldap)是否正确检查权限pamtester sshd Someusername acct_mgmt

  2. 在 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 以外的其他产品,那么选择范围非常广。我建议使用网络安全领域的公司或顾问的服务。适合您的解决方案取决于许多因素,例如您的地理位置、可用设备,当然还有预算。

相关内容