介绍
# Credential Manager
**状态:强制性安全基础**
将分散的 API 密钥和凭证整合到一个安全的、中心化的 `.env` 文件中。
## ⚠️ 这不是可选项
中心化的 `.env` 凭证管理是 OpenClaw 安全性的**核心要求**。如果您的凭证分散在多个文件中,**请立即停止并进行整合**。
**规则:** 所有凭证必须仅位于 `~/.openclaw/.env` 中。不要放在工作区、技能或脚本目录中。
请参阅: - [CORE-PRINCIPLE.md](CORE-PRINCIPLE.md) - 为什么这是不可妥协的 - [CONSOLIDATION-RULE.md](CONSOLIDATION-RULE.md) - 单一事实来源原则
## 基础
**每个 OpenClaw 部署必须具备:** ``` ~/.openclaw/.env (mode 600) ```
这是您所有凭证的唯一真实来源。无一例外。
**为什么?** - 单一位置 = 更易于保护 - 文件模式 600 = 仅您可读 - Git 忽略 = 不会意外提交 - 验证格式 = 捕获错误 - 审计跟踪 = 了解变更内容
分散的凭证 = 分散的攻击面。此技能解决了这个问题。
## 此技能的功能
1. **扫描** 常见位置中的凭证 2. **备份** 现有凭证文件(带时间戳) 3. **整合** 到 `~/.openclaw/.env` 4. **保护** 设置正确的权限 (600) 5. **验证** 安全性和格式 6. **执行** 最佳实践 7. **清理** 迁移后的旧文件
## 检测参数
该技能通过扫描以下内容自动检测凭证:
**文件模式:** - 配置目录中的 `credentials.json` 文件 - `.env` 文件 - 名称中包含 `-creds` 或 `credentials` 的内存文件
**敏感密钥模式:** - API 密钥、访问令牌、Bearer 令牌 - 密钥、密码、口令 - OAuth 消费者密钥 - 私钥、签名密钥、钱包密钥 - 助记词和种子短语
**安全检查:** - 文件权限(必须为 `600`) - Git 忽略保护 - 格式验证
## 快速开始
### 完整迁移(推荐)
```bash # Scan for credentials ./scripts/scan.py
# Review and consolidate ./scripts/consolidate.py
# Validate security ./scripts/validate.py ```
### 单独操作
```bash # Scan only ./scripts/scan.py
# Consolidate specific service ./scripts/consolidate.py --service x
# Backup without removing ./scripts/consolidate.py --backup-only
# Clean up old files ./scripts/cleanup.py --confirm ```
## 常见凭证位置
该技能扫描以下位置:
``` ~/.config/*/credentials.json ~/.openclaw/workspace/memory/*-creds.json ~/.openclaw/workspace/memory/*credentials*.json ~/.env (if exists, merges) ```
## 安全特性
✅ **文件权限:** 将 `.env` 设置为模式 600(仅所有者) ✅ **Git 保护:** 创建/更新 `.gitignore` ✅ **备份:** 更改前进行带时间戳的备份 ✅ **验证:** 检查格式、权限和重复项 ✅ **模板:** 创建 `.env.example`(可安全分享)
## 输出结构
迁移后:
``` ~/.openclaw/ ├── .env # All credentials (secure) ├── .env.example # Template (safe) ├── .gitignore # Protects .env ├── CREDENTIALS.md # Documentation └── backups/ └── credentials-old-YYYYMMDD/ # Backup of old files ```
## 支持的服务
自动检测的常见服务:
- **X (Twitter):** OAuth 1.0a 凭证 - **Molten:** 智能体意图匹配 - **Moltbook:** 智能体社交网络 - **Botchan/4claw:** 网络协议 - **OpenAI、Anthropic、Google:** AI 提供商 - **GitHub、GitLab:** 代码托管 - **通用:** `API_KEY`、`*_TOKEN`、`*_SECRET` 模式
有关完整列表,请参阅 [references/supported-services.md](references/supported-services.md)。
## 安全最佳实践
有关详细的安全指南,请参阅 [references/security.md](references/security.md)。
**快速检查清单:** - ✅ `.env` 具有 600 权限 - ✅ `.env` 被 git 忽略 - ✅ 代码或日志中没有凭证 - ✅ 定期轮换密钥 - ✅ 每个环境使用单独的密钥
## 脚本
所有脚本都支持 `--help` 以获取详细用法。
### scan.py ```bash # Scan and report ./scripts/scan.py
# Include custom paths ./scripts/scan.py --paths ~/.myapp/config ~/.local/share/creds
# JSON output ./scripts/scan.py --format json ```
### consolidate.py ```bash # Interactive mode (prompts before changes) ./scripts/consolidate.py
# Auto-confirm (no prompts) ./scripts/consolidate.py --yes
# Backup only ./scripts/consolidate.py --backup-only
# Specific service ./scripts/consolidate.py --service molten ```
### validate.py ```bash # Full validation ./scripts/validate.py
# Check permissions only ./scripts/validate.py --check permissions
# Fix issues automatically ./scripts/validate.py --fix ```
### cleanup.py ```bash # Dry run (shows what would be deleted) ./scripts/cleanup.py
# Actually delete old files ./scripts/cleanup.py --confirm
# Keep backups ./scripts/cleanup.py --confirm --keep-backups ```
## 迁移工作流
**步骤 1:发现** ```bash ./scripts/scan.py ``` 检查输出以查看将要迁移的内容。
**步骤 2:备份与整合** ```bash ./scripts/consolidate.py ``` 创建备份,构建 `.env`,设置权限。
**步骤 3:验证** ```bash ./scripts/validate.py ``` 确保一切安全且正确。
**步骤 4:测试** 使用新的 `.env` 文件测试您的应用程序/技能。
**步骤 5:清理** ```bash ./scripts/cleanup.py --confirm ``` 删除旧的凭证文件(备份保留)。
## 给技能开发者的提示:执行此标准
其他 OpenClaw 技能在使用凭证前必须验证凭证是否安全:
### Python 技能 ```python #!/usr/bin/env python3 import sys from pathlib import Path
# Add credential-manager scripts to path sys.path.insert(0, str(Path.home() / '.openclaw/skills/credential-manager/scripts'))
# Enforce secure .env (exits if not compliant) from enforce import require_secure_env, get_credential
require_secure_env()
# Now safe to load credentials api_key = get_credential('SERVICE_API_KEY') ```
### Bash 技能 ```bash #!/usr/bin/env bash set -euo pipefail
# Validate .env exists and is secure if ! python3 ~/.openclaw/skills/credential-manager/scripts/enforce.py; then exit 1 fi
# Now safe to load source ~/.openclaw/.env ```
**这创建了一个快速失败系统:** 如果凭证未得到适当保护,技能将拒绝运行。用户被迫修复它。
## 加载凭证
迁移后,从 `.env` 加载:
### Python ```python import os from pathlib import Path
# Load .env env_file = Path.home() / '.openclaw' / '.env' with open(env_file) as f: for line in f: if '=' in line and not line.strip().startswith('#'): key, val = line.strip().split('=', 1) os.environ[key] = val
# Use credentials api_key = os.getenv('SERVICE_API_KEY') ```
### Bash ```bash # Load .env set -a source ~/.openclaw/.env set +a
# Use credentials echo "$SERVICE_API_KEY" ```
### 使用现有的加载器 如果您使用 OpenClaw 脚本进行了迁移: ```python from load_credentials import get_credentials creds = get_credentials('x') ```
## 添加新凭证
编辑 `~/.openclaw/.env`: ```bash # Add new service NEW_SERVICE_API_KEY=your_key_here NEW_SERVICE_SECRET=your_secret_here ```
同时更新模板: ```bash # Edit .env.example NEW_SERVICE_API_KEY=your_key_here NEW_SERVICE_SECRET=your_secret_here ```
## 回滚
如果出现问题:
```bash # Find your backup ls -la ~/.openclaw/backups/
# Restore specific file cp ~/.openclaw/backups/credentials-old-YYYYMMDD/x-credentials.json.bak \ ~/.config/x/credentials.json ```
## 注意事项
- **默认非破坏性:** 删除前备份原始文件 - **幂等性:** 可以安全地多次运行 - **可扩展:** 在脚本中添加自定义凭证模式 - **安全:** 永不记录完整的凭证,仅记录元数据