Linux用户管理命令useradd详解
useradd [选项] 登录名
useradd -D
useradd -D [选项]
该命令用于创建新用户或修改默认用户创建行为。在大多数系统中,adduser 是 useradd 的符号链接,功能一致。若不带 -D 选项,useradd 将结合命令行参数与系统默认值来创建用户,并可能自动更新系统配置文件、生成主目录并复制初始文件。默认情况下,还会为新用户创建同名组(可通过 -N 或 -U 控制)。
1. 用户类型分类
- 超级用户:如
root,拥有最高权限,其UID通常为 0。 - 系统账户:也称虚拟用户,用于支持服务运行(如
apache、ftp),一般不可登录,且UID范围受限(例如在 CentOS 7 中为 1~999)。 - 普通用户:受权限限制,新建用户默认属于此类,
UID从 1000 开始。
注:每个用户的
UID必须唯一,相当于身份证号。尽管可手动修改/etc/passwd,但应避免重复。
2. 常用参数说明
| 参数 | 含义 |
|---|---|
-d /path/to/home |
指定用户的主目录路径,不指定时默认为 /home/用户名 |
-m |
若主目录不存在,则创建它;同时将骨架目录内容(-k 指定)复制过去 |
-M |
不创建主目录,即使系统默认开启创建 |
-g 组名或ID |
设置用户的初始登录组,组必须存在 |
-G 组1,组2,... |
添加用户到多个附加组,组间以逗号分隔,无空格 |
-s /path/to/shell |
指定登录后使用的 shell,如 /sbin/nologin 可禁用登录 |
-r |
创建系统账户,使用专用 UID 范围(SYS_UID_MIN ~ SYS_UID_MAX),不自动创建主目录 |
3. 高级选项
| 参数 | 说明 |
|---|---|
-b /base/dir |
定义主目录的基路径,若未设 -d,则主目录为 /base/dir/用户名 |
-c "描述信息" |
添加用户注释字段,常用于存储真实姓名 |
-e YYYY-MM-DD |
设置账户过期日期,格式为年月日 |
-f 天数 |
密码过期后多少天内仍可登录,0 表示立即失效,-1 禁用此功能 |
-k /skel/dir |
自定义骨架目录,用于复制到新用户的主目录中(仅在 -m 有效时生效) |
-K KEY=VALUE |
覆盖 /etc/login.defs 中的默认设置,如 -K PASS_MAX_DAYS=-1 表示密码永不过期 |
-u UID |
手动指定用户 UID,需确保唯一性(除非配合 -o) |
-o |
允许使用重复 UID,仅与 -u 一起使用才有意义 |
-p "加密密码" |
提供加密后的密码字符串(不推荐,易泄露) |
-U |
为用户创建同名组,并将其加入该组 |
-Z SEL_USER |
指定 SELinux 用户身份 |
注意:使用
-D时不带其他参数,显示当前默认设置;搭配其他选项则用于修改默认值。有效可改项包括:-b、-e、-f、-g、-s。
4. 核心配置文件
/etc/login.defs:定义用户创建规则,如UID_MIN、PASS_MAX_DAYS等/etc/default/useradd:存放useradd默认参数,如HOME、SHELL、SKEL/etc/skel/:新用户主目录模板,所有文件将被复制至新用户主目录/etc/passwd:用户基本信息/etc/shadow:用户密码及安全策略/etc/group:组信息/etc/gshadow:组密码与管理员信息
5. 退出状态码
| 返回值 | 含义 |
|---|---|
| 0 | 成功执行 |
| 1 | 无法更新系统文件 |
| 2 | 命令语法错误 |
| 3 | 参数无效 |
| 4 | UID 已被占用(未启用 -o) |
| 6 | 指定的组不存在 |
| 9 | 用户名已存在 |
| 10 | 无法写入组文件 |
| 12 | 主目录创建失败 |
| 14 | SELinux 映射更新失败 |
6. 实际操作示例
- 创建用户并自动生成主目录和同名组
useradd alice
id alice
# 输出:uid=1002(alice) gid=1002(alice) 组=1002(alice)
- 指定
UID并创建用户
useradd -u 1050 bob
tail -1 /etc/passwd
# bob:x:1050:1050::/home/bob:/bin/bash
- 自定义主目录路径
useradd -d /opt/data/john john
# 此时主目录为 /opt/data/john
- 添加用户并分配主组与附加组
useradd -g developers -G admin,ops jane
id jane
# uid=1051(jane) gid=1003(developers) 组=1003(developers),0(root),1004(ops)
7. 补充:删除用户命令
userdel [选项] 用户名
-r:移除用户主目录和邮件文件(位于/var/mail/)
userdel -r alice
# 移除用户 alice 及其主目录
注意:若用户所在组有其他成员,即使使用
-r也无法删除该组。