我的bash shell需要一个临时文件。假设文件名冲突不是问题,我可以说mktemp
不如在umask 066
之后手动触摸临时文件一样好吗?
我的假设是: mktemp是一个系统功能,与手动触摸文件相比,它还需要更多的资源。
我已经阅读了有关ln -s etc/passwd
攻击的内容,但几十年前,当密码没有被隐藏时,它看起来就像是一个故事。
如果我的理解错误,请纠正我。
答案 0 :(得分:1)
这两个命令注定不会做同样的事情。 mktemp
以灵活的方式创建文件,并具有确保使用唯一名称的功能。 touch
将修改文件的时间戳(如果文件不存在,则创建它),但提供名称。
如果要创建一个已有名称的空文件,请使用touch
;如果您要立即写入该文件,则无需先创建该文件,只需重定向即可。
但是如果你真的需要制作一个临时文件并确保你不会覆盖任何其他文件,touch
对你没有任何帮助。它可能“更轻”,但在这种情况下无用,你需要mktemp
。
答案 1 :(得分:0)
mktemp 命令由 OpenBSD 的 Todd C. Miller 编写,用于防止 shell 脚本中的常见漏洞。在his own words:
<块引用>Mktemp 是一个简单的实用程序,旨在在 shell 脚本是安全和简单的。传统上,人们写作 shell 脚本使用了如下结构:
TFILE=/tmp/foop.$$
攻击是微不足道的。如果这样的脚本以 root 身份运行,它可能 本地主机上的攻击者可以访问 root 登录、损坏或取消链接系统文件,或执行各种其他操作 讨厌的东西。
基本问题是大多数 shell 没有与 open(2) 等效的 O_EXCL 标志。虽然可以使用临时方法来避免这种情况 目录,我认为 mktemp(1) 的使用在 简单性和稳健性方面。
影子密码在这里没有帮助。如果脚本以 root 身份运行并以不安全的方式写入临时文件,那么攻击者可能会利用竞争条件来修改 /etc/password 或 /etc/shadow 或两者!