我正在使用openldap
+nslcd
连接到 LDAP 服务器以对某些用户进行身份验证(这些用户希望他们的密码和大部分配置在许多设备上共享)。我不控制 LDAP 服务器。
但是,同步是在用户已经拥有双帐户之后进行的,因此主文件夹的名称不匹配(由于脚本中可能存在硬编码路径,因此移动它们是不明智的)。我正在考虑一个硬链接目录,但我想知道是否有办法为特定用户覆盖主文件夹,这看起来更干净,听起来应该是一个常见的用例。
我很惊讶nslcd.conf
似乎只接受一个过滤器(每个 map= passwd
),并且map
指令将简单地立即替换所有用户的主页。
有没有办法在 LDAP 查找后优雅地“修复”单个条目?我的搜索大多遇到了替换所有用户模式的答案,或者给出了无用的答案(例如这个简单地覆盖了以前的过滤器的答案)。
我认为我需要什么:
filter passwd (&(objectClass=inetOrgPerson)(<redacted>))
# the last part is wishful thinking, not actual syntax
map passwd homeDirectory "<redacted>" if (uid=<redacted>)
我是 LDAP 的新手,所以我可能不完全理解事务发生的顺序以及应该执行此操作的是 PAM 还是 nslcd。我意识到这不是正确处理这种情况的最佳方法,但我仍然想知道是否可以做到。
我认为您不能在nslcd.conf(5)中使用map指令实现单独的覆盖。这种映射应用于整个 passwd 映射。但是,根据模块名称的顺序,您可以设置具有不同主目录的本地passwd条目,该主目录在文件/etc/passwd中具有更高的优先级。
/etc/nsswitch.conf
示例行
/etc/nsswitch.conf
:确保其余属性保持一致!
IIRC 较新版本的sssd有一个 CLI 工具sss_override(8),它允许为某些用户设置单独的值。
但问问你自己:你真的想维持这个烂摊子吗?
作为您,我首先要与用户交谈,他们宁愿
$HOME
在脚本中使用 env var。