首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们需要mktemp?

为什么我们需要mktemp?
EN

Stack Overflow用户
提问于 2012-07-25 02:09:19
回答 5查看 53.5K关注 0票数 61

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

比方说,touch xyzmktemp xyz有什么不同(除了mktemp会创建一些附加了xxx的文件,并且会有600个权限?)

请澄清。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-25 02:14:09

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

想象一下你做了这样的事情:

代码语言:javascript
复制
echo something > /tmp/temporary-file

在您的root运行脚本中。

并且有人(读过你的脚本)这样做了

代码语言:javascript
复制
ln -s /etc/passwd /tmp/temporary-file

在此之前。

这会导致/etc/passwd被覆盖,这可能意味着从系统开始的不愉快的事情被破坏,并以系统被黑客攻击结束(当输入something可以仔细制作时)。

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

代码语言:javascript
复制
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函数因为不安全而被弃用。

票数 67
EN

Stack Overflow用户

发布于 2012-07-25 02:13:37

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

"mktemp“符合要求:)

票数 37
EN

Stack Overflow用户

发布于 2012-07-25 02:28:50

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

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

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

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

触摸更改文件时间戳

如果文件已经创建,它只需更改文件的时间戳;如果文件不存在,则创建文件。但默认情况下文件权限仍为644。

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

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

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11636790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档