Rodrigo-Tripa/linux-security-audit-tool
GitHub: Rodrigo-Tripa/linux-security-audit-tool
基于 Bash 的轻量级 Linux 安全审计工具,用于检测系统错误配置、提权向量与加固缺陷并生成带完整性校验的结构化报告。
Stars: 0 | Forks: 0
# Linux 安全审计工具



用于 Linux 系统安全审计的 Shell 脚本。可识别错误配置、提权向量以及加固失败情况。
## 目标
用于在 Linux 系统上进行快速安全审计的轻量级离线工具,主要关注:
- 检测可疑的特权账户
- 具有危险权限的文件
- 不安全的 SSH 配置
- 高风险的开放端口
- SUID/SGID 二进制文件
- Sudoers 配置
- 孤立文件
- 防火墙和更新状态
## 功能特性
### 1. **UID 0 账户**
检测 UID 为 0(完全特权)的非 root 账户。
```
awk -F: '$3 == 0 { print $1 }' /etc/passwd | awk '!/root/'
```
**风险:** 后门账户,系统被攻陷后的持久化。
### 2. **全局可写文件**
搜索系统中任何用户均可写的文件。
```
find / -xdev -type f -perm -0002
```
排除:`/proc`、`/sys`、`/dev`、`/run`、`/tmp`、`/var/tmp`
**风险:** 代码注入,修改二进制文件或关键配置。
### 3. **SSH 审计**
使用 `sshd -T` 验证关键的 OpenSSH 配置:
| 指令 | 安全值 |
|-------------------------|------------------------|
| `PermitRootLogin` | `no` / `prohibit-password` |
| `PasswordAuthentication`| `no` |
| `MaxAuthTries` | ≤ 4 |
| `X11Forwarding` | `no` |
同时检测:
- `sshd` 守护进程的存在
- 服务状态(`systemctl`)
- 支持 `ssh` 和 `sshd` 作为单元名称
**风险:** 暴力破解、未经授权的远程访问、横向移动。
### 4. **开放端口**
使用 `ss -tulpn` 枚举 TCP/UDP 端口。
**风险分类:**
| 级别 | 端口 |
|--------|------------------------------------------------------------------------|
| 高 | 21, 22, 23, 139, 445, 3389, 5900, 3306, 5432, 6379, 27017, 11211 |
| 中 | 25, 53, 8080 |
**风险:** 增加攻击面,不必要暴露的服务。
### 5. **防火墙状态**
检查活跃的防火墙:
- `ufw`
- `firewalld`
- `nftables`
- `iptables`
**逻辑:**
- 未安装防火墙 → `CRITICAL`
- 已安装防火墙但未启用 → `CRITICAL`
**风险:** 未过滤的流量,服务直接暴露。
### 6. **SUID/SGID 二进制文件**
搜索设置了 SUID/SGID 位的二进制文件:
```
find / -xdev -type f -perm /6000
```
**分析:**
- 与已知二进制文件的白名单进行比对
- 标记位于 `/tmp` 或 `/var/tmp` 中的二进制文件
- 检测非 root 所属的文件
**输出格式:**
| 字段 | 描述 |
|--------|----------------------|
| PATH | 二进制文件路径 |
| TYPE | SUID / SGID |
| OWNER | 文件所有者 |
| STATUS | OK / WARNING |
**风险:** 通过本地漏洞利用进行提权。
### 7. **操作系统检测**
解析 `/etc/os-release` 以识别系统家族:
- `debian` → Debian, Ubuntu
- `rhel` → RHEL, CentOS, Rocky, AlmaLinux, Fedora
- `unknown` → 其他发行版
### 8. **安全更新**
检查待处理的更新:
| 操作系统家族 | 命令 |
|-----------|-------------------|
| Debian | `apt update` |
| RHEL | `dnf check-update`|
**局限性:** 输出解析可能不稳定。
**风险:** 已知漏洞未修补。
### 9. **无密码用户**
检测 `/etc/shadow` 中密码字段为空的账户:
```
awk -F: '$2 == "" { print $1 }' /etc/shadow
```
**风险:** 未经身份验证即可登录,控制措施被绕过。
### 10. **孤立文件**
在以下目录中搜索没有有效用户或组所有者的文件:
- `/etc`, `/home`, `/root`, `/var`
- `/usr/local`, `/opt`, `/srv`
- `/tmp`, `/var/tmp`
**按类型分类:**
- `-nouser`(无所有者)
- `-nogroup`(无所属组)
**风险:** 已删除账户的残留文件,潜在的 payload 持久化。
### 11. **Sudoers 审计**
分析 `/etc/sudoers` 和 `/etc/sudoers.d/` 中的文件,查找危险配置。
**检查项:**
- `NOPASSWD`:无需密码即可作为 root 执行命令的用户。
- 宽泛的 `ALL` 权限:拥有 `ALL=(ALL:ALL) ALL` 权限的用户或组(root 除外)。
**风险:** 提权,未经授权的管理操作。
### 12. **报告生成**
**终端:**
- 彩色输出(OK、WARNING、CRITICAL、INFO)
- 层次化结构
**文件:**
目录:`./reports/`
生成的文件:
- `result_YYYY-MM-DD_HH-MM-SS.txt`(纯文本输出)
- `hash_result_YYYY-MM-DD_HH-MM-SS.txt`(SHA256)
**安全性:**
- `chmod 700 reports/`
- 报告文件权限设置为 `chmod 600`
- SHA256 哈希校验完整性
## 安装
```
git clone https://github.com/rodrigo-tripa/linux-security-audit-tool.git
cd linux-security-audit-tool
chmod +x audit.sh
```
## 使用方法
### 静默模式
仅生成报告文件:
```
sudo ./audit.sh
```
### 详细模式
终端输出 + 文件:
```
sudo ./audit.sh -v
```
**报告保存在:** `./reports/result_.txt`
## 系统要求
| 组件 | 是否必需? | 备注 |
|----------------|-----------|--------------------------------|
| Linux | ✅ | 基于 Debian/Ubuntu 或 RHEL |
| Bash | ✅ | 版本 4+ |
| Root | ✅ | 建议使用以获取完整可见性|
| `systemctl` | ✅ | 用于服务检查 |
| `ss` | ✅ | 依赖 `iproute2` 软件包 |
| `find`, `stat` | ✅ | Coreutils |
| `sha256sum` | ✅ | Coreutils |
| `sshd` | ⚠️ | 可选(如未安装则跳过)|
## 已知局限性
### 权限
- 无 root 权限扫描时可见性会降低
- 部分检查可能会失败(`/etc/shadow` 等)
### 性能
- 在大型系统上 SUID/SGID 扫描可能较慢
- 全局可写文件扫描使用 `-xdev` 参数(不跨挂载点)
### 解析
- `apt update` 和 `dnf check-update` 的输出可能不稳定
- 依赖于特定的文本格式
### 防火墙
- 假定使用 systemd 进行状态验证
- 可能无法检测到自定义防火墙
### 端口
- 风险分类是静态的
- `ss -tulpn` 需要 root 权限才能查看 PID
- 回退使用 `ss -tuln` 会丢失进程映射
## 路线图
- [ ] 支持内核日志 (dmesg)
- [ ] 审计可疑的 cron 任务
- [ ] 验证已加载的内核模块
- [ ] SELinux/AppArmor 状态检查
- [ ] 扫描已知后门
- [ ] JSON/CSV 报告输出以便解析
- [ ] Diff 模式(比较两份报告)
## 工具安全性
### 报告
- 受保护的目录(`700`)
- 文件权限为 `600`(仅限所有者)
- SHA256 哈希验证完整性
### 建议
- 在共享报告前,请对主机名/IP 进行脱敏处理
- 删除旧报告(`./reports/`)
- 在受控环境中运行测试
## 贡献
欢迎提交 Pull requests。对于重大更改:
1. 请先开一个 issue 进行讨论
2. 如果可能,请在 Debian 和基于 RHEL 的系统上进行测试
3. 保持代码注释为英文
4. 遵循现有的输出风格
## 许可证
MIT 许可证 - 详见 [LICENSE](LICENSE)
## 免责声明
本工具仅用于审计您拥有授权的**合法**系统。我对滥用行为不承担责任。
## 联系方式
**GitHub:** [Rodrigo-Tripa](https://github.com/rodrigo-tripa)
**Repo:** [linux-security-audit-tool](https://github.com/rodrigo-tripa/linux-security-audit-tool)
标签:Debian, IT运维安全, Linux安全审计, RHEL, SSH安全审计, Sudoers配置检查, SUID/SGID检测, UID 0账户检测, Webshell防御, Web报告查看器, 关系图谱, 反取证, 基线检查, 子域名枚举, 安全评估, 应用安全, 开放端口扫描, 弱权限检测, 特权提升检测, 离线安全检测, 系统加固, 系统合规性, 系统安全