首页>教程>Linux 命令手册> 用户与权限管理 >Linux useradd 命令 - 创建新用户或修改新建用户时的默认配置

Linux useradd 命令 - 创建新用户或修改新建用户时的默认配置

useradd 命令是类 Unix 系统(Linux、FreeBSD 等)中用于创建新用户账户的通用命令,该命令还可以修改新建用户时使用的默认配置。在创建新用户时可以指定用户的 UID、根目录、登录 Shell、所属用户组、账户过期时间等信息,是创建用户的一款基础性工具,在创建用户时,该命令会同步修改 /etc/passwdetc/shadow/etc/group 等系统账户配置文件中的信息。

相似功能命令对比

如下给出一些具有相似功能的命令之间的对比,使你容易选择正确的工具:

  • adduser: Debian / Ubuntu 系统下创建用户的工具,提供交互功能
  • pw: FreeBSD 系统中用于用户管理的命令,功能非常的全面
  • usermod: 用于修改已经创建的用户的属性,注意与 useradd 修改属性的区别,useradd 修改的是创建用户时基于的默认配置

[!TIP]

如果是在 Debian 系的发行版中推荐使用 adduser 命令创建用户

useradd 命令语法结构

useradd 命令包含三种形式的基础语法结构,分别用于创建用户、查看默认配置、修改默认配置:

1)指定用户名,创建新用户:

useradd [选项] 用户名

2)当 -D 选项后不使用选项时,查看用户的默认配置:

useradd -D

3)当 -D 选项后指定选项时,修改用户的对应的默认配置:

useradd -D [可修改选项] [参数值]

useradd 命令使用示例

如下给出一些 useradd 命令的使用示例,便于更好的理解如何使用 useradd 命令。

创建可登录的用户

先给出一个创建完整的用户的示例,使用该示例你可以创建一个可以登录的用户:

1)把密码 123456 生成加密后的密码:

openssl passwd -1 123456

加密后的密码为:

$1$h0bndt3y$Q402D7KNTidYPNvIS4Pup0

2)执行如下命令创建用户:

sudo useradd -p '$1$h0bndt3y$Q402D7KNTidYPNvIS4Pup0' -m -s /bin/bash testuser

[!TIP]

也可以使用 sudo useradd -m -s /bin/bash testuser 命令创建用户时不设置密码,创建用户后使用 passwd 命令设置用户密码。

创建普通用户

在命令后指定用户名字符串,创建新用户:

useradd testuser

如上的命令会创建名为 testuser 的用户,同时自动创建同名的用户组,不创建根目录,未设置密码。

创建用户并自动创建根目录

使用 -m--create-home 选项在创建用户时自动创建用户的根目录:

useradd -m testuser2

如上的命令会创建名为 testuser2 用户,创建 /home/testuser2 根目录。

创建用户并指定登录 Shell

使用 -s--shell 选项在创建用户时指定用户的登录 shell:

useradd -m -s /bin/bash testuser3

创建用户并指定 UID

使用 -u--uid 选项在创建用户时指定用户的 UID:

useradd -u 1050 testuser4

创建用户并指定主组与附加组

使用 -g 选项指定主组,-G 选项指定附加组,多个附加组使用英文逗号分割开来:

useradd -g root -G wheel,www testuser5

创建系统用户

使用 -r--system 选项创建系统用户:

useradd -r nginx

查看系统默认用户配置

使用 -D--defaults 选项查看创建新用户使用的默认配置:

useradd -D

修改系统默认用户的根目录前缀

-D--defaults 选项的后面附加 -b 选项,设置创建用户时使用的根目录的前缀值:

useradd -D -b /data/home

这样创建的用户的根目录不是在 /home 目录下,而是在 /data/home 目录下。

useradd 命令选项详解

如下给出 useradd 命令的选项的详细解释说明:

选项选项说明
--badname允许使用不符合系统命名规范的字符串作为用户名
-b, --base-dir BASE_DIR设置默认的根目录的前缀,当未使用 -d 选项指定根目录时,使用该前缀
-c, --comment COMMENT添加用户的备注信息,通常为的用户全名
-d, --home-dir HOME_DIR指定用户使用的根目录
-D, --defaults查看下面的查看或修改用户配置部分的内容
-e, --expiredate EXPIRE_DATE设置账户的过期日期,日期格式为 YYYY-MM-DD
-f, --inactive INACTIVE设置密码过期后多少天锁定账户,0 为立即锁定,-1 为不启用该设置
-F, --add-subids-for-system创建系统用户时,同步更新系统配置文件 /etc/subuid/etc/subgid
-g, --gid GROUP指定用户的主组,可以使用组名或 GID
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]指定用户的附加组,多个附加组之间使用逗号分隔
-h, --help显示帮助信息并退出
-k, --skel SKEL_DIR自定义 skeleton 目录,创建根目录时复制该目录中的文件
-K, --key KEY=VALUE覆盖系统文件 /etc/login.defs 中的默认配置
-l, --no-log-init不将用户加入到 lastlog、faillog 日志数据库当中
-m, --create-home创建用户时,自动创建用户的根目录
-M, --no-create-home创建用户时,不创建用户的根目录
-N, --no-user-group创建用户时,不创建与用户同名的主组,而是使用系统默认主组
-o, --non-unique不要求 UID 具有唯一性,需要与 -u 选项搭配一起使用
-p, --password PASSWORD设置用户的密码,但是使用的密码必须是加密后的密码,可以使用 openssl passwd -1 你的密码 指令生成加密后的密码
-r, --system创建的用户为系统用户
-R, --root CHROOT_DIR在 chroot 环境中执行操作
-P, --prefix PREFIX_DIR把修改应用 PREFIX_DIR 目录下的文件系统的配置文件
-s, --shell SHELL指定用户的登录 Shell,需要使用绝对路径
-u, --uid UID指定用户的 UID
-U, --user-group强制创建与用户名同名的主组
-Z, --selinux-user SEUSER为用户指定 SELinux 用户
--selinux-range SERANGE设置 SELinux MLS 权限范围,需与 -Z 选项搭配一起使用

可修改的默认配置项

可以使用 useradd -D 命令修改的用户默认配置选项只有如下 5 个:

选项功能说明
-b, --base-dir HOME设置新建用户时使用的默认根目录前缀
-e, --expiredate EXPIRE设置新建用户时使用的默认账户过期日期
-f, --inactive INACTIVE设置新建用户时使用的密码过期后的宽限天数
-g, --gid GROUP设置新建用户时使用的默认主用户组
-s, --shell SHELL设置新建用户时使用的默认登录 Shell

关键配置文件说明

在使用 useradd 命令新建用户的时候,会修改一些配置文件,如下给出与用户相关的一些配置的解释说明:

文件路径作用说明
/etc/passwd存储用户账户的基本信息,如:登录名、UID、GID、家目录、Shell 等
/etc/shadow存储用户账户需要加密的信息,如加密后的密码等
/etc/group存储用户组的信息
/etc/gshadow存储用户组需要加密的信息
/etc/default/useradd定义在创建用户时的需要使用的默认配置的选项值
/etc/shadow-maint/useradd-pre.d/*添加用户前需要执行的脚本的目录
/etc/shadow-maint/useradd-post.d/*添加用户后需要执行的脚本的目录
/etc/skel/存放初始化用户根目录时使用的模板目录
/etc/subgid配置每个用户的从属组 GID 的范围
/etc/subuid配置每个用户的从属用户 UID 的范围
/etc/login.defs隐藏密码相关的全局配置策略

useradd 命令的退出状态码

useradd 命令执行完成后会返回一个状态码,根据其返回的值,可以判断其执行所处的状态:

状态码含义说明
0执行成功
1无法更新密码文件
2命令语法无效
3选项参数无效
4UID 已被占用
6指定的用户组不存在
9用户名或组名已存在
10无法更新组文件
12无法创建用户的根目录
14无法更新 SELinux 用户的映射
19用户名或组名不符合命名规则

结语

useradd 命令是类 Unix 系统(Linux、FreeBSD 等)中最基础、最通用的用户创建工具,可以方便的在自动化脚本中使用,是服务器运维经常使用的命令。

在本文中介绍了 useradd 命令的基本语法结构,给出了 useradd 命令的详细使用示例,最后也给出了 useradd 命令的所有选项的详细解释说明。