0

我的 bash shell 需要一个临时文件。假设文件名冲突不是问题,我可以说mktemp不如手动触摸临时文件umask 066吗?

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

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

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

4

2 回答 2

1

这两个命令注定不会做同样的事情。 mktemp以灵活的方式创建文件,并具有确保使用唯一名称的功能。 touch将修改文件的时间戳(如果文件不存在则创建它),但您提供名称。

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

但是,如果您确实需要制作一个临时文件并确保不会覆盖任何其他文件,touch那么您什么也做不了。也许它“更轻”,但在这种情况下没用,你需要mktemp.

于 2017-01-18T17:40:39.243 回答
0

mktemp 命令由 OpenBSD 的 Todd C. Miller 编写,用于防止 shell 脚本中的常见漏洞。用他自己的话来说

Mktemp 是一个简单的实用程序,旨在使 shell 脚本中的临时文件处理变得安全和简单。传统上,编写 shell 脚本的人使用的结构如下:

TFILE=/tmp/foop.$$

这是微不足道的攻击。如果这样的脚本以 root 身份运行,则本地主机上的攻击者可能会获得对 root 登录的访问权限、损坏或取消链接系统文件,或执行各种其他令人讨厌的事情。

基本问题是大多数 shell 没有等效于 open(2) 的 O_EXCL 标志。虽然使用临时目录可以避免这种情况,但我认为使用 mktemp(1) 在简单性和健壮性方面都更胜一筹。

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

于 2021-01-18T15:41:05.770 回答