创build用户后创build主目录

我创build了一些用户:

$ useradd john

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

我想创build目录,将它们发送给相应的用户,复制所有的骨架文件并将它们发送给相应的用户。 但是如果有一个像useradd -m这样的命令不会再创build用户,而是创build目录,那会更好。

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

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的发行版在第一次login时会为您创build一个新的主目录,只要在/ etc / passwd文件夹中指定该目录即可。

要testing一下,做一个“苏”,看看它是否“正确的事情”。 如果没有的话,我想这个脚本会很好地工作。

你也可以使用mkhomedir_helper

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

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

  1. 创build符合/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= .

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

编辑:添加-r复制也目录。

 mkdir -p /home/john chown john:john /home/john usermod -d /home/john john 

这应该做我相信的诡计

您可以使用像pam_mkhomedir这样的东西,以防止这将成为未来的任何用户的问题。 pam_mkhomedir是一个PAM模块,如果它不存在,它将在login时自动创build一个用户的主目录,并使用/ etc / skel(或者你指定的任何skel目录)中的文件填充它。

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

在我的情况下,家庭卷已损坏,我决定只是从头开始重build,因为涉及的数据不多,但我想保留用户的login信息,所以我用这个脚本手动重新创build了主目录:

 #!/bin/bash cat /etc/passwd | while IFS=: read nxigcdr do # my system has uid started at 1000, but has nfsnobody at 65534: if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]] then cp -av /etc/skel "$d" chown -R "$i:$g" "$d" # may needed in SELinux system: restorecon -R "$d" # add your chmod as your need: chmod -R o-rw "$d" fi done 

如果你编辑/etc/login.defs来包含

 CREATE_HOME yes 

那么主目录将自动为未来的用户创build,除非您告诉系统要这样做。

另一个select是使用PAM进行login,并使用pam_mkhomedir模块在第一次login时自动创buildhomedir。

做一个useradd之后,我的第一步是su - <user>

创build主目录,复制骨架等 – 至less在我最常使用的CentOS 4框上。

这正是mkhomedir_helper $USERNAME命令的作用。

你可以简单地编辑/ etc / passwd。 第二个到最后一个字段是用户的主目录。

 greeblesnort:x:1000:1000:greeblesnort,,,:/home/greeblesnort:/bin/bash 
 usermod -d /home/john john 

要么

 usermod --home /home/john john 

并阅读

 man usermod 

;)