我需要在 RHEL / Fedora 上设置一个非常简约的 LDAP 设置。
- 不需要 Kerberos
- 想要避免任何 DNS 服务器设置
- 如果它不安全请不要介意:它仅用于测试。
- 所有用户身份验证均通过 ldap 完成(无 kerberos 或 /etc/passwd 依赖)
我见过诸如 openldap 之类的工具,但希望也许有一个现成的脚本或类似的东西,可以通过 yum 安装最小的 ldap 组件并对 /etc/ 文件进行必要的修改,以设置一个简单的基于 LDAP 的用户登录设置。
是否有这样的工具 - 或者这些事情通常是在重量级环境中完成的?
答案1
以下内容适用于 RHEL 6.x。对于 Fedora,它可能只需很少的更改或无需更改即可工作,尽管这尚未经过测试。
您需要软件包 nss-pam-ldapd 和 openldap-clients。根据您喜欢的工作方式,您可能还想在此基础上添加 nscd 和/或 nslcd。使用 安装所需的软件包yum -y install nss-pam-ldapd openldap-clients
,该命令可能还会添加一些依赖软件包。
事情可能在这里变得有点棘手。您可能希望发生两件事:1) 根据 LDAP 验证用户身份,2) 让密码/组的用户条目也从 LDAP 流出。我不会深入探讨后者,因为这在很大程度上取决于可用的 LDAP 对象及其属性。不过,第一个相当简单。
要从 LDAP 验证用户身份,无论他们如何连接(可能是本地虚拟终端、SSH 连接、本地 X11 GDM 会话或几乎任何东西),您都可以使用 PAM。文件通常位于 中,/etc/pam.d
在 RHEL 中,您真正想要摆弄的是/etc/pam.d/system-auth
。其他几个文件,例如/etc/pam.d/password-auth
是指向此文件的符号链接。除非存在特定于服务的 PAM 配置(例如,在 RHEL 系统中,会查阅 - 有关详细信息,请参阅文件内容) /etc/pam.d/system-auth
,否则在验证用户身份时会查阅该文件。/etc/pam.d/sshd
/etc/pam.d/system-auth
以下示例将允许您的用户从本地密码(即/etc/passwd
/ /etc/shadow
)进行身份验证,然后从 LDAP 进行身份验证。这个想法是本地密码覆盖 LDAP 密码,但您可能实际上希望反之亦然,即本地密码是后备密码而不是 LDAP。以下内容应放入文件中/etc/pam.d/system-auth
(其余部分保持/etc/pam.d/system-auth
原样,不要用以下内容替换文件的全部内容):
auth sufficient pam_unix.so nullok try_first_pass # try a local passwd entry
auth sufficient pam_ldap.so use_first_pass # try a LDAP entry
auth required pam_deny.so # deny access if both passwd and LDAP fails
除了定义如何对用户进行身份验证之外,您还需要让 pam_ldap.so 了解您的 LDAP 服务器。这在 中定义/etc/ldap.conf
。此文件的手册页可通过 读取,man pam_ldap
而man ldap.conf
这将在您的终端上显示 OpenLDAP 客户端库配置文件 ( /etc/openldap/ldap.conf
) 条目。pam_ldap.so 的最低要求/etc/ldap.conf
应类似于以下内容:
base <your_base_dn> # ou=Admin,o=Organization
uri <your_uri> # ldap://ldapsrv.org.com/
bind_policy soft # you might want to use hard too, but usually not
ssl off # you really should be using SSL/TLS
假设您的 LDAP 服务器返回正确的 posixAccount 对象(如果您使用的是 Microsoft AD,则很可能不会返回正确的 posixAccount 对象,因为 Microsoft AD 需要额外的包才能返回 posixAccount 对象),这应该可以做到,您的用户现在应该能够通过您的 LDAP 服务器验证自己的身份。他们仍然需要一个本地条目来记录/etc/passwd
他们的 UID 等等。如果您想从 LDAP 获取所有用户信息,而不仅仅是通过您的 LDAP 服务器验证他们的身份,您必须查看 nsswitch 机制(例如,请参阅man nss
、man nsswitch.conf
、man nslcd.conf
)。
现在这是绝对最小值,既不太实用也不太安全。您很可能希望使用 pam_access.so 为用户建立白名单,使用 pam_env.so 提高可用性等。