62

我不明白mktemp临时文件的功能和含义。

touch xyzsay和之间有什么区别mktemp xyz(除了mktemp会创建一些附加了 xxx 的文件并具有 600 个权限的事实之外?)

请澄清。

4

5 回答 5

68

mktemp随机化名称。从安全的角度来看,这是非常重要的。

想象一下,你做了类似的事情:

echo something > /tmp/temporary-file

在您的根运行脚本中。

有人(读过你的剧本)确实

ln -s /etc/passwd /tmp/temporary-file

前。

这会导致/etc/passwd被覆盖,并且可能意味着从系统开始的不同不愉快的事情被破坏,以系统结束的事情被黑客入侵(当输入something可以精心设计时)。

在这种情况下,该mktemp命令可以帮助您:

TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}

现在这种ln /etc/passwd攻击将不起作用。

简要了解 mktemp 的历史:该mktemp命令由 OpenBSD 人员发明,并于 1997 年首次出现在 OpenBSD 2.1 中。他们的目标是提高 shell 脚本的安全性。以前的标准是添加$$临时文件名,这绝对不安全。现在所有的 UNIX/Linux 系统都有mktemp或者它的替代品,它成为事实上的标准。有趣的是,mktempC 函数因不安全而被弃用。

于 2012-07-24T18:14:09.317 回答
39

您经常需要一个“便签本文件”(或目录)。此外,您可能同时需要几个这样的文件,并且您不想费心弄清楚如何命名它们,这样就不会发生冲突。

“mktemp”符合要求 :)

于 2012-07-24T18:13:37.373 回答
9

还有一个额外的原因:并非所有系统都/tmp用作临时目录。例如https://termux.com/由于技术原因(它在 Android 内部作为进程运行),具有不同的长路径,因为它是 tmp 目录。

使用创建临时文件或目录的脚本mktemp将是可移植的,并且也可以在此类特殊环境中工作。

于 2016-11-27T12:03:34.777 回答
8

好的,实际上它在手册页中写得很清楚。

mktemp - 创建一个临时文件或目录。

安全地创建一个临时文件或目录,并打印其名称。

它安全地创建文件或目录意味着没有其他用户可以访问它,这就是它的权限为 600 的原因

touch - 更改文件时间戳

如果已经创建文件,它只是更改文件的时间戳,如果不存在则创建文件。但是文件权限默认还是644。

有关更多详细信息,请查看以下手册页:

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch

于 2012-07-24T18:28:49.947 回答
0

至少在 bash shell 中,您可以执行以下操作:

dirpath="/tmp/dir1-$$/dir2-$$"  
mkdir -p $dirpath  
chmod -R 0700 /tmp/dir1-$$  

例如。

于 2016-09-17T16:04:57.737 回答