我们有一个使用 389 Directory Server for LDAP 的小型网络。我们创建 LDAP 用户,这些用户登录到网络中的各种机器,然后有时我们会删除这些用户。但是,删除 LDAP 用户后,工件仍保留在用户访问的每个系统上。我什至不知道留下的所有内容,但我已经确定了以下内容:主目录、sssd 缓存条目和 AccountsService 缓存条目。除了文件系统上的剩余部分,这会导致已删除的用户出现在 gdm 登录屏幕上,如果使用与已删除用户相同的 uid 或用户名创建新的 LDAP 用户,则会导致问题(显示错误的名称或无法创建主目录和 gdm 返回登录屏幕)。删除 LDAP 用户后如何清理每个本地系统?
这就是我到目前为止所拥有的:杀死他们所有的进程,删除他们的主目录sss_cache -E
,,,。我还缺少什么或者有更好的方法吗?systemctl restart sssd
systemctl restart accounts-daemon
即使您有完整的清理程序或脚本,您是否在每个系统上手动运行它?有没有一种自动清理 LDAP 删除的好方法?我尝试使用删除后回调制作 389 Directory Server Post-Operation 插件,但无法让 389 Directory Server 加载插件。当我尝试使用 ldapmodify 添加插件时,它失败了:ldap_add: Server is unwilling to perform (53) additional info: Invalid plugin path myplugin.so - failed to open library
. 第一次看到这个错误时,我发现 systemd 日志条目显示 SELinux 正在阻止执行,但是在采取推荐的操作之后,我现在在 systemd 和 dirsrv 日志中看不到任何有用的信息,所以我不知道它为什么会失败。
我的解决方案是在用户删除时手动运行脚本,并让 cron 作业定期在每个主机上运行脚本,以防万一主机在删除时断开连接。我的脚本:
我并不是说它很棒,但它足以满足我的需求。请注意,它假定所有用户的主目录都在 /home 中。