useradd 命令 & /etc/default/useradd 详解 & /etc/login.defs 详解
Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下:
[root@localhost ~]# useradd [选项] 用户名
该命令常用的选项及各自的含义如图所示

其实,系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户。例如:
[root@localhost ~]# useradd lamp
此行命令就表示创建 lamp 普通用户。
不要小看这条简单的命令,它会完成以下几项操作:
- 在 /etc/passwd 文件中创建一行与 lamp 用户相关的数据
[root@localhost ~]# grep "lamp" /etc/passwd
lamp:x:500:500::/home/lamp:/bin/bash
可以看到,用户的 UID 是从 500 开始计算的。同时默认指定了用户的家目录为 /home/lamp/ ,用户的登录 Shell 为 /bin/bash。
- 在 /etc/shadow 文件中新增了一行与 lamp 用户密码相关的数据
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!!:15710:0:99999:7:::
当然,这个用户还没有设置密码,所以密码字段是 "!!" ,代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等。
- 在 /etc/group 文件中创建一行与用户名一模一样的群组:
[root@localhost ~]# grep "lamp" /etc/group
lamp:x:500:
该群组会作为新建用户的初始组。
- 在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息:
[root@localhost ~]# grep "lamp" /etc/gshadow
lamp:!::
当然,我们没有设定组密码,所以这里没有密码,也没有组管理员。
- 默认创建用户的主目录和邮箱
[root@localhost ~]#ll -d /home/lamp/
drwx------ 3 lamp lamp 4096 1月6 00:19 /home/lamp/
[root@localhost ~]#ll /var/spod/mail/lamp
-rw-rw---- 1 lamp mail 0 1月6 00:19 /var/spool/mail/lamp
注意这两个文件的权限,都要让 lamp 用户拥有相应的权限。
- 将 /etc/skel 目录中的配置文件复制到新用户的主目录中。
除了默认创建用户,我们还可以利用 useradd 命令的各种选项亲自定制要创建的用户,例如
[root@localhost ~]# groupadd lamp1 # 先手工添加 lamp1 用户组,因为我一会儿要把 lamp1 用户的初始迎指定过来,如果不事先建立,则会报告用户组不存在
[root@localhost ~]# useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1 # 在建立用户 lamp1 的同时,指定了 UID(550)、初始组(lamp1)、附加组(root)、家目录(/home/lamp1/)、用户说明(test user)和用户登录 Shell(/bin/bash)
[root@localhost ~]# grep "lamp1" /etc/passwd /etc/shadow /etc/group # 同时查看三个文件
/etc/passwd:lamp1:x:550:502:test user:/home/lamp1:/bin/bash # 用户的 UID 、初始组、用户说明、家目录和登录 Shell 都和命令手工指定的一致
/etc/shadow:lamp1:!!:15710:0:99999:7::: # lamp1 用户还没有设定密码
/etc/group:root:x:0:lamp1 # lamp1 用户加入了 root 组,root 组是 lamp1 用户的附加组
/etc/group:lampl:x:502: # GID 为 502 的组是 lamp1 组
[root@localhost ~]#ll -d /home/lamp1/
drwx------ 3 lamp1 lamp1 4096 1月6 01:13 /home/lamp1/ # 家目录也建立了,不需要手工建立
通过以上 2 种方式,都可以成功创建用户。通常情况下,根本不需要手工指定任何内容,因为使用默认值就可以满足我们的要求。那你有没有想过,useradd 命令的这些默认值保存哪里,能否手工修改呢?
答案是肯定的。useradd 命令在添加用户时参考的默认值文件主要有两个,分别是 /etc/default/useradd 和 /etc/login.defs 。
/etc/default/useradd 文件
首先,使用 Vim 命令查看 /etc/default/useradd 文件中包含哪些内容
[root@localhost ~]#vim /etc/default/useradd
# useradd defaults file
GR0UP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
另外,也可以直接通过命令进行查看,结果是一样的
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
-D 选项指的就是查看新建用户的默认值。
对此文件中的各项做的详细解释如图所示

注意,此文件中各选项值的修改方式有 2 种,一种是通过 Vim 文本编辑器手动修改,另一种就是使用文章开头介绍的 useradd 命令,不过所用的命令格式发生了改变
useradd -D [选项] 参数
用此命令修改 /etc/default/useradd 文件,可使用的选项如图所示

例如,要修改新用户的默认 Shell 为 /bin/csh,可以使用如下方式
[root@localhost ~]# useradd -D -s /bin/csh
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
通过 /etc/default/useradd 文件,大家仅能修改有关新用户的部分默认值,有一些内容并没有在这个文件中,例如修改用户默认的 UID 、GID ,以及对用户密码的默认设置,对这些默认值的修改就需要在 /etc/login.defs 文件中进行。
其实,useradd 命令创建用户的过程是这样的,系统首先读取 /etc/default/useradd 和 /etc/login.defs ,根据这两个配置文件中定义的规则添加用户,也就是向 /etc/passwd 、/etc/group 、/etc/shadow 、/etc/gshadow 文件中添加用户数据,接着系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主目录,最后复制 /etc/skel 目录中的所有文件到此主目录中,由此,一个新的用户就创建完成了。
当然,如果你能彻底掌握 useradd 命令创建用户的整个过程,完全可以手动创建用户。
/etc/login.defs 详解
/etc/login.defs 文件用于在创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。
需要注意的是,该文件的用户默认配置对 root 用户无效。并且,当此文件中的配置与 /etc/passwd 和 /etc/shadow 文件中的用户信息有冲突时,系统会以 /etc/passwd 和 /etc/shadow 为准。
读者可自行使用 vim /etc/login.defs 命令查看该文件中的内容,对文件中的各个选项做出的具体解释如图所示


浙公网安备 33010602011771号