问题描述
我想创建一个临时文件并且正在阅读 mktemp 手册,发现带有 -u 选项的 mktemp 被声明为不安全,这背后的原因是什么?
mktemp --help
Usage: mktemp [OPTION]... [TEMPLATE]
Create a temporary file or directory,safely,and print its name.
TEMPLATE must contain at least 3 consecutive 'X's in last component.
If TEMPLATE is not specified,use tmp.XXXXXXXXXX,and --tmpdir is implied.
Files are created u+rw,and directories u+rwx,minus umask restrictions.
-d,--directory create a directory,not a file
-u,--dry-run do not create anything; merely print a name (unsafe)
解决方法
当您使用 -u
时,不会创建任何文件,因此以后使用该名称并不能保证访问您创建的临时文件。
在调用 mktemp
和使用结果之间有一个机会让另一个进程创建具有该名称的文件。该文件可能是一个符号链接,允许其他用户滥用您的权限在某处写入。
如果您使用 mktemp -u
,您需要非常小心地确保此类竞赛不可利用。
通常,最好创建一个临时目录 (mktemp -d
),并在该目录中使用您选择的名称。