我想做但无法做到的事情
我正在尝试在 Yosemite 客户端中设置网络用户,并将他们的主目录放在使用 Kerberos 的 AFP 上。我使用 automountd 让主目录在被访问时(即,只要有人登录)就挂载到 /home/username 下。在大多数情况下,这种方法是可行的:我可以以网络用户身份登录,获得 Kerberos 票证,该票证用于挂载主目录。挂载工作正常。但是,主目录将归 root(组:wheel)所有,这意味着用户无法访问它。然后 OS X 将要求用户输入管理员密码以“修复用户的库”。
请注意,我们没有运行 OS X Server,因为网络并非 Mac 专用。相反,我们在 Linux 机器上运行 OpenLDAP 和 MIT Kerberos。还请注意,我主要管理 Linux 服务器和 Windows 客户端,并且我正在努力以 Mac 方式正确处理事情。
我可以做什么来解决这个问题(但我们的用户不能)
当我第一次以本地管理员身份登录,然后在终端上执行“su一些网络用户“,它完美地工作:主目录已使用 Kerberos 票证挂载,并且由 someNetworkUser 拥有。我甚至可以这样做,然后返回登录窗口(不注销本地管理员,因此主目录不会被卸载),然后以 someNetworkUser 身份登录:这将完美地工作,因为主目录已经使用正确的凭据挂载并由 someNetworkUser 拥有。OS X 不会抱怨库损坏。
我认为正在发生的事情
因此,显然,通过登录窗口登录时访问 /home/someNetworkUser 的第一个进程由 root 拥有。automountd 将注意到并挂载主目录,并将其也归 root 所有。我知道登录窗口首先获取 someNetworkUser 的 Kerberos 票证,否则挂载将失败。显然,使用 su 时情况有所不同。使用 su 时访问 /home/someNetworkUser 的第一个进程似乎由 someNetworkUser 而不是 root 拥有。
我不太清楚登录过程中涉及哪些过程,以及为什么登录窗口和 su 之间会有所不同。我已经尝试将 /etc/pam.d/login(据我所知,loginwindow 使用它)与 /etc/pam.d/su 几乎相同 - 但无济于事。
我还注意到,当与 AFP 服务器的连接暂时中断时(我可以通过重新启动 AFP 守护进程故意中断连接),主目录会在连接恢复时重新挂载。不过,这一次,目录归正确的用户所有,而不是 root 用户。这似乎很合乎逻辑,因为此时,尝试访问主目录的是用户的进程,而不是 root 的进程。
认真解决问题的想法
但现在我陷入了困境。我不知道如何以任何合理的方式让主目录归相应用户所有。我有两个想法可以分享,但我并不满意:
- 创建一个登录脚本卸载主目录。脚本需要以 root 身份运行。然后我希望 automountd 为用户重新挂载目录。这将非常不安全,而且无论如何它可能不会起作用,因为主目录当时很忙。
- 创建一个 PAM 插件,该插件在 pam_krb5 获得 Kerberos 票证后只访问用户的主目录。实际上,它必须等到 pam_opendirectory 找到用户的主目录应驻留在何处;否则我必须硬编码一些路径,这可不是什么好事。
你有什么想法?