我已经读到将输出重定向到其中的一个固定名称文件/tmp
可能会带来安全风险,因为如果攻击者(或恶意内容)/tmp/tmpfileformyscript.tmp
在运行脚本时注意到已创建文件(即使他没有访问我的文件的权限),脚本),例如,他可以进行符号链接ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp
,这会导致我.bashrc
在运行脚本时破坏文件。
因此,我可以使用filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"
。
但是,有时我想使用一个tmp文件进行缓存,在这种情况下,我想知道“ tmpfile.tmp。*”是否匹配其中的任何内容/tmp
,如果匹配,请使用该文件而不是创建一个新文件。不幸的是test
,[ -f filename ]
据我所知,等效项不支持文件遍历。
因此,我的问题是双重的:
- 如何安全地创建一个临时文件?是
"predictablename.$RANDOM"
可接受的做法还是有更好(更安全,更轻松)的方法? - 如何在以后通过检查轻松访问文件和/或确定其存在
predictablename
?
$TMPDIR
,并~/.cache
是正是我需要的。经过进一步的思考,我意识到我想要它的唯一原因/tmp
是分区-因此缓存无法填满/home
分区。但是对于这个用例来说,这实际上是一个完全不存在的问题,因此,一个~/.cache
适合我的需求的子目录完全可以避免安全问题。