我使用 CentOS 5.3 进行连接,使用 Kerberos 进行身份验证,使用 LDAP 存储用户信息。不幸的是,LDAP 中存储的所有用户的主目录都是“/”。太聪明了!所以,这行不通。由于无法访问 LDAP,我需要弄清楚如何强制用户使用本地目录“/home/username”作为主目录。
我尝试编辑 /etc/bashrc,但似乎此时设置 HOME 已经太晚了。另外,我可能需要编辑用户的默认 shell,它也存储在 LDAP 中。更改本地 /etc/bashrc 似乎没有帮助,因为它甚至可能没有加载!
那么,当使用这些组件(Kerberos、LDAP、pam、autofs)时,我何时何地可以为我的用户指定环境,如果需要,可以覆盖 LDAP 中设置的环境?
蒂亚!!!1
答案1
警告:前方有丑陋的黑客攻击!最好的办法当然是更改 LDAP 服务器中的数据,这样可以省去麻烦,但下面是一些步骤:
在 /etc/security/pam_env.conf 末尾添加以下行:
HOME DEFAULT="/home/@{PAM_USER}"
这将覆盖用户的 $HOME 变量以指向正确的目录。但是,这仅在登录后设置,因此您仍然会收到登录无法找到用户主目录的错误。丑陋黑客的第二阶段是在 /etc/profile 末尾添加“cd ~”,这将使您的用户进入正确的主目录。希望在此阶段您能够使用自动挂载将主目录映射到正确的 NFS 服务器
答案2
我同意马克的观点,最好的办法是修改 LDAP 中的条目。
如果你做不到这一点,我可以建议一些虽然很困难但可以完成工作的方法:
不要直接查找 LDAP,而是使用nss缓存从 LDAP 中提取用户数据。然后在定期更新缓存的同一个 cron 作业中,添加一个脚本,该脚本将用户的主目录属性重写为您想要的属性。您也可以通过直接修改 nsscache 源来执行此操作。
您可以使用类似的方法来改变默认shell。
这还将带来很好的副作用,即减少/基本消除对 LDAP 服务器的查询 :)
答案3
您是否已将 NSS 配置为直接与 LDAP 服务器通信,或者您是否正在通过代理(例如)进行通信nslcd
?如果是这样,请考虑配置代理以重写用户的主目录属性。例如,nslcd.conf
您可以声明:
map passwd homeDirectory "/home/$uid"
这是显而易见的事情。