为什么 mktemp -u 被认为是“不安全的”?

S.S*_*nne 1 gnu coreutils filenames files mktemp

我最近阅读了--help文本mktempman页面不可用)并发现了这个:

  -u, --dry-run       do not create anything; merely print a name (unsafe)
Run Code Online (Sandbox Code Playgroud)

为什么这是“不安全”?是否有任何具体原因将其标记为这样?

Ste*_*itt 6

整点mktemp是,引用它的手册,以“创建一个临时文件或目录,安全”。基本上,在脚本中,您可以编写

file="$(mktemp)"
Run Code Online (Sandbox Code Playgroud)

或者

dir="$(mktemp -d)"
Run Code Online (Sandbox Code Playgroud)

并按照您的意愿使用,因为只有运行命令的用户才能访问临时文件和目录(当然,在大多数设置中也是 root),并且它们不是指向其他内容的符号链接,这是安全的,等(还有一些需要注意的地方,特别是需要检查退出状态,父目录需要安全使用,详见文档。)

mktemp -u不提供这些保证,因为它将文件名的构造与其使用分开;在脚本中,您必须运行(不要这样做

dir="$(mktemp -u)"
mkdir "$dir"
chmod 700 "$dir"
Run Code Online (Sandbox Code Playgroud)

mktemp和之间mkdir,另一个进程可以创建目录,但拥有不同的所有权;或者,对于文件,另一个进程可以创建该文件或在其位置创建符号链接...