用户与权限管理¶
概述¶
用户和权限是 Linux 安全的核心。理解 UID/GID、密码机制、文件权限和 sudo 授权,是进行 Linux 权限分析和安全加固的基础。本文系统梳理了 Linux 用户与权限管理的完整知识体系。
用户组 (Group)¶
用户组的概念¶
用户组是用户的集合,用于批量管理用户的权限。将多个用户加入同一组,可以方便地统一授权。
GID(Group ID)分类¶
| 类型 | GID范围 | 说明 |
|---|---|---|
| root组 | 0 | 超级管理员组,拥有系统最高权限 |
| 程序用户组(系统用户组) | 1 - 999 | 安装系统服务时自动创建,如mysql组、nginx组 |
| 普通用户组 | 1000 - 65535 | 普通用户创建的组 |
专业解读:CentOS 7中系统用户/组的范围是1-999,CentOS 6及更早版本是1-499。查看系统所有组的信息存储在
/etc/group文件中。
组相关命令¶
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看全部组 | cat /etc/group |
查看组配置文件 |
| 查看用户的所属组 | groups |
显示当前用户所属的所有组 |
| 添加用户组 | groupadd security |
创建名为security的组 |
| 删除用户组 | groupdel security |
删除security组(组内不能有用户) |
查看 /etc/group 文件格式:
示例:影子文件:/etc/gshadow
用户 (User)¶
UID(User ID)分类¶
| 类型 | UID范围 | 说明 |
|---|---|---|
| root用户 | 0 | 超级管理员,拥有系统绝对控制权 |
| 程序用户(系统用户) | 1 - 999 | 运行系统服务使用的用户,如mysql、nginx、nobody |
| 普通用户 | 1000 - 65535 | 由管理员创建的普通登录用户 |
专业解读:root用户的UID是0,反过来也成立:UID为0的用户就是root,即使用户名不是root。这是权限提升漏洞中常用的技巧。
用户相关命令¶
| 操作 | 命令 | 说明 |
|---|---|---|
| 添加用户 | useradd 用户名 |
创建用户(需root权限) |
| 设置密码 | passwd 用户名 |
修改用户密码 |
| 删除用户 | userdel 用户名 |
删除用户(-r 同时删除主目录) |
| 修改用户信息 | usermod 选项 用户名 |
修改用户属性 |
useradd wuya # 创建用户wuya
passwd wuya # 设置wuya的密码
userdel wuya # 删除用户(保留主目录)
userdel -r wuya # 删除用户并删除其主目录
usermod -G wheel wuya # 将wuya附加到wheel组
专业解读:
useradd创建用户时,系统会:创建/home/用户名目录、从/etc/skel复制配置文件、在/etc/passwd和/etc/shadow中添加记录。
用户管理相关文件¶
Linux将用户信息分散存储在多个文件中,形成用户数据库。
/etc/group - 组信息文件¶
/etc/passwd - 用户信息文件¶
示例:
| 字段 | 说明 |
|---|---|
| 用户名 | 登录时使用的用户名 |
| 密码占位符 | x 表示密码存储在shadow文件中 |
| UID | 用户ID |
| GID | 主组ID |
| 全名 | 用户全名或注释(GECOS字段) |
| home路径 | 用户主目录 |
| shell工具 | 登录后使用的Shell |
专业解读:
/etc/passwd文件所有用户都可读(因为系统需要查询用户信息),但密码不直接存储在此,而是存放在/etc/shadow中(只有root可读),这是一种安全设计。
/etc/shadow - 影子密码文件¶
存储用户的加密密码和密码策略信息,只有root用户可读。
| 字段 | 说明 |
|---|---|
| 用户名 | 对应/etc/passwd中的用户名 |
| 加密密码 | $id$salt$encrypted 格式 |
| 最后修改时间 | 1970年1月1日以来的天数 |
| 最小修改间隔 | 多少天内不能修改密码 |
| 密码有效期 | 密码多少天后必须更换 |
| 警告天数 | 过期前多少天提醒用户 |
| 宽限天数 | 过期后多少天仍可登录 |
| 账号失效时间 | 账号被禁用的日期 |
密码格式:$id$salt$encrypted
| id | 加密方式 |
|---|---|
$1$ |
MD5 |
$2a$ |
Blowfish(某些发行版) |
$5$ |
SHA-256 |
$6$ |
SHA-512(CentOS 7默认) |
生成密码:
专业解读:
salt(盐值)是随机字符串,即使两个用户密码相同,由于salt不同,加密结果也不同,有效防止彩虹表攻击。
/etc/sudoers - sudo授权文件¶
控制哪些用户可以以root权限执行命令。
# 格式:
用户名 ALL=(ALL) ALL
# 示例:
wuya ALL=(ALL) ALL # wuya可以在所有主机以所有用户身份执行所有命令
kali ALL=(ALL) NOPASSWD: /bin/useradd # kali可以免密执行useradd命令
使用sudo:
专业解读:修改
/etc/sudoers文件必须使用visudo命令,而不是直接vim。因为visudo会在保存时检查语法错误,防止因配置错误导致所有用户无法提权。
用户管理基本命令¶
| 命令 | 作用 |
|---|---|
id |
查询用户账号身份标识(UID、GID、所属组) |
finger |
查询用户账号的登录属性 |
w / who |
查询当前主机的用户登录情况 |
users |
查询系统当前在线的用户名列表 |
whoami |
查看当前登录的用户名 |
su |
切换用户(switch user) |
id wuya # 查看wuya用户的UID、GID等信息
whoami # 显示当前用户
su - root # 完全切换到root用户(加载root环境变量)
su root # 切换身份,但保留当前用户的环境变量
专业解读:
su -和su的区别很大。su - root会加载root的完整环境(包括PATH、HOME等),相当于真正的root登录;而su root只是切换了用户身份,环境变量还是原来的,可能导致某些命令找不到。
文件和目录归属¶
Linux中每个文件和目录都有两个归属属性:
| 属性 | 说明 |
|---|---|
| 所有者 (Owner) | 文件的拥有用户 |
| 所属组 (Group) | 文件的拥有组 |
chown - 修改文件所有者和所属组¶
全称:change owner
chown wuya file.txt # 将file.txt的所有者改为wuya
chown wuya:security file.txt # 将所有者改为wuya,所属组改为security
chown -R wuya /usr/local/soft # 递归修改目录及其子内容的所有者
chown -R redis:redis /usr/local/soft/redis # 将redis目录及内容归属改为redis用户和组
专业解读:
-R(recursive)选项在修改目录权限时几乎必用。在生产环境中,安装软件(如Redis、MySQL、Nginx)后,通常需要将其安装目录的属主改为对应的服务用户,以提高安全性。
文件和目录权限¶
文件类型¶
ls -l 输出的第一个字符表示文件类型:
| 符号 | 类型 | 说明 |
|---|---|---|
- |
普通文件 | 文本、二进制、数据文件 |
d |
目录文件 | 文件夹 |
l |
软链接 | 类似Windows快捷方式 |
b |
块设备文件 | 硬盘、光驱等(按块读写) |
c |
字符设备文件 | 键盘、串口、终端等(按字符读写) |
p |
管道文件 | 进程间通信 |
s |
套接口文件 | 网络通信(socket) |
用户类别¶
权限针对三类用户设置:
| 符号 | 英文 | 含义 |
|---|---|---|
u |
user | 文件所有者(owner) |
g |
group | 文件所属组(group) |
o |
other | 其他用户(非所有者且不属于该组的用户) |
a |
all | 所有用户(u+g+o) |
权限类别¶
| 符号 | 英文 | 对文件的作用 | 对目录的作用 |
|---|---|---|---|
r |
read | 可读(查看文件内容) | 可浏览目录内容(ls) |
w |
write | 可写(修改文件内容) | 可在目录中创建、删除、重命名文件 |
x |
execute | 可执行(运行程序/脚本) | 可进入目录(cd) |
- |
- | 没有该权限 | 没有该权限 |
专业解读:目录的
w权限非常关键:即使你对目录中的某个文件没有任何权限,但只要对该目录有w权限,你就可以删除这个文件!这是Linux的设计特性。因此,控制目录的写权限非常重要。
权限的表示方法¶
符号表示法(文字法):
chmod g+w test.log # 给组用户添加写权限
chmod o= test.log # 移除其他用户的所有权限
chmod a-w test.log # 移除所有用户的写权限
chmod u=rwx,g=rw,o=r test.log # 分别设置u/g/o的权限
八进制数字表示法:
| 权限 | 二进制 | 八进制 |
|---|---|---|
--- |
000 | 0 |
--x |
001 | 1 |
-w- |
010 | 2 |
-wx |
011 | 3 |
r-- |
100 | 4 |
r-x |
101 | 5 |
rw- |
110 | 6 |
rwx |
111 | 7 |
chmod 764 test.log # u=rwx(7), g=rw-(6), o=r--(4)
chmod 755 script.sh # 普通脚本常用权限
chmod 644 file.txt # 普通文件常用权限
chmod 700 private.key # 私钥文件,仅所有者可访问
chmod -R a=rw testdir/ # 递归设置目录及所有内容的权限
根据其他文件的权限设置:
专业解读: - 常用权限组合: -
755(rwxr-xr-x):可执行文件、目录的默认权限 -644(rw-r--r--):普通文本文件的默认权限 -700(rwx------):敏感私有文件 - 使用-R递归修改目录权限时,务必保留当前用户的执行和读取权限,否则可能导致无法进入目录或读取文件,甚至无法恢复!
安全测试视角:Linux 权限提升 权限提升(Privilege Escalation)是渗透测试的核心环节,常见路径包括: - SUID/SGID 滥用:查找系统上所有 SUID 文件,利用存在漏洞的程序提权
- Sudo 配置错误:sudo -l查看当前用户可执行的 sudo 命令,寻找滥用路径 - 可写敏感文件:如果/etc/passwd或/etc/shadow可被普通用户写入,可直接添加 root 用户 - 计划任务滥用:如果定时任务执行的脚本可被普通用户修改,可在脚本中植入后门 - 内核漏洞提权:检查内核版本是否存在已知 CVE 漏洞安全测试视角:密码哈希破解 获取
/etc/shadow文件后,可以使用工具进行离线密码破解:防御方法:使用强密码策略、启用多因素认证、限制 shadow 文件访问权限。# 使用 John the Ripper unshadow /etc/passwd /etc/shadow > passwords.txt john passwords.txt # 使用 Hashcat(GPU 加速) hashcat -m 1800 shadow.txt /usr/share/wordlists/rockyou.txt安全测试视角:特殊权限位 除了 rwx,Linux 还有三种特殊权限位需要关注: - SUID (4000):以文件所有者身份执行,常见于
/usr/bin/passwd- SGID (2000):以文件所属组身份执行,或新创建文件继承目录所属组 - Sticky Bit (1000):目录中文件只能由所有者删除,如/tmp攻击者经常寻找配置不当的 SUID 程序作为提权路径。安全加固时应定期审计系统上的 SUID/SGID 文件。