LazyPanda902/supportops-toolkit
GitHub: LazyPanda902/supportops-toolkit
一款用于 IT 支持运维的 Python CLI 工具,通过扫描账户导出 CSV 和 SSH 身份验证日志来自动发现配置问题和可疑登录行为。
Stars: 0 | Forks: 0
# supportops-toolkit
[](https://github.com/LazyPanda902/supportops-toolkit/actions/workflows/ci.yml)


用于账户审计和身份验证日志分析的 IT 支持工具。检测 Active Directory / Entra ID 导出文件中的安全问题,并识别 syslog 身份验证文件中的可疑登录模式。
## 为什么开发此工具
本项目专为实用的帮助台和初级系统管理员工作流程而构建:检查账户导出数据的规范性,并在可疑的 SSH 身份验证模式演变成支持工单之前发现它们。它展示了 CSV 处理、日志解析、结构化 JSON 报告,以及无运行时依赖的可测试命令行自动化。
## 功能
- **账户审计**:扫描用户账户的 CSV 导出文件以查找安全配置错误
- 缺失或重复的用户名
- 禁用了 MFA 的账户
- 无效的电子邮件地址
- 非活动或停滞账户(90 天或 180 天以上未登录)
- 从未登录过的活动账户
- **身份验证日志分析**:解析 syslog 格式的身份验证日志并检测异常
- 来自单个 IP 的暴力破解尝试(10 分钟内失败 5 次以上)
- 每个用户账户的重复失败尝试
- 结构化 JSON 报告
## 快速演示
```
python -m pip install -e ".[dev]"
supportops audit-accounts tests/fixtures/sample_accounts.csv
supportops analyze-logs tests/fixtures/sample_auth.log --year 2026
python -m pytest -q
```
这些测试固定数据文件是虚构的,仅为方便在本地测试工具而包含。
## 安装
从源码安装:
```
pip install -e .
```
包含开发依赖项:
```
pip install -e ".[dev]"
```
## 用法
### 账户审计
审计用户账户的 CSV 导出文件:
```
supportops audit-accounts accounts.csv
```
默认输出为 JSON。要保存到文件:
```
supportops audit-accounts accounts.csv --output report.json
```
筛选为特定的严重级别:
```
supportops audit-accounts accounts.csv --severity critical
supportops audit-accounts accounts.csv --severity warning
supportops audit-accounts accounts.csv --severity info
```
### 身份验证日志分析
扫描 auth.log 文件以查找可疑模式:
```
supportops analyze-logs auth.log
```
如果您的日志使用不包含年份的月/日格式,请指定年份:
```
supportops analyze-logs auth.log --year 2025
```
将报告保存到文件:
```
supportops analyze-logs auth.log --output log_report.json
```
## CSV 格式
`audit-accounts` 命令需要一个包含以下列的 CSV 文件:
```
username,display_name,email,enabled,last_login,mfa_enabled,groups
```
示例:
```
username,display_name,email,enabled,last_login,mfa_enabled,groups
jdoe,Jane Doe,jdoe@corp.example,true,2026-06-01T14:30:00Z,true,Admins;IT
bgates,Bill Gates,bgates@corp.example,false,,true,Sales
```
- `username`:账户登录名(必填,必须唯一)
- `display_name`:全名
- `email`:电子邮件地址(验证基本格式)
- `enabled`:"true", "1", "yes", "false", "0", "no"
- `last_login`:ISO-8601 日期时间,或留空表示从未登录
- `mfa_enabled`:"true", "1", "yes", "false", "0", "no"
- `groups`:以分号分隔的组名列表
## 身份验证日志格式
`analyze-logs` 命令解析来自 SSH 的标准 syslog 身份验证条目:
```
Jun 14 10:05:00 host sshd[1234]: Accepted password for jdoe from 192.168.1.1 port 22 ssh2
Jun 14 10:06:15 host sshd[1234]: Failed password for jdoe from 10.0.0.100 port 22 ssh2
```
支持的模式:
- SSH 登录成功:`Accepted password` 或 `Accepted publickey`
- SSH 登录失败:`Failed password` 或 `authentication failure`
- 不支持的行将被静默忽略
## 报告结构
### 账户审计报告
```
{
"total_accounts": 10,
"issue_counts": {
"critical": 2,
"warning": 3,
"info": 0
},
"issues": [
{
"username": "jdoe",
"severity": "critical",
"code": "MFA_DISABLED",
"detail": "Active account has MFA disabled."
}
]
}
```
问题代码和严重级别:
- `MFA_DISABLED`(critical):活动账户缺少 MFA
- `INACTIVE_ACCOUNT`(critical):180 天以上未登录
- `DUPLICATE_USERNAME`(critical):用户名出现两次
- `MISSING_USERNAME`(critical):用户名字段为空
- `STALE_ACCOUNT`(warning):90 天以上未登录
- `NEVER_LOGGED_IN`(warning):活动账户,从未使用
- `INVALID_EMAIL`(warning):电子邮件与 `user@domain.tld` 格式不匹配
### 身份验证日志报告
```
{
"total_events": 150,
"event_type_counts": {
"login_success": 140,
"login_failure": 10
},
"anomaly_count": 1,
"anomalies": [
{
"username": "(multiple)",
"kind": "brute_force_ip",
"detail": "IP 10.0.0.100 had 5 failed logins within 10 minutes starting 2026-06-14T10:00:00+00:00.",
"count": 5
}
]
}
```
异常类型:
- `brute_force_ip`:10 分钟内来自同一 IP 的 5 次以上失败登录
- `repeated_failures`:具有 5 次以上失败尝试的用户账户(任何时间窗口)
## 退出代码
如果发现 critical 问题或异常,命令将返回 `1`,否则返回 `0`。
```
supportops audit-accounts accounts.csv
echo $? # 1 if any critical issues, 0 if clean
```
## 测试
运行测试套件:
```
pytest
```
运行特定的测试类:
```
pytest tests/test_core.py::TestAuditAccounts
```
运行测试并显示详细输出:
```
pytest -v
```
## 许可证
MIT
标签:Homebrew安装, IT支持, Python, 文档结构分析, 无后门, 红队行动, 账户审计, 运维工具, 逆向工具