操作系统是 Amazon Linux 2023。我尝试使用 LDAP 对所有新用户进行用户/组管理。我安装了 openldap-servers、openldap-clients 和 nss-pam-ldapd 软件包。我在 slapd 上配置了 SSL,并且
ldapwhoami -x -H ldaps://myserver.mydomain.com
ldapwhoami -x -H ldapi:///
均返回匿名。
sudo ldapwhoami -H ldapi:///
返回 dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth。
我已将 nsswitch.conf 设置为:
passwd: ldap sss files
shadow: ldap files
group: ldap sss files
我已将 nslcd.conf 设置为:
uid root
gid root
uri ldapi:///
base dc=mydomain,dc=com
当我跑步时:
sudo useradd -b /home balaguru1
它似乎没有将用户添加到 LDAP 数据库。/var/lib/ldap/ 中的文件保持不变。/etc/passwd 已使用新用户进行了修改。
我错过了什么?
nsswitch 接口是只读的——它没有名称服务模块可以提供的任何添加或修改操作,并且所有这些工具都直接对后端执行修改。
例如,您的
useradd
工具是专门通过 /etc/passwd 和 /etc/shadow 更新本地帐户数据库而编写的,仅用于更新本地帐户数据库。(实际上,它来自“shadow”软件包,该软件包仅用于维护 passwd/shadow/group 文件。)您将需要一个不同的工具来管理 LDAP 帐户。¹
¹(我不知道还有什么会继续维护;我最终或多或少地编写了自己的代码。一个 shell 脚本
ldapadd
就可以工作。)典型的 LDAP 实现设计为具有可配置模式;OpenLDAP 附带了几种传统的模式配置
/etc/(open)ldap/schema
。您正在寻找
posixAccount
objectClass,正如您已经找到的那样,它位于nis
架构文件中。但是,它是一个辅助类,通常附加到person
或inetOrgPerson
对象(在本例中来自cosine
架构);尽管没有什么可以阻止您将其附加到device
对象或applicationProcess
对象。(后者是 OSI 和 X.500 的遗留,但在某种程度上适合表示例如需要自己的 LDAP 密码和/或自己的 POSIX 帐户的服务。)是的,您必须先创建“父”条目,然后才能将任何内容放在其下。如果您刚开始使用空数据库,您甚至需要创建与您的数据库后缀相对应的顶层条目(例如
dc=example,dc=org
作为objectClass: domain
条目或o=My Little Org
作为organization
条目)。然后创建 OU 作为organizationalUnit
对象 - 虽然不需要将用户和组放在 OU 下;可以在顶层条目下创建它们;无论如何,它们可以稍后移到 OU 中。(请注意,您只需添加DB 后缀之前的父级- 在此示例中无需添加
dc=org
。)假设您有一个如下配置的数据库条目:
这意味着您需要创建这些条目(假设您想要典型的 OU=Users 类型的层次结构):
而如果您有
olcSuffix: dc=example,dc=com
(AD 样式),则需要添加:(如果所有程序都支持“绑定为应用程序、搜索、绑定为用户”模型,那么是否使用
dn: cn=
或dn: uid=
作为用户条目的 DN 取决于您。大多数程序都支持这种方式,因为这就是 Active Directory 所做的。但如果某些程序仅支持“根据uid=%s,ou=Users,etc
DN 模板绑定”模型,则需要使用uid=
。)