第15章:用户管理基础
18 分钟阅读
第十五章:用户管理基础
想象一下,你的Linux系统是一座摩天大楼,里面住着各种各样的"居民"。有只手遮天的物业老板(root),有负责电梯维护的打工人们(系统用户),还有每天上下班的白领们(普通用户)。这一章,我们就来聊聊这些居民的故事——他们是谁,怎么进来的,怎么管他们。
在Linux的世界里,用户管理可不是闹着玩的。要么你把权限给多了,系统被黑得底裤都不剩;要么你把权限给少了,连自己都登录不进去。所以,且听我细细道来,保证让你听完还想听,笑完还能记住!
15.1 Linux 用户分类
你知道吗?Linux系统里的用户,就像现实世界里的银行卡——卡与卡之间,权限天差地别。有的卡能在银行里横着走(想干嘛干嘛),有的卡连ATM机都吞你钱(处处受限)。Linux也一样,它把用户分成了三六九等,每一等的"待遇"都不一样。
15.1.1 root:UID 0,超级管理员
UID为0的用户,这就是Linux系统里的终极大Boss——root用户,中文名叫"根用户"或"超级管理员"。
root用户有多猛?这么说吧:
- 他能删除系统里任何一个文件,甭管你是系统文件还是你的私人小电影
- 他能修改系统任何一项配置,让Linux从乖巧小绵羊变成狂野大灰狼
- 他能创建和删除任何其他用户,仿佛上帝说"要有光",于是就有了用户
- 他甚至能把自己给删了(别问我为什么要这么干,闲得慌的人什么都做得出来)
UID 是User Identifier的缩写,中文叫"用户标识符",说白了就是系统给每个用户分配的身份证号。root的身份证号是0,所以只要你在系统里看到UID为0的用户,那他就是老大,甭管他叫什么名字——就算他把自己改名叫"小可爱",系统里谁见了都得抖三抖。
温馨提示:root用户虽猛,但也是最危险的。在生产环境中,root直接登录操作就像是在银行金库里裸舞——好看是好看,但万一脚下一滑,后果不堪设想。建议日常使用普通用户,需要权限时再用sudo临时提权。
怎么知道当前用户是不是root?很简单:
| |
看到那个uid=0了吗?这就是root的身份证号。后面那个gid=0是主组ID,我们后面讲组的时候再说。
15.1.2 系统用户:UID 1-999,守护进程
接下来登场的是系统用户,UID范围是1到499或1到999(不同Linux发行版略有差异,Debian/Ubuntu通常是1-999,RHEL/CentOS是1-499)。
系统用户是干嘛的?说白了就是给各种系统服务和守护进程打工的。
守护进程是什么?就是那些在后台默默运行的"打工人"进程,比如:
- sshd:让你的电脑能远程登录的打工进程
- httpd/apache2/nginx:网站服务器的打工进程
- mysqld/postgres:数据库的打工进程
- systemd-journald:系统日志的打工进程
这些进程需要一个"身份"来运行,但又不需要它真的能登录系统操作文件(它就是个程序,又不是人),所以就给它们创建了系统用户。
你可以把系统用户理解为公司的"工号账户"——每个工号只能操作特定的工位(进程对应的工作目录和文件),但工号本身是进不了公司大门的(无法登录系统)。
来看一下你的系统里有哪些系统用户:
| |
看到这些名字了吧?daemon是守护进程(daemon这个名字来源于希腊神话中的"daimon",意思是"超自然的存在"),www-data是给网页服务器打工的,nobody是谁都不拥有的"幽灵用户"——常用于给那些不需要任何特权的进程使用。
15.1.3 普通用户:UID 1000+,日常使用
最后出场的是普通用户,UID从1000或1001开始(取决于系统的UID_MIN和UID_MAX配置)。
普通用户就是你自己——每天坐在电脑前敲代码、写文档、刷视频的这个小可怜。
普通用户的权限有多大?这么说吧:
- ✅ 可以在自己的家目录里为所欲为(家目录就是
/home/用户名) - ✅ 可以运行程序、创建文件、删除自己的文件
- ✅ 可以修改自己的密码
- ❌ 不能修改系统配置
- ❌ 不能访问其他用户的文件(除非对方授权)
- ❌ 不能安装软件到系统目录
- ❌ 不能删除root用户(除非你疯了)
所以普通用户就像是一个高档小区的住户——你可以在自己家里随便造(搞破坏除外),但想动小区的公共设施?对不起,你得找物业(root)。
查看当前系统有多少普通用户:
| |
| |
看到没?uid=1000的小明同学(longx是我的名字,你改成你自己的用户名),他的主组也是1000,但同时加入了sudo组——这意味着他可以临时获得root权限。
📊 Linux 用户分类一览表
pie title Linux用户分类图
"root (UID 0) - 超级管理员" : 1
"系统用户 (UID 1-999) - 守护进程" : 约200+
"普通用户 (UID 1000+) - 人类用户" : 若干| 用户类型 | UID范围 | 数量 | 用途 | 能否登录 |
|---|---|---|---|---|
| root | 0 | 唯一 | 系统最高权限 | ✅ 可以(但不建议) |
| 系统用户 | 1-999 | 约200+ | 运行系统服务 | ❌ 通常不能 |
| 普通用户 | 1000+ | 若干 | 人类日常使用 | ✅ 可以 |
🔑 记住这个口诀
UID 0是老板,系统用户是工号,普通用户是住户。
老板能删库跑路,工号只能干活,住户只能在自己家嗨皮。
15.2 UID 和 GID:用户和组的数字标识
上节我们提到了UID,那GID又是什么?它们俩是什么关系?
UID(User Identifier)就是用户的身份证号,GID(Group Identifier)就是用户所属的组身份证号。
组是什么?可以理解为一个"兴趣小组"。比如你喜欢踢球,进了足球小组;我喜欢唱歌,进了合唱团。在Linux里,一个用户可以加入多个组,组内的所有用户可以共享某些文件的访问权限。
- 主组(Primary Group):每个用户必须有且只有一个主组,用户的文件默认属于这个组。就像你的户口本上的户主——你只能有一个户口本,但你可以挂靠多个集体户口。
- 附加组(Supplementary Group):用户可以加入多个附加组,类似于你参加了多个兴趣小组。
来看个例子:
| |
解释一下这个输出:
uid=1000(longx):用户longx的UID是1000,用户名也是longxgid=1000(longx):用户longx的主组GID是1000,组名也是longxgroups=1000(longx),4(adm),24(cdrom),27(sudo)...:用户加入了这些组
为什么GID和UID都是1000?这是巧合,因为创建用户时默认会创建一个同名主组,GID和UID通常是连续的。
| |
也就是说,在默认配置下:
- UID 1000以下是系统用户
- UID 1000-60000是普通用户
- 超过60000?那是给特殊用途预留的
15.3 useradd 创建用户
终于到了动手环节!创建用户用什么命令?useradd!就像给新员工开账户一样简单。
15.3.1 useradd 用户名 —— 最简单的创建方式
| |
执行完这条命令,系统会:
- 在
/etc/passwd里添加一行xiaoming的信息 - 分配一个UID(通常是1000以上的下一个可用数字)
- 创建一个同名主组(GID = UID)
- 但!不会创建家目录,也不会设置密码
警告:这种最简方式创建的用户,基本就是个"空壳"——没有家目录,登录不了。适合批量创建系统账户,不适合创建真实用户。
15.3.2 useradd -m -s /bin/bash 用户名 —— 完整创建方式
日常使用推荐这种方式:
| |
这下好了,系统会:
- 创建用户xiaoming
- 在
/home下创建/home/xiaoming目录(家目录) - 复制骨架文件到
/home/xiaoming(就是那些.bashrc、.profile之类的配置文件) - 设置登录Shell为bash
创建完成后,别忘了给这个用户设置一个密码:
| |
15.3.3 useradd -u UID 用户名 —— 指定UID创建
有时候你需要指定一个特定的UID(比如要和老系统的用户ID保持一致):
| |
UID 0已经被root占了,所以别想着创建UID 0的用户(除非你想搞事情)。另外,UID 1-999是系统用户专区,强烈建议普通用户使用1000以上的UID。
15.3.4 useradd -g 组名 用户名 —— 指定主组创建
默认情况下,创建用户时会创建一个同名主组。但如果你想让用户加入一个已存在的组作为主组:
| |
15.3.5 useradd 常用选项汇总
| |
| |
15.4 usermod 修改用户
创建用户之后,发现配置错了怎么办?删掉重建?不,聪明人用usermod——这是个"用户信息修改器",专门干改改改的活儿。
15.4.1 usermod -l 新用户名 旧用户名 —— 修改用户名
| |
警告:这个命令只改用户名,不会改家目录名,也不会改其他引用该用户的地方。所以改完之后,家目录还是叫
/home/xiaoming,你可能需要手动改一下:
1 2sudo mv /home/xiaoming /home/xiaohong sudo usermod -d /home/xiaohong xiaohong
15.4.2 usermod -g 组名 用户名 —— 修改用户主组
| |
15.4.3 usermod -aG 组名 用户名 —— 添加用户到附加组
这个是最常用的!假设你的用户想用sudo命令(临时获得root权限),就得把他加到sudo组里:
| |
| |
现在xiaohong可以用sudo了!试试:
| |
15.4.4 usermod -L 用户名 —— 锁定用户
锁定用户,就像把他的账户冻结了——账户还在,但谁也登录不进去:
| |
锁定后会发生什么?用户的密码字段会被加个!前缀,导致密码验证永远失败,但用户文件都还在。
锁定用户比删除用户安全,因为锁定后账户可以随时恢复,删除可就真的没了(除非你有备份)。
15.4.5 usermod 常用选项汇总
| |
15.5 userdel 删除用户
删除用户?userdel命令来帮忙。但删除用户这事儿可不能冲动,冲动是魔鬼,删库跑路可不是开玩笑的。
15.5.1 userdel 用户名 —— 删除用户(保留家目录)
| |
警告:这个命令不会删除家目录!用户没了,但
/home/xiaohong还在,里面可能有重要文件。除非你确认不要了,否则建议保留。
15.5.2 userdel -r 用户名 —— 删除用户(同时删除家目录)
| |
⚠️ 这是不可逆操作!家目录一旦删除,所有文件都没了!建议先备份或者确认清楚再执行。
| |
15.6 passwd 修改密码
创建了用户,当然要设密码!passwd命令就是干这个的——给用户一个身份证明,让系统知道"哦,这是主人,不是闯入者"。
15.6.1 passwd 用户名 —— 普通用户修改自己的密码
| |
15.6.2 passwd -l 用户名 —— 锁定用户(禁用密码登录)
| |
锁定后,用户只能用其他方式登录(比如SSH密钥),但不能用密码登录了。
15.6.3 passwd -u 用户名 —— 解锁用户
| |
15.6.4 passwd -d 用户名 —— 删除密码
| |
删除密码后,用户可以直接登录(有些系统可能会禁止无密码登录),这个操作很危险,慎用!
15.6.5 passwd 常用选项汇总
| |
| |
15.7 /etc/passwd 文件格式详解
说了这么多创建用户修改密码,你有没有想过——用户信息到底存在哪儿了?
Linux里,用户信息主要存在两个地方:/etc/passwd(用户基本信息)和**/etc/shadow**(密码加密信息)。
先来看/etc/passwd:
| |
输出大概是长这样的:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
longx:x:1000:1000:LongX,,,:/home/longx:/bin/bash
每行代表一个用户,字段之间用冒号:分隔,共7个字段。
15.7.1 格式:用户名:密码:UID:GID:描述:家目录:Shell
| 字段序号 | 字段名 | 说明 | 示例 |
|---|---|---|---|
| 1 | 用户名 | 登录时使用的名字 | longx |
| 2 | 密码 | 以前存明文密码,现在都是x,表示密码在/etc/shadow里 | x |
| 3 | UID | 用户标识符 | 1000 |
| 4 | GID | 主组标识符 | 1000 |
| 5 | 描述 | 用户的备注信息,可以是姓名、电话等 | LongX,,, |
| 6 | 家目录 | 用户登录后的默认目录 | /home/longx |
| 7 | Shell | 用户登录后使用的命令行解释器 | /bin/bash |
为什么密码字段显示的是x而不是真正的密码?因为真正的密码(加密后的)是存在/etc/shadow文件里的,这个我们后面会讲。
来看个具体例子:
| |
输出:
longx:x:1000:1000:LongX,,,:/home/longx:/bin/bash
字段解析:
longx— 用户名x— 密码占位符(实际密码在/etc/shadow)1000— UID1000— GIDLongX,,,— 描述信息(可以有逗号分隔的多个字段)/home/longx— 家目录/bin/bash— 登录Shell
| |
15.8 /etc/shadow 文件格式详解(密码加密)
如果说/etc/passwd是户口本,那/etc/shadow就是保险柜——存的是用户密码的加密信息。
普通用户没有权限查看shadow文件,只有root才能读:
| |
输出大概是:
root:!$6$somethinghashed:19000:0:99999:7:::
daemon:*:19000:0:99999:7:::
nobody:*:65534:0:99999:7:::
longx:$6$randomsalt$hash:19000:0:99999:7:14::
15.8.1 格式:用户名:加密密码:最后修改:最小:最大:警告:过期
每行有9个字段,用冒号分隔:
| 字段序号 | 字段名 | 说明 | 示例 |
|---|---|---|---|
| 1 | 用户名 | 与passwd对应 | longx |
| 2 | 加密密码 | 哈希后的密码,!或*表示锁定 | $6$randomsalt$hash |
| 3 | 最后修改时间 | 上次修改密码的日期(从1970-01-01算起的天数) | 19000 |
| 4 | 最小天数 | 密码修改后至少多少天才能再改 | 0 |
| 5 | 最大天数 | 密码最多能用多少天 | 99999 |
| 6 | 警告天数 | 密码快过期前多少天开始警告 | 7 |
| 7 | 过期天数 | 密码过期后多少天还能登录(需要改密码) | 空 |
| 8 | 保留字段 | 预留的,目前没用 | 空 |
| 9 | 禁用时间 | 账户被禁用的日期(从1970-01-01算起的天数) | 空 |
15.8.2 密码字段:! 表示锁定
| |
| |
| |
/etc/shadow文件包含加密的密码信息,绝对不能让普通用户读取!如果普通用户能读shadow文件,理论上他可以拿加密后的密码去跑彩虹表破解。所以这个文件的权限是root:root 000:
| |
只有root能读写,其他人只能瞪眼。
15.9 id 查看用户信息
想知道某个用户的UID、GID和所属组?id命令是你最好的朋友。
15.9.1 id 用户名 —— 查看指定用户信息
| |
15.9.2 id —— 查看当前用户信息
| |
| |
| |
| |
15.10 whoami、who、w、users 查看登录用户
想知道现在谁登录在系统里?这几个命令可以帮你"点名"。
15.10.1 whoami:当前用户名
最简单的一个——就是显示你当前的用户名:
| |
等同于:
| |
15.10.2 who:当前登录用户
who命令比whoami强大一点,能显示所有当前登录的用户:
| |
| 字段 | 说明 |
|---|---|
| longx | 用户名 |
| pts/0 | 终端设备名(pts是伪终端,0是编号) |
| 2026-03-23 12:00 | 登录时间 |
| 192.168.1.100 | 登录来源IP(如果是本地则是时间) |
| |
15.10.3 w:详细信息
w命令是who的升级版,不仅显示谁登录了,还显示他们在干什么:
| |
第一行是系统负载信息:
up 3 days:系统运行了3天2 users:2个用户登录load average: 0.15, 0.10, 0.05:1分钟、5分钟、15分钟的平均负载
其他列:
USER:用户名TTY:终端FROM:登录来源IDLE:空闲时间WHAT:正在运行的命令
| |
15.10.4 users:简洁的用户列表
| |
就显示登录的用户名,简单粗暴。
📊 登录查看命令对比
graph LR
A["whoami"] --> B["我是谁?<br/>只显示当前用户"]
C["who"] --> D["谁在?<br/>显示所有登录用户"]
E["w"] --> F["谁在干嘛?<br/>显示用户及活动"]
G["users"] --> H["谁?<br/>简洁列表"]
style A fill:#e1f5fe
style C fill:#fff3e0
style E fill:#f3e5f5
style G fill:#e8f5e9本章小结
本章我们学习了Linux用户管理的基础知识:
🔑 核心知识点
Linux用户分类:
- root用户(UID 0):系统最高权限,相当于皇帝
- 系统用户(UID 1-999):运行系统服务和守护进程,不能登录
- 普通用户(UID 1000+):人类用户,权限受限
UID和GID:
- UID是用户的身份证号,唯一标识每个用户
- GID是组的身份证号,每个用户有一个主组,可以有多个附加组
用户管理命令:
useradd:创建用户(推荐加-m -s /bin/bash)usermod:修改用户信息(-l改名字,-aG加组,-L锁定)userdel:删除用户(-r同时删家目录)passwd:管理密码(-l锁定,-u解锁,-d删密码)
重要配置文件:
/etc/passwd:用户基本信息(7个字段)/etc/shadow:密码加密信息(9个字段)
登录查看命令:
whoami:我是谁who:谁在登录w:谁在登录以及在干嘛id:查看用户的UID/GID/组信息
💡 记住这个原则
root用得越多,死的越快。 日常操作用普通用户,需要权限时用sudo临时提权,这才是正确的Linux打开方式。
当前时间:2026年3月23日 20:14:03 已完成"第十五章",目前处理"第十六章"