启用 privatetmp=true 可为 systemd 服务创建隔离的 /tmp 和 /var/tmp 命名空间;需在服务单元文件 [service] 段添加该选项,重载并重启后通过 systemctl show 和 nsenter 验证;推荐配合 /etc/tmpfiles.d/ 清理规则使用,并注意兼容硬编码 /tmp 的旧应用。

Linux中为systemd服务设置独立的临时目录,核心是启用 PrivateTmp=true,它让服务在启动时获得自己专属的 /tmp 和 /var/tmp 命名空间,与其他服务完全隔离。
修改服务单元文件启用私有临时目录
编辑对应的服务文件(如 /etc/systemd/system/myapp.service),在 [Service] 段添加:
PrivateTmp=true
保存后重载配置并重启服务:
sudo systemctl daemon-reloadsudo systemctl restart myapp.service
验证是否生效
执行两条命令确认隔离已建立:
Agent 记忆系统 — 五路融合检索 + 双时间线 + 因果链 + Spirit管家 + 记忆回声 + 弹性配置 + Circuit Breaker + GDPR合规 + 192项安全审计修复
-
systemctl show myapp.service | grep PrivateTmp→ 应输出PrivateTmp=yes -
sudo nsenter -t $(pgrep -f 'myapp') -m -p ls /tmp→ 只能看到该服务自己创建的文件,看不到其他服务的临时内容
配合临时目录自动清理(可选但推荐)
即使启用了私有 /tmp,服务自身产生的临时文件仍需定期清理。可在 /etc/tmpfiles.d/ 下新建配置文件(如 myapp-tmp.conf):
-
q /tmp/systemd-private-%m-myapp-*/tmp 1777 root root 1h(清理私有命名空间内超过1小时的临时文件) -
X /tmp/systemd-private-%m-myapp-*(跳过整个私有目录,避免误删)
注意:%m 是机器ID占位符,systemd会自动替换;X 表示完全排除,比 x 更安全。
常见注意事项
某些旧应用硬编码依赖全局 /tmp 路径,启用 PrivateTmp 后可能报错。此时不建议关闭隔离,而应:
- 优先修改应用代码或配置,使用运行时传入的
TMPDIR环境变量 - 极少数必须挂载的情况,可用
BindPaths=显式绑定子路径(不推荐,削弱安全性) - 确保服务未启用
NoNewPrivileges=false或缺失RestrictSUIDSGID=true,否则可能绕过隔离效果










