我创建了一些用户:
$ 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
您需要手动创建用户目录。这需要三个步骤:
- 按照 创建目录
/etc/passwd
,通常已经有一个 /home/login 条目。 - 从 /etc/skel 复制初始文件
最后设置正确的权限:
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 之类的目录服务,它将继续解决这个问题。