主要观点:评论指出/tmp
通常不是个好主意,虽曾常见安全问题但如今已少见,其存在导致诸多复杂和安全问题,如共享全局可变状态跨越安全边界等,介绍了多种与/tmp
相关的 Unix 机制及问题,如粘性位、C 语言中的tmp
相关函数、mktemp
在 shell 中的使用、tmp
清理脚本问题及补救措施(如 per-user 的$TMPDIR
)等,虽无法回到过去去掉/tmp
,但仍在努力使其更安全,作者在写软件时避免使用/tmp
。
关键信息:/tmp
的安全问题及历史演变、各种与/tmp
相关的 Unix 机制和函数及其特点、per-user 的$TMPDIR
作为补救措施、使/tmp
更安全的努力等。
重要细节:
- 粘性位最初用于加快常用程序,后用于目录以解决
/tmp
的安全问题,使目录中的文件只有特定用户可删除。 - POSIX 曾提供 5 种创建临时文件的方式,其中 3 种已被弃用,2 种较安全的函数后来被添加。
mkstemp
和mkdtemp
函数用于创建安全的临时文件和目录,要生成不可预测的文件名等。mktemp
命令是mkstemp
的包装器,可安全用于 shell 脚本。tmp
清理脚本存在时间-检查/时间-使用漏洞等问题。- 若有 per-user 的
$TMPDIR
,可避免/tmp
相关的安全问题,setuid 程序需更小心创建临时文件。 - 过去未采用 per-user 的
$TMPDIR
主要是路径依赖等原因,现在有一些使/tmp
更安全的机制如pam_namespace
和systemd PrivateTmp
。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。