我应该使用多少个“X”来使用“mktemp”安全且可移植地创建临时文件?

我应该使用多少个“X”来使用“mktemp”安全且可移植地创建临时文件?

有时,我会通过调用参数中mktemp包含 6 个或更多的命令来从 shell 脚本创建临时文件。但是,我不确定该数量是否适用于其他实现,因为我发现了具有不同数量的命令(例如,XTEMPLATEmktemp这里,这里, 和这里)。

我做了一些研究并发现了以下内容:

  • GNU 实现mktemp需要三个或更多X

  • OpenBSD 的实现mktemp似乎需要 6X个。然而,我几乎不知道是什么底层代码做。

  • FreeBSD 实现手册mktemp命令和功能X对于模板应该有多少个相当模糊。

答案1

可移植选项是六个或更多,因为这就是mkstemp(3)所做的事情,这就是正在模拟的行为。然而,在某些系统上,指定超过 6 个会导致仅使用尾随的 6 个,而其余的则保留为X。无论如何,如果内部使用 CSPRNG,六个应该足以防止攻击者 DoSing 该进程。

请注意,在某些系统(例如,带有 GNU 工具的 Linux)上,您可以完全删除模板,尽管这不可移植。大多数系统需要模板或前缀为 的文件-t,如果您想要的文件不在 中$TMPDIR,则需要模板。至少对于 FreeBSD 和 macOS 来说是这样。

您可能还会发现一些系统根本不支持mktemp(1),因为 POSIX 不要求它。然而,它被广泛使用,并且至少存在于 Linux、macOS、FreeBSD、NetBSD、OpenBSD、HP-UX 和 Solaris 上,因此您可以简单地告诉人们在任何缺少它的系统上安装 GNU coreutils。

相关内容