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

fch*_*che 4 unix security directory posix mkdir

对于创建一个临时目录的任务/tmp,如何将一个选择mkdtemp,mkstemp等,为移植的代码?

Gil*_*il' 12

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

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

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

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

所以在实践中,你可以安全地使用mkdtemp.如果需要回退,请在源代码中包含OpenBSD实现.