PAM:在 pam_mkhomedir 之前执行命令?

PAM:在 pam_mkhomedir 之前执行命令?

当用户登录系统并且没有主目录时,我们希望使用以下方法创建用户的主目录pam_mkhomedir。这是一种常见的做法。以下是 pam_mkhomedir 的简要描述:

如果会话开始时用户主目录不存在,pam_mkhomedir PAM 模块将创建一个用户主目录。这样,用户就可以出现在中央数据库(如 NIS、kerberos 或 LDAP)中,而无需使用分布式文件系统或预先创建大量目录。骨架目录(通常为 /etc/skel/)用于复制默认文件,并为创建设置 umask。

但是,这是运行 ZFS 的 FreeBSD 8.2 系统。我们需要先执行 ZFS 命令,因为我们想要每个用户一个 ZFS 文件系统.pam_mkhomedir可以做一个mkdir,但我们需要做一些类似的事情zfs create /zpool/home/$USER

是否有人知道是否可以使用 PAM 在用户第一次登录会话期间执行命令?

答案1

有一个名为pam_exec- 如果您编写了一个检查和/或创建 ZFS 卷的脚本,则可以将其链接到现有的 PAM 规则中,并保持良好状态,而无需假设交互式登录、默认 shell 和骨架目录等。例如,您可以

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER

或任何适合您的特定设置。

(正如汤姆·肖 (Tom Shaw) 在评论中指出的那样,havesession required pam_mkhomedir.so是多余的。)

答案2

值得指出的是,正如所问的那样,您的问题包含一个无效的假设:即使 PAM 也不知道这是否是用户的首次登录;它只知道用户是否有主目录。

因此,考虑到这一警告,这不是 PAM 所做的,但您可以轻松地运行 中的某些操作/etc/bashrc,使用命令之前检查用户主目录中的点文件,然后删除该点文件。需要 root 权限?适当锁定的sudo或 setuid 二进制文件可能最适合您。这两个选项还为您提供了将点文件放在用户无法修改或删除的地方的选项(如果您关心这类事情)。

答案3

因此,您有两个选择:

1) 修改 pam_mkhomedir 的源代码,先创建 zfs 文件系统,然后再创建目录。2) 让 pam_mkhomedir 正常运行,然后添加一个脚本来检查是否有文件夹不在自己的 zfs 文件系统上,而用户已注销。当您发现这些情况时,移动 /home 目录,创建文件系统,然后将文件移回目录。

我怀疑最初一天让用户留在主 /home 上不会引起太多问题,所以我会选择后一种选择,它更简单。

相关内容