我有一个较大的用户群(>>1000),应该能够共同使用一些共享服务。
用户群在缓慢但不断地变化。
尤其是 我们对权限分离不感兴趣(所有用户都是平等的),因此他们可以从权限 pov 共享一个帐户。但是,出于安全原因,我们不能使用共享凭据。幸运的是,所有用户都可以通过 LDAP 获得自己的用户名/密码。
所以我们实现了一个登录服务器(Debian 上的 ssh),人们通过 PAM 和 OpenLDAP 进行身份验证。
现在 LDAP 服务器没有提供太多信息,只提供用户名和身份验证功能。esp,它缺少 aobjectClass: posixAccount
和伴随的属性
uidNumber
gidNumber
loginShell
homeDirectory
我对 LDAP 服务器的访问非常有限(尤其是,我不能要求添加这些或任何其他属性),基本上它只允许我对用户进行身份验证。
现在好消息是,如果所有用户对这些属性具有相同的值,我并不十分在意。
所以我最终实现了一个使用translucent
覆盖来添加缺失属性的代理 ldap 服务器。覆盖数据是通过一个脚本生成的,该脚本从上游 LDAP 数据创建一个精简的 LDIF 文件,然后用于填充半透明数据库。
这工作正常,但我不喜欢它的可维护性 POV:因为用户群正在改变,我需要手动定期更新数据库(它很少改变 - 每隔几个月 - 所以它不是很多工作,但它也容易忘记)。
因为覆盖数据是如此微不足道(所有对象的属性/值都相同),我认为必须有更好的方法。理想情况下,我希望有一个叠加层,它将这些属性添加到所有对象(匹配给定的搜索项)。
为了使事情复杂一点,我们还针对另一个提供posixAccount
-data 的 LDAP 服务器对另一个用户群进行身份验证;这个组的用户当然不应该受到其他组所需的所有叠加魔法的影响;我认为这排除了在 PAM 方面所做的任何魔术。
原建议:
我建议使用nss-pam-ldapd 包并使用nslcd 映射在没有来自 ldap 的值时为用户帐户提供默认值。
根据 nslcd.conf 的文档,也可以导出 uid/gid:
选项#2a:
因此,根据您提到的内容,您似乎需要保留目录的镜像。
您能否简单地更新您拥有的脚本,使其以非破坏性方式工作(即只添加它在本地找不到的帐户/属性)并让它每天通过 cron 运行一次?
选项#2b
如果您可以设置本机 1-way LDAP 复制(从上游目录到本地目录),然后使用覆盖层或由事件触发的脚本(反过来执行本地 ldapmodify)日志,提供缺失的属性?