用户账户分类
超级用户(root):
- UID固定为
0,拥有系统最高权限(可修改所有文件、进程和配置),例如rm -rf /强制删除整个系统。 - 账户示例:
root:x:0:0:root:/root:/bin/bash - 谨慎使用,避免误操作导致系统崩溃。
- 处理方式
# 避免直接登录 root,改用 sudo $ sudo apt update # 临时获取 root 权限执行命令 $ su - root # 切换到 root 用户(需密码)
系统用户:
- 用途:运行系统服务、守护进程或应用程序。
- UID范围:1-999(CentOS/RHEL)或 1-499(旧版 Debian/Ubuntu)
- 特点:
- 由系统自动创建,用于运行后台服务(如nginx、mysql)。
- 无登录 Shell(通常设置为 /sbin/nologin),不可交互使用。
- 主目录通常位于 /var 或 /run
- 示例账户:
mysql:x:105:111:MySQL Server,,,:/var/lib/mysql:/bin/false # MySQL 服务账户 nginx:x:107:113:Nginx web server:/var/lib/nginx:/usr/sbin/nologin
普通用户:
- 用途:用户日常操作
- UID范围:1000~60000(不同Linux发行版可能不同),权限受限。
- 特点:
- 拥有登录 Shell(如 /bin/bash)
- 主目录在 /home/用户名
- 文件权限受限(无法修改系统关键文件)
- 用于日常操作,如文件编辑、软件安装等。
- 示例账户:
id alice # 输出:uid=1000(alice) gid=1000(alice) groups=1000(alice)- 创建示例:
# 创建用户 $ sudo useradd -m -s /bin/bash alice # 设置密码 $ sudo passwd alice
用户账户管理文件
/etc/passwd
/etc/passwd 是 Linux 系统中存储用户账户信息的关键配置文件,它以明文形式记录了系统所有用户的基本属性。每行对应一个用户,字段用冒号分隔。
文件结构(每行7个字段,用冒号 : 分隔)
username:password:UID:GID:GECOS:homedir:shell
示例记录:
root:x:0:0:root:/root:/bin/bash
nginx:x:103:107:Nginx web server:/var/lib/nginx:/usr/sbin/nologin
bob:x:1001:1001:Bob Smith, Room 101, +123456:/home/bob:/bin/bash
字段详解
| 字段顺序 | 字段名 | 说明 | 示例值 |
|---|---|---|---|
| 1 | username | 登录用户名 | nginx, bob, root |
| 2 | password | 密码占位符:x 表示密码在 /etc/shadow* 或 ! 表示账户禁用 | x |
| 3 | UID | 用户ID(User ID):0=root1-999=系统账户1000+=普通用户 | 0, 103, 1001 |
| 4 | GID | 主组ID(Group ID) | 1001 |
| 5 | GECOS | 描述信息(全名、联系方式等) | Bob Smith, +123456 |
| 6 | homedir | 用户主目录路径 | /home/bob |
| 7 | shell | 用户登录时默认 Shell(/sbin/nologin 禁止登录) | /bin/bash |
安全特性
- 密码分离:
- 实际加密密码存储在
/etc/shadow(仅 root 可读) /etc/passwd必须全局可读(如ls -l显示-rw-r--r--)
- 实际加密密码存储在
- 禁用账户:
# 在密码字段添加 "!" 禁用用户 sudo usermod -L bob # 锁定后显示为: bob:!x:1001:...
查看用户账户信息
# 查看/etc/passwd文件内容
cat /etc/passwd
# 查看指定用户信息
grep bob /etc/passwd
# bob:x:1001:1001::/home/bob:/bin/bash
解析:
cat /etc/passwd:显示所有用户账户的基本信息。grep bob /etc/passwd:查看bob用户账户的基本信息。
用户类型在文件中的体现
| 用户类型 | UID 特征 | 示例记录片段 |
|---|---|---|
| 超级用户 | UID = 0 | root:x:0:0:root:/root:/bin/bash |
| 系统账户 | UID 1-999 | syslog:x:104:108::/home/syslog:/bin/false |
| 普通用户 | UID ≥ 1000 | alice:x:1002:1002::/home/alice:/bin/bash |
| 无登录权限 | Shell = /sbin/nologin | nginx:...:/usr/sbin/nologin |
注意事项
- 避免手动编辑:尽量使用
usermod,useradd等命令修改用户属性,防止格式错误。 - 备份文件:修改前先备份:
sudo cp /etc/passwd /etc/passwd.bak - 语法检查:修改后运行
pwck验证文件有效性:sudo pwck /etc/passwd
/etc/shadow
/etc/shadow 是 Linux 系统中存储用户账户密码及安全策略的核心文件,通过隔离敏感信息解决 /etc/passwd 的安全隐患。权限为640(仅root可读),字段用冒号分隔。
文件结构(每行9字段,冒号 : 分隔)
username:encrypted_password:lastchg:min:max:warn:inactive:expire:reserved
典型记录:
root:$y$j9T$8Sdk...xP1$:19669:0:99999:7:::
bob:$6$5bFz...Kb1$:19670:5:30:10:15:21000:
字段详解
| 字段顺序 | 字段名 | 说明 | 示例值 |
|---|---|---|---|
| 1 | username | 用户名(与 /etc/passwd 对应) | root, bob |
| 2 | encrypted_password | 加密密码: • $算法$salt$hash(如 $6$=SHA-512)• !! 或 ! = 账户禁用• * = 服务账户(无密码登录) | $6$5bFz...Kb1$ |
| 3 | lastchg | 上次修改密码的时间(距 1970-01-01 的天数) | 19669 |
| 4 | min | 密码修改最短间隔天数(0=随时可改) | 5 |
| 5 | max | 密码有效最大天数(99999=永不过期) | 30 |
| 6 | warn | 密码到期前警告天数 | 10 |
| 7 | inactive | 密码过期后宽限天数(超时则禁用账户) | 15 |
| 8 | expire | 账户绝对过期日期(距 1970-01-01 的天数,空=永不过期) | 21000 |
| 9 | reserved | 保留字段 | 空 |
核心安全机制
-
强制权限控制:
$ ls -l /etc/shadow -rw-r----- 1 root shadow 1432 Jun 22 15:45 /etc/shadow # 仅root和shadow组可读 -
密码哈希算法标识:
前缀 算法 安全性 $1$MD5 ⚠️ 弱 $2a$Blowfish ✅ $5$SHA-256 ✅✅ $6$SHA-512 ✅✅✅ $y$Yescrypt ✅✅✅✅ -
账户状态控制:
# 禁用账户(添加 ! 到密码字段) sudo usermod -L bob # 生成: bob:!$6$...: # 解锁账户 sudo usermod -U bob
查看用户密码信息
# 查看/etc/shadow文件内容(需root权限)
cat /etc/shadow
# 查看指定用户策略(需root权限)
grep bob /etc/shadow
# bob:$6$5bFz...Kb1$:19670:5:30:10:15:21000:
解析:
sudo cat /etc/shadow:以root权限查看加密密码信息(普通用户无权查看)。grep bob /etc/shadow:以root权限查看bob用户加密密码信息(普通用户无权查看)。
与 /etc/passwd 的关键区别
| 特性 | /etc/passwd | /etc/shadow |
|---|---|---|
| 主要用途 | 存储用户基本信息(UID/GID等) | 存储密码和安全策略 |
| 可见性 | 全局可读 | 仅 root 访问 |
| 密码字段 | x(密码占位符) | 加密后的密码哈希值 |
| 安全风险 | 泄露账户结构 | 泄露会导致密码被暴力破解 |
| 修改工具 | usermod, vipw | passwd, chage, vipw -s |
黄金准则
- 永不手动编辑:
必须使用专用命令:sudo passwd bob # 修改密码 sudo chage -E 2026-01-01 bob # 设置过期时间 - 自动备份:
# 通过rsync备份 sudo rsync -av /etc/shadow /backup/ - 定期审计:
# 检查空密码账户 sudo awk -F: '$2 == "" {print $1}' /etc/shadow
理论练习
题目:/etc/passwd文件中,用户字段的第七个字段表示什么?
答案:登录Shell(如/bin/bash)。
题目:/etc/passwd中,若用户字段的第六个字段为/sbin/nologin,表示什么?
答案:用户无登录权限(通常为系统用户)。
题目:/etc/shadow文件中,密码字段为!!表示什么?
答案:用户无密码或禁用登录。
题目:/etc/shadow中,密码字段为*表示什么?
答案:用户账户被禁用(无密码)。
知识总结
- 用户账户分类: 超级用户(root)、普通用户、系统用户。
- 核心管理文件:
/etc/passwd:存储用户基本信息。/etc/shadow:存储用户加密密码和密码策略。