当用户login到系统并且没有主目录时,我们希望使用pam_mkhomedir创build用户的主目录。 这是一个普遍的做法。 以下是对pam_mkhomedir的简要说明:
如果会话开始时不存在,则pam_mkhomedir PAM模块将创build一个用户主目录。 这允许用户在不使用分布式文件系统或预先创build大量目录的情况下出现在中央数据库(例如NIS,kerberos或LDAP)中。 骨架目录(通常是/ etc / skel /)用于复制默认文件,并为创build设置一个umask。
但是,这是一个运行ZFS的FreeBSD 8.2系统。 我们需要首先执行一个ZFS命令,因为我们需要每个用户一个ZFS文件系统 。 pam_mkhomedir可以做一个mkdir ,但是我们需要做一些类似于zfs create /zpool/home/$USER 。
有谁知道在用户的第一次login会话期间是否可以使用PAM执行命令?
有一个名为pam_exec的PAM模块 – 如果您编写一个检查和/或创buildZFS卷的脚本,则可以将其链接到现有的PAM规则中,并保持良好的状态,而不会假设交互式login,默认shell和框架目录等。例如,你可以有
session required pam_unix.so session required pam_exec.so check_zfs.sh $PAM_USER
或任何适合您的具体设置。
(正如汤姆·肖(Tom Shaw)在评论中指出的那样, session required pam_mkhomedir.so是多余的。)
正如所问,值得指出的是,你的问题包含一个无效的假设:即使PAM不知道是否是用户的第一次login, 它只知道用户是否有主目录。
因此,考虑到这一点,不是PAM做的,但是你可以很容易地在/etc/bashrc运行一些东西,命令前面是用户主目录中的一个dotfile文件,然后是一个dotfile文件。 需要root权限? 无论是正确locking的sudo还是setuid二进制文件,都可能最适合您。 这两个选项也让你select把dotfile放在用户不能修改或删除的地方(如果你关心的话)。
所以你有两个select:
1)修改pam_mkhomedir的源文件,在创build目录之前先创buildzfs文件系统。 2)让pam_mkhomedir像平时一样运行,然后添加一个脚本来检查并查看当用户已经注销的文件夹不在自己的zfs文件系统上的时间。 当你捕捉到这些情况时,移动/ home目录,创build文件系统,然后将文件移回目录。
我怀疑留在主要/家庭的用户在第一天不会造成太多的问题,所以我会去后者的select,它更简单。