创建用户后创建主目录

创建用户后创建主目录

我创建了一些用户:

$ useradd john

我忘记指定-m创建主目录和将骨架文件复制到每个用户的参数。现在我想这样做,但又不想重新创建所有用户(一定有更简单的方法)。那么,有没有办法创建用户目录并复制骨架文件呢?

我考虑过创建目录,将它们分配给相应的用户,复制所有骨架文件并将它们分配给相应的用户。但如果有这样的命令useradd -m不再创建用户,而是创建目录,那就更好了。

答案1

这听起来可能是一个愚蠢的想法,但如果用户实际上没有做任何事情,你可以这样做:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

然后编辑 /tmp/users.list 以仅包含您想要的用户。然后执行以下操作:


for i in `cat /tmp/users.list`
do
    userdel $i
    useradd -m $i
done

但是,许多基于 Redhat 的发行版会在您首次登录时为您创建一个新的主目录,只要在 /etc/passwd 中指定该目录即可。

要测试这一点,请执行“su - ”并查看它是否执行了“正确的事情”。如果没有,我认为上述脚本将运行得很好。

答案2

您也可以使用mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]

答案3

您需要手动创建用户目录。这需要三个步骤:

  1. 按照 创建目录/etc/passwd,通常已经有一个 /home/login 条目。
  2. 从 /etc/skel 复制初始文件
  3. 最后设置正确的权限:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

顺便说一句:我-m也总是想念 useradd 的选项。至少基于 Debian 的系统应该有一个adduser命令,我推荐使用 useradd。如果你错过了-m选项,可能也值得考虑deluser,然后使用适当的选项重新创建用户。

编辑:添加了-r复制目录的功能。

答案4

你可以使用类似pam_mkhomedir以防止将来任何用户遇到此问题。pam_mkhomedir 是一个 PAM 模块,如果用户主目录不存在,它会在用户登录时自动创建一个主目录,并使用 /etc/skel(或您指定的任何 skel 目录)中的文件填充该目录。

这也是一个很好的可扩展方法,因为如果您将来将用户存储库切换到 LDAP 之类的目录服务,它将继续解决这个问题。

相关内容