虽然我可以用mktemp
和touch
创建临时文件,但mktemp
在脚本编写方面比手动touch
创建文件有多大的可靠性和/或安全性?
mktemp
会随机化名称。从安全角度来看,这是非常重要的。
想象一下,你做了这样的事情:
echo something > /tmp/temporary-file
在根运行脚本中。
有人(看过你的剧本)做
ln -s /etc/passwd /tmp/temporary-file
之前。
这会导致/etc/passwd
被覆盖,并且可能意味着从系统开始的不同的不愉快的事情会被破坏,到系统被黑客入侵(当输入something
可以被精心制作时)。
mktemp
命令可以在这种情况下帮助您:
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}
现在这个ln /etc/passwd
攻击将不起作用。
mktemp历史简介:mktemp
命令是由OpenBSD人员发明的,早在1997年就首次出现在OpenBSD 2.1中。他们的目标是提高shell脚本的安全性。以前的规范是将$$
添加到临时文件名中,这是绝对不安全的。现在,所有UNIX/Linux系统都有mktemp
或其替代品,它成为了事实上的标准。有趣的是,mktemp
C函数因不安全而遭到抨击。
您经常想要一个"scratchpad文件";(或目录)。此外,您可能同时需要多个这样的文件,而且您不想麻烦弄清楚如何命名它们,这样就不会有冲突。
mktemp
符合要求:)
/tmp
作为临时目录。例如https://termux.com/由于技术原因(它在Android中作为进程运行),与tmp目录有不同的长路径。
使用mktemp
创建临时文件或目录的脚本将是可移植的,也可以在这种特殊环境中工作。
好的,实际上它在手册页中写得很清楚。
mktemp-创建一个临时文件或目录。
安全地创建一个临时文件或目录,并打印其名称。
它安全地创建一个文件或目录意味着没有其他用户可以访问它,这就是为什么它的权限是600
触摸更改文件时间戳
如果文件已经创建,它只需更改文件的时间戳,如果不存在,则创建一个文件。但默认情况下,文件权限仍然是644。
有关更多详细信息,请查看以下手册页:
http://linux.die.net/man/1/mktemp
http://linux.die.net/man/1/touch
至少在bash shell中,您可以执行以下操作:
dirpath="/tmp/dir1-$$/dir2-$$"
mkdir -p $dirpath
chmod -R 0700 /tmp/dir1-$$
例如。