🛡️ Credential Vault / 凭证保险箱

使用 GPG AES-256 加密管理密码与密钥,支持安全存储、读取和删除。

已扫描
适合谁
开发者、系统管理员
不适合谁
无技术背景的普通用户、需要企业级多租户支持的团队
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @king6381/mjolnir-credential-vault

Skill 说明

命令、参数、文件名以原文为准

🛡️ Credential Vault / 凭证保险箱

GPG AES-256 对称加密凭证管理器 — 一个文件,管理所有密钥。

⚡🔨 雷神工具链的一部分

🛡️ 品牌:雷神之盾(Shield of Thor)


依赖

  • Python 3.8+
  • GPG (gnupg) — 多数 Linux/macOS 系统已预装;Windows 需安装 [Gpg4win](https://gpg4win.org)
  • 检查命令:gpg --versioninit 命令会自动验证)

必需环境变量

变量用途是否必需
CRED_MASTER_PASS加解密主密码非交互使用时必需;未设置则交互输入

快速开始

# 初始化(首次使用)—— 检查 GPG 可用性
python3 SKILL_DIR/scripts/cred_manager.py init

# 交互式添加凭证
python3 SKILL_DIR/scripts/cred_manager.py add myservice

# 非交互使用
export CRED_MASTER_PASS="your_password"

SKILL_DIR 替换为实际的技能目录路径。


安全模型

工作原理

  1. 所有凭证以 AES-256 加密的 .gpg 文件形式存储(权限 600)
  2. 主密码通过 --passphrase-fd(stdin 管道)传递给 GPG — 绝不出现在命令行参数中
  3. Shell 辅助脚本同样使用 --passphrase-fd 0(echo 管道)— 不用 --passphrase

临时明文落盘

在保存/加密操作期间,明文 JSON 会短暂存在于临时文件中:

  • 使用 mkstemp + fchmod 600 创建(仅所有者可读写)
  • 仅存在毫秒级(GPG 子进程执行期间)
  • 安全删除:零覆写 → fsync → unlink
  • 风险:在某些系统上,临时文件内容可能从磁盘恢复。如需更高安全性,请使用 tmpfs/ramfs 挂载或专用密钥管理器。

主密码存储

CRED_MASTER_PASS 环境变量在 Linux 上可被同用户进程通过 /proc/*/environ 读取。

推荐方式(安全性从高到低):

  1. gpg-agent / pinentry — 每次交互输入密码(最安全)
  2. 运行时注入 — 通过密钥管理器或会话级 read -s 提示设置
  3. 环境变量 — 在当前 shell 中设置 export CRED_MASTER_PASS="..."(方便但安全性较低)

避免: 将主密码明文写入文件(如 ~/.bashrc)。如必须,请确保 chmod 600 并了解风险。


核心操作

初始化

python3 scripts/cred_manager.py init

验证 GPG 已安装,创建加密的 credentials.json.gpg(权限 600)。密码少于 8 位会警告。

添加/更新凭证

python3 scripts/cred_manager.py add <service_name>
# 交互式:输入 key=value 键值对,空行结束

或程序化调用:

from cred_manager import add_credential
add_credential('github', {'user': 'octocat', 'token': 'ghp_xxx'})

获取凭证

Python:

from cred_manager import get_credential, get_service

token = get_credential('github', 'token')    # 单个字段
config = get_service('github')               # 完整字典

Shell / Bash:

export CRED_MASTER_PASS="your_password"
source scripts/cred_helper.sh
TOKEN=$(cred_get github token)

CLI:

python3 scripts/cred_manager.py get github token
python3 scripts/cred_manager.py list

删除

python3 scripts/cred_manager.py remove <service_name>

集成模式

当脚本中存在硬编码密码时,重构为:

import sys, os
sys.path.insert(0, os.path.expanduser('path/to/credential-vault/scripts'))
from cred_manager import get_credential

password = get_credential('myservice', 'pass')

已知限制

  1. 临时明文落盘 — 加密操作期间短暂存在(已缓解但非零风险)
  2. 环境变量可见性CRED_MASTER_PASS 在 Linux 上可被同用户进程读取
  3. 无密钥轮换 — 更换主密码需手动重新加密
  4. 单用户设计 — 不适用于企业多租户场景
  5. 无篡改检测.gpg 文件完整性未独立验证

如需更高安全性,请考虑:OS 密钥环、pass、HashiCorp Vault 或云 KMS。


更新日志

  • v1.3.1 — 修复注册表元数据:声明 gpgpython3 二进制和 CRED_MASTER_PASS 环境变量
  • v1.3.0 — 中英双语文档;双语 CLI 输出
  • v1.2.0 — 安全加固:Python 与 Shell 均使用 --passphrase-fd;坦诚披露临时文件机制;三级密码建议
  • v1.1.0 — Python 端使用 --passphrase-fd stdin 管道传密码
  • v1.0.0 — 首次发布
K
@king6381

已收录 1 个 Skill

相关推荐