Linux useradd 命令 - 创建新用户或修改新建用户时的默认配置
useradd 命令是类 Unix 系统(Linux、FreeBSD 等)中用于创建新用户账户的通用命令,该命令还可以修改新建用户时使用的默认配置。在创建新用户时可以指定用户的 UID、根目录、登录 Shell、所属用户组、账户过期时间等信息,是创建用户的一款基础性工具,在创建用户时,该命令会同步修改 /etc/passwd、etc/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 | 选项参数无效 |
| 4 | UID 已被占用 |
| 6 | 指定的用户组不存在 |
| 9 | 用户名或组名已存在 |
| 10 | 无法更新组文件 |
| 12 | 无法创建用户的根目录 |
| 14 | 无法更新 SELinux 用户的映射 |
| 19 | 用户名或组名不符合命名规则 |
结语
useradd 命令是类 Unix 系统(Linux、FreeBSD 等)中最基础、最通用的用户创建工具,可以方便的在自动化脚本中使用,是服务器运维经常使用的命令。
在本文中介绍了 useradd 命令的基本语法结构,给出了 useradd 命令的详细使用示例,最后也给出了 useradd 命令的所有选项的详细解释说明。