什么是用于安全地创建临时目录的POSIX功能?

时间:2012-09-24 18:54:49

标签: security unix directory posix mkdir

对于在/tmp中创建临时目录的任务, 对于可移植代码,如何在mkdtempmkstemp等之间进行选择?

1 个答案:

答案 0 :(得分:12)

我认为您需要在其他用户可能具有写权限的目录中创建临时目录。

作为管理员,您应该进行设置,以便每个用户都有自己的TMPDIR(例如使用pam-tmpdir - 或者更好地使用per-process namespaces,但需要更多设置)。但是,作为一个应用程序编写者,你不能假设这一点,所以你需要应对一个世界可写的/tmp

这里的正确功能是mkdtemp,因为mkstemp只能创建常规文件。 mkdtemp仅在POSIX.1 2008中引入,因此原则上它可能尚未在所有POSIX平台上提供。但是,它已经在主要平台上使用了很长时间:

  • on OpenBSD from 2.2(1997)
  • 自Free 2.2.7(1998)
  • 以来
  • on NetBSD自1.4(1998)
  • 以来
  • on OSX,因为...... 10.0?
  • 自从Glibc 2.2(1999)以来,
  • 在Linux上(使用Glibc)
  • in dietlibc至少自2001年以来
  • 从uClibc开始,我认为
  • in MINIX 3
  • 仅在Solaris 10 之后的Solaris上

因此,在实践中,您可以安全地使用mkdtemp。如果您需要回退,请在源代码中包含OpenBSD实现。