PAM:在pam_mkhomedir 之前执行命令?

Ste*_*ski 8 freebsd zfs pam

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

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

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

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

And*_*rew 9

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

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER
Run Code Online (Sandbox Code Playgroud)

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

(正如汤姆肖在评论中指出的那样,拥有session required pam_mkhomedir.so是多余的。)

  • 问题的关键是他希望使用“zfs create”而不是“mkdir”创建主目录。这是通过使用 pam_exec 完成的。该目录此时已存在,因此后续的 pam_mkhomedir 将不执行任何操作! (2认同)