我不明白mktemp
临时文件的功能和含义。
touch xyz
say和之间有什么区别mktemp xyz
(除了mktemp
会创建一些附加了 xxx 的文件并具有 600 个权限的事实之外?)
请澄清。
我不明白mktemp
临时文件的功能和含义。
touch xyz
say和之间有什么区别mktemp xyz
(除了mktemp
会创建一些附加了 xxx 的文件并具有 600 个权限的事实之外?)
请澄清。
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 函数因不安全而被弃用。
您经常需要一个“便签本文件”(或目录)。此外,您可能同时需要几个这样的文件,并且您不想费心弄清楚如何命名它们,这样就不会发生冲突。
“mktemp”符合要求 :)
还有一个额外的原因:并非所有系统都/tmp
用作临时目录。例如https://termux.com/由于技术原因(它在 Android 内部作为进程运行),具有不同的长路径,因为它是 tmp 目录。
使用创建临时文件或目录的脚本mktemp
将是可移植的,并且也可以在此类特殊环境中工作。
好的,实际上它在手册页中写得很清楚。
mktemp - 创建一个临时文件或目录。
安全地创建一个临时文件或目录,并打印其名称。
它安全地创建文件或目录意味着没有其他用户可以访问它,这就是它的权限为 600 的原因
touch - 更改文件时间戳
如果已经创建文件,它只是更改文件的时间戳,如果不存在则创建文件。但是文件权限默认还是644。
有关更多详细信息,请查看以下手册页:
至少在 bash shell 中,您可以执行以下操作:
dirpath="/tmp/dir1-$$/dir2-$$"
mkdir -p $dirpath
chmod -R 0700 /tmp/dir1-$$
例如。