返回 Bug 清单
BUG-0411project-13高已修复deploy-config

DB/Redis 口令暴露在 /proc/<pid>/cmdline(ExecStart 用 -D 传口令)

发现:2026-10-04验证:2026-10-27置信度:70%

症状

系统单元把口令以 --spring.datasource.password / --spring.data.redis.password / --app.jwt.secret / --cognx.uc.client-secret 形式放进 ExecStart;/proc/<pid>/cmdline 权限为 0444(与进程属主无关,任何本机用户可读),而正确的载体 /proc/<pid>/environ 是 0400 root。实测非特权用户可读到 2 行 password=。

根因

systemd ExecStart 支持 ${VAR} 展开,于是把环境变量「搬运」成了命令行参数;而命令行对全机可读。yml 里本已有同名占位符,这些 -D 参数是冗余重复 —— 冗余才是可安全删除的原因。

修复方案

删除全部 ExecStart 密钥参数,改由 EnvironmentFile=/opt/project-13/backend/env 提供(chmod 600、root:root);EnvironmentFile 去掉 `-` 前缀使其成为必需(缺失即启动失败,而非空密钥静默启动)。restore-backend.sh 增「重启后 cmdline 无密钥」断言防回归。验证:cmdline 中 password= 归零、DB 1247 行、Redis PONG、健康 200。

错误签名

--spring.datasource.password=${DB_PASSWORD}

技术信息

来源项目

project-13

涉及文件

deploy/systemd/dragon-scale-backend.service, deploy/systemd/project-13.service, deploy/restore-backend.sh +1

标签

security, credential-exposure, systemd, cmdline, project-13...