【问题标题】:Why mktemp with -u option is stated as unsafe in its manual?为什么带有 -u 选项的 mktemp 在其手册中被声明为不安全?
【发布时间】:2021-05-30 21:55:22
【问题描述】:

我想创建一个临时文件,正在查看 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)

【问题讨论】:

  • 我只想说这是您实际上并没有完全创建文件的事实,并且由于未遵循该过程,因此将其描述为不安全。在这种情况下,将 unsafe 定义为“不那么安全”可能会更好。
  • 这是我从 mktemp 文档gnu.org/software/coreutils/manual/html_node/… 中找到的:“生成一个不命名现有文件的临时名称,而不更改文件系统内容。使用此命令的输出创建一个新文件本质上是不安全的,因为在生成名称和使用它之间有一个时间窗口,另一个进程可以使用相同的名称创建对象。”

标签: linux temporary-files tmp mktemp


【解决方案1】:

当您使用-u 时,不会创建任何文件,因此稍后使用该名称并不能保证访问您创建的临时文件。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2017-05-05
    • 2018-03-16
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多