为什么带有 -u 选项的 mktemp 在其手册中被声明为不安全?

Why mktemp with -u option is stated as unsafe in its manual?

我想创建一个临时文件,正在查看 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 时,不会创建任何文件,因此以后使用该名称并不能保证访问您创建的临时文件。

另一个进程有 window 的机会在调用 mktemp 和使用结果之间创建同名文件。该文件可能是一个符号 link,使其他用户可以滥用您的权限在某处写入。

如果你使用mktemp -u,你需要非常小心地确保这样的比赛是不可利用的。

通常,最好创建一个临时目录 (mktemp -d),并在该目录中使用您选择的名称。