Linux不自动清理临时文件,责任在应用或管理员;/tmp默认10天清理,/var/tmp保留30天以上;安全实践强调mkstemp、权限控制和避免敏感数据存放。

Linux系统本身不自动清理进程创建的临时文件,清理责任在应用程序或系统管理员。内核不跟踪临时文件生命周期,/tmp 和 /var/tmp 的清理依赖外部机制(如 systemd-tmpfiles、cron 脚本或应用自身逻辑),而非文件系统内置功能。
/tmp 与 /var/tmp 的语义区别及清理策略
/tmp 是传统临时目录,按 POSIX 要求应“尽可能短时间保留”,多数发行版默认启用自动清理: - systemd 系统通过 systemd-tmpfiles 每次启动或定时(如 daily timer)清理过期文件(默认 10 天); - 部分发行版(如 Debian/Ubuntu)额外配置 cron.daily 脚本调用 tmpreaper,支持更细粒度控制(如跳过特定后缀、保留挂载点下文件); - 若 /tmp 是 tmpfs(内存文件系统),重启即清空,但需注意内存占用和大文件写入失败风险。
/var/tmp 设计用于跨重启持久的临时数据,标准建议保留至少 30 天,通常不被日常清理机制覆盖,需应用自行管理或人工介入。
进程创建临时文件的安全实践
避免权限泄露与竞态攻击是核心目标: - 使用 mkstemp() 或 mktemp -t 创建带随机后缀的文件,禁止拼接固定路径(如 "/tmp/myapp.log"); - 创建后立即 unlink()(若仅需匿名临时文件)或设置严格权限(chmod 0600),防止其他用户读写; - 不在临时目录中创建目录时忽略 umask 影响,应显式调用 chmod() 设为 0700; - 避免在 /tmp 中存放敏感凭证、密钥或未加密的用户数据,优先使用 /run/user/$UID/(logind 管理的 per-user runtime 目录)。
系统级清理配置与审计要点
管理员需主动验证并加固清理行为: - 检查 systemd-tmpfiles --dry-run --all 输出,确认 /tmp 清理规则(通常由 /usr/lib/tmpfiles.d/*.conf 定义)是否启用且参数合理(如 x 行指定过期时间); - 若禁用 systemd-tmpfiles,需确保替代方案(如自定义 cron)已部署并日志可查; - 审计长期驻留 /tmp 的文件:用 find /tmp -type f -mtime +7 -ls 定位异常陈旧文件,结合 lsof +D /tmp 查看是否被进程占用; - 对容器化环境,临时目录应绑定挂载独立卷,并在容器退出时清理,避免宿主机 /tmp 污染。
应用开发者的最小安全清单
临时文件处理不应依赖系统“帮忙”: - 所有临时文件路径必须经 mktemp 类接口生成,不硬编码; - 文件创建后立即设置所有权(chown)和权限,拒绝 group/other 访问; - 使用 O_TMPFILE flag(Linux 3.11+)直接创建无名临时文件,规避路径竞态; - 进程退出前确保 atexit() 或信号处理器中清理残留(但需考虑崩溃场景,故仍需服务端兜底); - 日志中记录临时文件路径与生命周期,便于事后追踪异常。










