--- 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 统一字段Schema(v2.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 - 是否公网IP(Boolean) ├── 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个数据库扫描记录)