我如何告诉autofs挂载LDAP所描述的主目录?

我正在使用CentOS 5.3进行连接,以使用Kerberos进行身份validation,并使用LDAP来获取用户信息。 不幸的是,存储在LDAP中的所有用户的主目录是“/”。 很亮! 所以,这是行不通的。 没有任何LDAP访问权限,我需要弄清楚如何强制用户使用本地目录“/ home / username”作为HOME。

我已经尝试编辑/ etc / bashrc,但似乎在这个时候设置HOME太晚了。 另外,我可能需要编辑用户的默认shell,这也存储在LDAP中。 似乎并没有改变本地的/ etc / bashrc会有帮助,因为它甚至可能不会被加载!

因此,在使用这些组件时 – Kerberos,LDAP,pam,autofs – 何时何地可以为我的用户指定环境,如果需要覆盖LDAP中设置的环境?

TIA !!! 1

警告:前面的丑陋! 最好的事情当然是改变LDAP服务器中的数据,并保存你自己的麻烦,但这里是:

在/etc/security/pam_env.conf末尾添加以下行:

HOME DEFAULT="/home/@{PAM_USER}" 

这将覆盖用户$ HOMEvariables指向正确的目录。 但是,这只是在login后设置的,所以你仍然会得到一个错误,login无法find用户主目录。 丑陋的黑客的第二阶段是在/ etc / profile的末尾添加一个“cd〜”,这会将用户带到正确的主目录。 希望在这个阶段,您将能够使用automount将主目录映射到正确的NFS服务器

我同意马克,你最好的select是修改LDAP中的条目。

如果你不能做到这一点,我可以build议一些重大的黑客攻击,但是可以完成这项工作:

而不是直接查找LDAP,使用nsscache从LDAP中获取用户数据。 然后在定期更新caching的同一个cron作业中,添加一个将用户的主目录属性重写为所需的脚本。 你也可以通过直接修改nsscache源来做到这一点。

您可以使用类似的方法来更改默认的shell。

这也将有减less/主要是消除您的LDAP服务器的查询不错的副作用:)

您是否configuration了NSS直接与LDAP服务器通话,或者您是否通过代理(如nslcd ? 如果是这样,请考虑configuration代理来重写用户的主目录属性。 例如,在nslcd.conf您可以声明:

 map passwd homeDirectory "/home/$uid" 

哪个是明显的事情。