it-swarm.cn

创建用户后创建主目录

我创建了一些用户:

$ useradd john

我忘了指定参数-m创建主目录,并将骨架文件复制到每个用户。现在我想这样做,而且我不想重新创建所有用户(必须有一种更简单的方法)。因此,有什么方法可以创建用户目录并复制框架文件?

我考虑过要创建目录,将目录授予相应的用户,复制所有框架文件,然后将其授予相应的用户。但是如果有类似useradd -m不会再次创建用户,而是创建目录,效果会更好。

72
cd1

这听起来像是一个愚蠢的主意,但是如果用户实际上没有做任何事情,则可以执行以下操作:

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-”,然后查看它是否“正确”。如果没有,我认为上述脚本会很好地工作。

17
dotwaffle

您也可以使用mkhomedir_helper

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

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

  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= .

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

编辑:添加了-r用于复制目录。

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

我相信那应该可以解决

14
David Rickman

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

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

9
jgoldschrafe

在我的情况下,主卷已损坏,我决定从头开始重建它,因为所涉及的数据不多,但是我想保留用户的登录信息,因此我使用以下脚本手动创建了主目录:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
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
4
S P Arif Sahari Wibowo

如果您编辑/etc/login.defs 包含装有

CREATE_HOME yes

那么除非您告诉系统not这样做,否则将为将来的所有用户自动创建主目录。

另一个选择是使用PAM进行登录,并使用pam_mkhomedir模块在首次登录时自动创建homedir。

2
Jenny D

在完成useradd之后,我的第一步是su - <user>

创建主目录,复制框架等-至少在CentOS 4上,我经常这样做。

0
warren

用用户john登录并从命令行管理程序中写入:

xdg-user-dirs-update

而已!不要使用Sudo或su,您不需要root访问权限即可创建某些目录。从根帐户,您可以使用:

Sudo -u john xdg-user-dirs-update

这样,您将以john身份执行命令,如果您与多个用户犯错,将很有用。

0