Skip to content

Security.zh

sikkatu edited this page Nov 2, 2026 · 3 revisions

English | Русский | 中文

安全

威胁模型

持久 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);公开披露需在分诊之后。

Clone this wiki locally