我不明白mktemp的功能和临时文件的含义。
比方说,touch xyz和mktemp xyz有什么不同(除了mktemp会创建一些附加了xxx的文件,并且会有600个权限?)
请澄清。
发布于 2012-07-25 02:14:09
mktemp随机化了这个名字。从安全的角度来看,这是非常重要的。
想象一下你做了这样的事情:
echo something > /tmp/temporary-file在您的root运行脚本中。
并且有人(读过你的脚本)这样做了
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或者它的替代品,并且它已经成为事实上的标准。有趣的是,mktemp C函数因为不安全而被弃用。
发布于 2012-07-25 02:13:37
您通常需要一个“便签簿文件”(或目录)。此外,您可能同时需要几个这样的文件,并且您不想费心去弄清楚如何命名它们,这样就不会有冲突。
"mktemp“符合要求:)
发布于 2012-07-25 02:28:50
好的,实际上它在手册页中写得很清楚。
mktemp -创建临时文件或目录。
安全地创建临时文件或目录,并打印其名称。
它安全地创建文件或目录意味着没有其他用户可以访问它,这就是它权限为600的原因
触摸更改文件时间戳
如果文件已经创建,它只需更改文件的时间戳;如果文件不存在,则创建文件。但默认情况下文件权限仍为644。
有关更多详细信息,请查看以下手册页:
http://linux.die.net/man/1/mktemp
http://linux.die.net/man/1/touch
https://stackoverflow.com/questions/11636790
复制相似问题