Bash mktemp vs.umask 066和touch?

Bash mktemp vs.umask 066和touch?,bash,shell,umask,mktemp,Bash,Shell,Umask,Mktemp,我的bashshell需要一个临时文件。假设文件名冲突不是问题,我能说mktemp不如在umask 066之后手动触摸临时文件好吗 我的假设是: mktemp是一个系统功能,与手动触摸文件相比,它仍然需要更多的资源 我读过一些关于ln-s etc/passwd攻击的文章,但它看起来像是几十年前的一个故事,当时密码没有被隐藏 如果我的理解有误,请纠正我。这两个命令的作用并不相同mktemp以灵活的方式创建文件,并具有确保文件使用唯一名称的功能touch将修改文件的时间戳(如果文件不存在,则创建时间

我的bashshell需要一个临时文件。假设文件名冲突不是问题,我能说
mktemp
不如在
umask 066
之后手动触摸临时文件好吗

我的假设是: mktemp是一个系统功能,与手动触摸文件相比,它仍然需要更多的资源

我读过一些关于
ln-s etc/passwd
攻击的文章,但它看起来像是几十年前的一个故事,当时密码没有被隐藏


如果我的理解有误,请纠正我。

这两个命令的作用并不相同
mktemp
以灵活的方式创建文件,并具有确保文件使用唯一名称的功能
touch
将修改文件的时间戳(如果文件不存在,则创建时间戳),但您需要提供名称

如果您想创建一个已命名的空文件,请使用
touch
;如果要在之后立即写入该文件,则不需要首先创建它,只需重定向到它即可


但是,如果您确实需要创建临时文件并确保不会覆盖任何其他文件,
touch
对您没有任何帮助。它可能“更轻”,但在这种情况下没有用处,您需要
mktemp

mktemp命令是由OpenBSD的Todd C.Miller编写的,用于防止shell脚本中的常见漏洞。在:

Mktemp是一个简单的实用程序,用于在中进行临时文件处理 shell脚本必须安全且简单。传统上,人们喜欢写作 shell脚本使用了如下结构:

TFILE=/tmp/foop.$$
这些都是微不足道的攻击。如果这样的脚本以root用户身份运行,则可能 本地主机上的攻击者有可能访问 root登录、损坏或取消系统文件链接,或执行各种其他操作 讨厌的东西

基本问题是,大多数壳都没有与open(2)等效的壳 不包括国旗。虽然可以使用临时 目录中,我认为MKTEMP(1)的使用在两个方面都是优越的。 简单性和健壮性


影子密码在这里没有帮助。如果脚本以root用户身份运行,并且以不安全的方式写入临时文件,则攻击者可能会利用竞争条件修改/etc/password或/etc/shadow或两者

mktemp
touch
都是需要在单独进程中运行的外部命令。我觉得没有理由在
mktemp
上使用
touch
。我只是觉得mktemp需要生成一个需要计算的随机值。而触摸是非常直接的。在我的例子中,使用触摸屏,is使用209K内存。使用mktemp,它使用308K内存。增加了50%。我知道现在100k内存真的什么都不是,只是如果两者都能实现同样的目标,为什么我不选择使用更少资源的一个呢。谢谢你的解释。与umask+touch相比,mktemp是否有任何与安全相关的优势?据我所知,mktemp创建的文件只能由其所有者访问,因此我希望是这样。如果您对创建文件时使用的权限不满意,可以使用“chmod”修改文件的权限(无论如何创建、触摸、mktemp或其他方式)。