第 8 章 · 06 用户与组:`useradd`、`passwd`、`usermod`


文档摘要

第 8 章 · 06 用户与组: 、 、 本节摘要:Linux 是多用户系统——每个能登录的人是一个「用户」,用户归入「组」,权限按「用户/组/其他」三级分配(呼应第 5 章)。本节讲用户管理的完整闭环:用 建用户(讲清 建家目录、 指定 shell 的关键选项)、用 设密码、用 改属性(如 加入组)、用 删用户连同家目录。还要讲清 / / 三个核心配置文件各自存什么。 内容来源:综合用户管理知识整理,套用体系化模板。 学习目标 阅读完本节,你应当能够: 用 建一个带家目录、指定 shell 的新用户。 用 给用户设密码。 用 把用户加入组(追加,不覆盖)。 用 删除用户连同家目录。 说清 (用户基本信息)、 (密码哈希)、 (组)各自存什么。 理解「主组」与「附加组」的差别。

第 8 章 · 06 用户与组:useraddpasswdusermod

本节摘要:Linux 是多用户系统——每个能登录的人是一个「用户」,用户归入「组」,权限按「用户/组/其他」三级分配(呼应第 5 章)。本节讲用户管理的完整闭环:用 useradd 建用户(讲清 -m 建家目录、-s 指定 shell 的关键选项)、用 passwd 设密码、用 usermod 改属性(如 -aG 加入组)、用 userdel -r 删用户连同家目录。还要讲清 /etc/passwd//etc/shadow//etc/group 三个核心配置文件各自存什么。

内容来源:综合用户管理知识整理,套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. useradd -m -s /bin/bash 用户名 建一个带家目录、指定 shell 的新用户。
  2. passwd 用户名 给用户设密码。
  3. usermod -aG 组名 用户名 把用户加入组(追加,不覆盖)。
  4. userdel -r 用户名 删除用户连同家目录。
  5. 说清 /etc/passwd(用户基本信息)、/etc/shadow(密码哈希)、/etc/group(组)各自存什么。
  6. 理解「主组」与「附加组」的差别。

一、设计动机:用户、组、家目录、登录 shell

Linux 的多用户模型由几个概念构成:

  • 用户(user):一个能登录或运行程序的身份。有 UID(数字)、用户名、家目录、登录 shell。
  • 组(group):用户的集合,用于批量分配权限(如 docker 组的成员能不 sudo 用 docker)。有 GID、组名。
  • 家目录(home):用户的「私人空间」,通常 /home/用户名,用户对自己的家目录有完全权限。
  • 登录 shell:用户登录后默认启动的 Shell(通常 /bin/bash)。设为 /sbin/nologin 则禁止登录(服务账号常用)。

每个用户有一个主组(primary group,通常与用户名同名,创建时自动建),还可属于多个附加组(supplementary groups,用 -aG 加入)。权限检查时(第 5 章),系统先看属主、再看主组与附加组、最后看其他。

二、高频组合与实战

创建用户

sudo useradd -m -s /bin/bash alice # -m: 创建家目录 /home/alice(不加 -m 则无家目录, 后续登录会报错) # -s: 指定登录 shell 为 bash(不加 -s 在某些发行版默认是 sh, 不友好)

⚠️ 注意:useradd 不带 -m 不建家目录,不带 -s 可能默认 sh——这是新手常踩的坑。养成习惯 useradd -m -s /bin/bash 一起加。或者用更友好的 adduser(Debian/Ubuntu 系有,交互式问你所有信息)。

设密码

sudo passwd alice # 给 alice 设密码(会提示输入两次) passwd # 不带参数 = 改自己的密码

没有密码的用户,某些认证方式(如 SSH 密码登录)无法登录。但服务账号(跑服务的用户)通常故意不设密码、shell 设 nologin,防止被人登录。

修改用户属性

sudo usermod -aG docker alice # 把 alice 加入 docker 组(附加组) sudo usermod -aG sudo alice # 加入 sudo 组(可执行 sudo, Ubuntu/Debian) sudo usermod -s /bin/zsh alice # 改默认 shell 为 zsh sudo usermod -L alice # 锁定账号(禁用密码登录) sudo usermod -U alice # 解锁

⚠️ 注意:-aG-a(append)绝不能漏!只写 -G docker 会把用户从其他所有附加组移除(覆盖),只留 docker 组——这是灾难性的常见错误。永远写 -aG

删除用户

sudo userdel alice # 删用户, 但保留家目录(以防有数据) sudo userdel -r alice # -r: 连家目录一起删(确认无数据再用)

查看用户与组

id alice # 查 alice 的 UID/GID/所属组 groups alice # 查 alice 在哪些组 whoami # 当前我是谁 who # 当前谁登录了

三、三个核心配置文件

用户与组的信息存在三个文本文件里,理解它们有助于排查:

/etc/passwd —— 用户基本信息

alice:x:1001:1001:Alice:/home/alice:/bin/bash 用户名:密码占位:UID:GID:描述:家目录:shell

x 表示密码不存这里(存 shadow)。每行一个用户。能用 grep alice /etc/passwd 查。

/etc/shadow —— 密码哈希

alice:$6$xxx...hashed...:19000:0:99999:7:::

存密码哈希(只有 root 能读,安全)。密码策略(过期天数等)也在这。

/etc/group —— 组信息

docker:x:998:alice,bob 组名:密码占位:GID:成员列表

成员列表列附加组成员(主组成员不在这列)。

四、踩坑与排错

坑 1:useradd 忘了 -m,新用户无家目录

sudo useradd bob # 没建家目录 su - bob # 报错: "No directory, logging in with HOME=/"

修复:sudo mkdir /home/bob && sudo chown bob:bob /home/bob,或干脆 userdel bob 重建时加 -m

坑 2:usermod -G(不带 a)清空了用户的所有附加组

sudo usermod -G docker alice # 灾难! alice 从 sudo 组被移除了! sudo usermod -aG docker alice # 对! -a 追加, 不影响其他组

永远写 -aG 而非 -G。如果不慎写错,从 /etc/group 查用户原来在哪些组,重新加回。

坑 3:加入组后权限不立即生效

sudo usermod -aG docker alice # alice 需要重新登录, 新的组成员身份才生效

组成员身份在登录时读入,加入组后当前已登录的会话不更新,需重新登录(或 newgrp docker 临时切到新组)。

坑 4:删用户时它的进程还在跑

sudo userdel -r alice # 报错: "user alice is currently used by process 1234"

先停掉该用户运行的进程(pkill -u alice),再 userdel。

本节要点回顾

  1. 建用户:useradd -m -s /bin/bash 名(-m 建家目录、-s 指定 shell,缺一不可);或用交互式的 adduser(Debian/Ubuntu)。
  2. 设密码:passwd 用户;服务账号常不设密码、shell 设 nologin 防登录。
  3. 改属性:usermod -aG 组 用户(加组,永远写 -aG 别写 -G)、-s 改 shell、-L/-U 锁定/解锁。
  4. 删用户:userdel -r 用户(连同家目录,确认无数据)。
  5. 三个文件:/etc/passwd(基本信息,UID/GID/家目录/shell)、/etc/shadow(密码哈希,仅 root 可读)、/etc/group(组与成员)。
  6. 加组后需重新登录才生效(或 newgrp 临时切组)。

下一节讲 sudo——为什么它是「受限提权」而非「直接给 root」,以及它的安全模型。


发布者: 作者: 灏天文库 转发
评论区 (0)
U