Repository navigation
Security.zh
sikkatu edited this page Nov 2, 2026
·
3 revisions
持久 KV 数据源自提示词 —— 请把缓存目录视为其中存放着对话文本本身。 将 KV 激活值反演回提示词内容虽费力,但并非不可能。
| 措施 | 实现 |
|---|---|
| 文件系统权限 |
KVP_CACHE_ROOT 以 chmod 700 创建;任何脚本都不会放宽。systemd 包装脚本(systemd/kvp-lmcache-server)在启动时强制执行 0700,否则拒绝运行 —— 仅靠 StateDirectory= 会创建出 0755 的目录,可被所有人读取的缓存根目录直接违反威胁模型(KV 数据等同于聊天文本)。 |
| 管理端点 | lmcache HTTP 前端仅绑定 127.0.0.1;不要置于无认证的反向代理之后 |
| 缓存请求端口 | ZMQ,127.0.0.1:5555(回环) |
| 凭证 | 绝不存在仓库或缓存配置中;vLLM API 密钥存于配方自身的 live/api_key(chmod 600,在 .gitignore 中) |
| 日志记录 | 脚本和管理 CLI 只记录键、大小和计数 —— 绝不记录提示词文本或请求头 |
| 命名空间隔离 | 不兼容的部署无法读取彼此的 KV 数据 |
| 删除安全 |
purge 拒绝 KVP_CACHE_ROOT 以外的路径(退出码 2),且需要 --yes。缓存布局是扁平的:*.bin 文件直接位于根目录下(命名空间即文件名前缀),另有遗留的 kvp-* 目录(如有)。按精确命名空间名定点清理(purge --namespace=NAME --yes),批量用 purge --all --yes,崩溃残余用 purge --tmp --yes(不触碰真实缓存文件和进行中的写入) |
| 共享存储 | 不支持作为缓存根目录(预检对网络文件系统发出警告) |
| 启动清空 | 绝不发生 —— 重启和升级后数据保留在原处 |
| 显式清理 |
bash scripts/budget-report.sh purge --namespace=NAME --yes / purge --all --yes / purge --tmp --yes —— 仅手动 |
- 不要将 lmcache HTTP 前端置于无认证的反向代理之后。 远程诊断请使用 SSH 端口转发,而不是暴露端口。
- 不要在主机之间复制
KVP_CACHE_ROOT(其内容源自提示词)。 - 调试时不要把提示词文本写入日志;使用键/计数(所有随附工具都遵守此规则)。
- 将
budget-report.sh status的输出视为私密:长度、日期和复用计数都是 用户活动元数据。 - 缓存目录的敏感级别等同聊天记录 —— 至少执行相同的备份/访问策略。
- 树中不含凭证、令牌、对话文本或缓存数据 (外部评审者的检查清单中包含凭证 grep)。
- 推送所用的 GitHub fine-grained 令牌会在工作会话结束后吊销并重新签发; 绝不提交令牌,只在本地 git 命令 URL 中使用。
通过仓库私有渠道(sikkatu/kv-persistence 的 issues);公开披露需在分诊之后。