Linux 提权基础:用户权限与信息收集

Linux 提权基础:用户权限与信息收集
28.7的博客Linux 提权基础:用户权限与信息收集
前言
信息收集是渗透测试还是内网攻防,提权都扮演着 “承上启下” 的核心角色:
- 对渗透测试:没有提权,测试结果仅能覆盖 “表层漏洞”,无法全面评估系统风险;
- 对真实攻防:没有提权,攻击者只能停留在 “初始访问点”,无法深入内网、控制核心资产。
简言之,提权的本质是突破权限限制,将 “有限访问能力” 转化为 “深度控制能力” —— 它是连接 “初始 foothold(立足点)” 与 “核心目标” 的唯一路径,也是评估防御体系有效性、实现攻防对抗目标的关键环节。
一、Linux 用户和组
用户组是 Linux 系统权限管理的核心载体,既方便用户间共享文件,也让管理员可通过“组权限分配”替代“单个用户授权”,提升管理效率。
Linux 用户按权限和用途分为三类,且每个用户必须归属至少一个组(无法独立于组存在);用户组的核心信息存储于 /etc/group 文件中,可通过 cat /etc/group 查看。
| 用户类型 | UID 范围 | 核心权限与用途 | Windows 类比对象 |
|---|---|---|---|
| 系统管理员 | 0(仅 root 账户) | 拥有系统全部权限,可执行任意操作(如修改系统配置、删除核心文件),是系统的“所有者” | Administrator 账户 |
| 系统用户 | CentOS 6:1-499;CentOS 7:1-999 | 系统内建账号,用于运行服务(如 sshd、nginx),禁止交互登录 | System 账户(权限低于 System) |
| 自定义用户 | CentOS 6:500+;CentOS 7:1000+ | 由 root 创建的普通登录账户,用于日常操作,权限受限于 UID 和文件权限 | Users 组内账户 |
二、核心配置文件解析
2.1 /etc/passwd 文件
/etc/passwd 是 Linux 存储用户基本属性的核心文件,每个用户对应一行记录,管理员可通过修改该文件完成基础用户管理。
文件格式(字段含义)
1 | 用户名:密码占位符:用户ID(UID):组ID(GID):用户说明:家目录:登录后默认Shell |
注:“密码占位符”为
x,表示密码已加密存储于/etc/shadow(避免明文泄露),早期系统曾直接存储密码哈希。
登录后的 Shell
在 CentOS 7 中,用户登录后的 Shell 权限 由两部分决定:
/etc/passwd中指定的 Shell 类型(如bash、nologin),直接决定“能否交互登录”“能否执行命令”;- 用户的
UID/GID及文件系统权限(r/w/x),决定“操作的权限范围”(如普通用户 vs root)。
1. 核心概念:Shell 与登录权限的关系
Shell 是用户与系统内核交互的“桥梁”,不同类型的 Shell 对应完全不同的登录/操作能力。通过以下命令可查看用户默认 Shell:
1 | # 查看 root 用户的默认 Shell(通常为 bash) |
2. 常见 Shell 类型对比表
| 权限分类 | Shell 路径 | 核心权限与特点 | 典型使用场景 |
|---|---|---|---|
| 交互登录 Shell | 允许 SSH/控制台登录,支持命令行交互(tab 补全、历史记录、脚本执行),是普通用户的默认选择 | 普通用户日常操作、管理员登录管理服务器 | |
/bin/bash |
/bin/bash |
CentOS 7 默认 Shell,支持所有交互功能(别名、管道/重定向、环境变量继承) | 99% 普通用户和 root 的默认 Shell,适合日常操作与脚本开发 |
/bin/sh |
/bin/sh |
POSIX 标准轻量 Shell,CentOS 7 中是 bash 的软链接(功能略简化) |
执行 POSIX 标准脚本,兼容其他类 Unix 系统 |
| 受限交互 Shell | 允许登录,但限制核心操作(如禁止切换目录、修改 PATH),降低风险 | 临时给第三方用户提供有限权限,防止误操作或越权 | |
/bin/rbash |
/bin/rbash |
bash 受限模式:禁止 cd 切换目录、禁止执行绝对路径命令(如 /usr/bin/ls) |
给运维助手提供“仅在当前目录执行有限命令”的权限 |
| 无登录权限 Shell | 禁止交互登录(SSH/控制台登录直接拒绝),仅允许特定场景执行命令 | 系统服务用户(如 nginx、mysql),防止恶意登录篡改配置 | |
/sbin/nologin |
/sbin/nologin |
1. 登录时提示“此账户无法登录”后退出; 2. 允许通过 su -s 临时切换为交互 Shell;3. 支持运行服务进程 |
服务用户(nginx、mysql),仅用于运行服务,不允许人登录 |
/bin/false |
/bin/false |
1. 比 nologin 更严格:无登录提示,直接拒绝;2. 本质是“空 Shell”,无法执行任何命令; 3. 仅用于“占位” |
完全禁用的废弃账户、无需执行命令的“伪用户” |
/bin/dash |
/bin/dash |
轻量 POSIX Shell,高效但无别名/历史记录,CentOS 7 不默认使用 | 执行简单系统脚本(如初始化脚本),不适合交互登录 |
3. 关键权限场景说明
场景 1:nologin 用户的“特殊权限”(禁止登录但允许运行服务)
/sbin/nologin 是服务用户的默认 Shell,核心特性:
- 禁止交互登录:尝试
ssh nginx@服务器IP会直接提示“此账户无法登录”并断开; - 允许运行服务进程:
nginx用户的 UID 拥有读取配置文件(/etc/nginx/)、写入日志(/var/log/nginx/)的权限(由文件组权限r-x控制); - 临时切换需 root 权限:管理员若需操作
nginx用户,需通过以下命令:1
2# 临时切换为 nginx 用户的 bash Shell(仅 root 可执行)
su -s /bin/bash nginx # 切换后进入 nginx 家目录 /var/lib/nginx,权限受限于 nginx 的 UID
场景 2:root 用户的 Shell 权限(不受限的“超级权限”)
root 的默认 Shell 是 /bin/bash,其权限本质来自 UID=0(Linux 中 UID=0 即超级用户),而非 Shell 类型:
- 可执行所有命令(如
rm -rf /、chmod 777),不受文件权限限制; - 可无密码切换到任何用户:
su - 用户名或su -s /bin/bash 用户名; - 可修改任意用户的默认 Shell:
chsh -s /bin/bash 用户名(修改后需重新登录生效)。
场景 3:普通用户的 Shell 限制(受 UID 和文件权限约束)
普通用户(UID≥1000)默认 Shell 为 /bin/bash,但权限受限:
- 仅能修改自身家目录(
/home/用户名)及有读写权限的文件; - 执行
sudo命令需提前在/etc/sudoers中配置(否则无法执行 root 级命令); - 无法切换到
nologin/false用户(除非有sudo权限)。
4. 常用 Shell 管理命令(实操)
echo $SHELL
将 test 用户的默认 Shell 改为 nologin
小结
- 正常交互需求(日常操作):用
/bin/bash; - 限制操作需求(临时账户):用
/bin/rbash; - 禁止登录需求(服务账户):用
/sbin/nologin; - 完全禁用需求(废弃账户):用
/bin/false。
2.2 /etc/shadow 文件
/etc/shadow是 Linux 存储 用户加密密码及账号安全信息 的核心文件,是/etc/passwd的安全扩展(仅 root 可读写,避免普通用户获取密码哈希)。
文件格式(字段含义)
1 | 用户名:加密密码:密码最后修改日期:密码修改间隔:密码有效期:到期警告天数:过期宽限天数:账号失效时间:保留字段 |
注:“密码最后修改日期”以“1970-01-01 至今的天数”计算,可通过
date -d "1970-01-01 + 天数 days"转换为日期格式。
加密密码格式详解
加密密码字段的固定格式为:$id$salt$encrypted,三部分分别代表:
id:加密算法标识(1=MD5,5=SHA-256,6=SHA-512,CentOS 7 默认用 6);salt:系统随机生成的盐值(防止相同密码生成相同哈希,对抗彩虹表攻击);encrypted:盐值 + 明文密码的哈希结果。
三、Linux 文件权限
Linux 中“一切皆文件”(普通文件、目录、设备、套接字等),文件权限通过 r(读)、w(写)、x(执行)三种标志控制,不同类型文件的权限含义略有差异。
3.1 权限查看命令
通过 ls -l 查看普通文件权限,ls -la 查看包含隐藏文件的所有权限:
1 | ls -l |
3.2 权限字段解析(以 -rwxr-xr-x. 1 root root 为例)
| 字段位置 | 符号/数值 | 含义解释 |
|---|---|---|
| 第 1 位 | -/d/l |
文件类型标识:-=普通文件,d=目录,l=软链接,b=块设备,c=字符设备 |
| 第 2-4 位 | rwx |
文件所有者权限(user):读(r)、写(w)、执行(x) |
| 第 5-7 位 | r-x |
文件所属组权限(group):读(r)、无写(-)、执行(x) |
| 第 8-10 位 | r-x |
其他组用户权限(other):读(r)、无写(-)、执行(x) |
| 第 11 位 | . |
SELinux 安全上下文标识(若为 + 表示有 ACL 权限) |
| 第 12 位 | 1 |
硬链接数/子目录数: - 普通文件:硬链接个数; - 目录:子目录个数(含 . 和 ..) |
| 第 13-17 位 | root root |
所有者与所属组: 第一个 root=文件所有者,第二个 root=文件所属组 |
3.3 目录权限的特殊说明
目录的 r/w/x 权限含义与普通文件不同:
r:允许查看目录下的文件列表(如ls命令);w:允许在目录内添加、删除、重命名文件(需配合x权限);x:允许进入目录(如cd命令),无x权限时,即使有w权限也无法写入文件。
四、Linux 特殊权限
除常规 rwx 权限外,Linux 还有三种特殊权限(SUID、SGID、SBIT),用于控制程序或目录的“特殊操作能力”。
| 权限名称 | 标识符号 | 作用对象 | 核心功能 | 典型示例 |
|---|---|---|---|---|
| SUID | s(所有者 x 位) |
可执行文件 | 执行文件时,临时赋予执行者“文件所有者”的权限(而非执行者自身权限) | passwd 命令(所有者为 root,普通用户执行时临时获得 root 权限修改 /etc/shadow) |
| SGID | s(所属组 x 位) |
可执行文件/目录 | 1. 对文件:执行时临时获得“文件所属组”权限; 2. 对目录:新创建的文件自动继承目录的所属组 |
共享目录(如 /var/www),所有用户在该目录创建的文件均归属 www 组 |
| SBIT | t(其他组 x 位) |
目录 | 仅文件所有者或 root 可删除/修改目录下的文件(防止其他用户删除他人文件) | /tmp 目录(所有用户可读写,但仅自己能删除自己的临时文件) |
五、提权前置:信息收集命令集
信息收集是提权的基础,需优先获取系统、用户、权限等核心信息,以下为常用命令分类整理。
5.1 系统基础信息
1 | # 查看完整系统信息(内核版本、主机名、架构、系统时间等) |
5.2 用户与组信息
1 | # 查看所有用户的基本属性(UID、GID、Shell 等) |
5.3 查找明文密码
1 | # 在指定文件中查找包含“user”的行(不区分大小写) |
5.4 SSH 密钥信息
1 | # 查看当前用户的 SSH 授权密钥(允许免密登录的公钥列表) |















