Bash mktemp vs.umask 066和touch?
我的bashshell需要一个临时文件。假设文件名冲突不是问题,我能说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将修改文件的时间戳(如果文件不存在,则创建时间
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或其他方式)。