LDAP:为什么将 root 密码存储在 ldap conf 文件中?

LDAP:为什么将 root 密码存储在 ldap conf 文件中?

我有可用的 LDAP + SSH 解决方案,但我想问一下,为什么我必须将 ldap root 密码存储在 libnss_ldap.secret 和 pam_ldap.secret 中?这似乎不安全,有人可以入侵一台 ldap 客户端计算机,并获取整个 ldap 的密码?

我该如何避免这种情况,是否真的需要 ldap 管理员密码来验证用户身份?

谢谢你,马丁

答案1

正如 sysadmin1138 所说,您确实需要对 LDAP 数据库的读取权限。您可以通过添加一个具有对所有属性(userPassword 除外)的读取权限的特殊 ldap 用户来实现这一点。

dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: <some sha1 hash> 

然后在访问控制文件中(假设这里是 OpenLDAP):

access to *
        by dn.regex="cn=admin,dc=example,dc=com" read
        by * read

您还可以授予匿名用户读取权限(仅限制用户密码)。然后,如果您需要一个特殊的管理员用户,您可以删除 libnss_ldap.secret 和 pam_ldap.secret。这同样有效,而且您的用户数据库的 uid 和 gecos 字段无论如何都是秘密。这是我通常做的。您可能希望设置大小限制并限制对经过身份验证的用户的邮件属性的访问:

sizelimit 100
timelimit 60

access to attrs=userPassword
        by anonymous auth
        by * none

access to attrs=mail
    by self read
    by users read
    by * none

access to *
        by * read

希望有帮助!

答案2

如果我没记错的话,必须存储在那里的用户和密码是可以读取所有适当 LDAP 属性的用户和密码。碰巧的是,LDAP-root 可以读取它们。如果花时间在 LDAP 结构中创建一个能够读取正确属性但不能写入这些属性的用户,它将允许将权限较低的帐户存储在这些文件中。无论如何,我相信这是最佳实践。

答案3

避免这种情况的唯一方法是将 kerberos 与 ldap 结合使用。不要使用 ldap 进行身份验证,而要使用 kerberos。

如果你有基于 redhat 的 linux,你可以尝试自由派。他们的版本 2 已接近完成,并且显示出很大的潜力(我已经在实验室中测试过它,它确实很容易设置、维护和扩展)。一旦版本 2 投入生产,我打算在任何可能的地方使用它 ;-)

如果您不使用基于 Red Hat 的 Linux,那么要实现这一点将非常困难。这是可能的,但不适合胆小的人。我发现这些关于这个东西的指南非常有效:rj 系统指南,跳过非 kerberos/ldap 内容。Ubuntu 有一个社区文档(这两个词对我来说没有太大的信心)来设置这些内容:Ubuntu OpenLDAP/Kerberos

值得庆幸的是,有了 freeipa,如果您没有任何 Windows 服务器,我们将为 Linux/Unix 提供合适的 AD 等效产品。

相关内容