mktemp 如何在 ubuntu 中没有写权限的目录中创建临时文件?

MYV*_*MYV 2 linux permissions ubuntu

我注意到在 ubuntu 中,mktemp 允许用户在目录中创建临时文件,即使该用户不允许写权限。因此,我希望 mktemp 上的权限可以读取这样的内容,在运行时为用户提供临时 root 权限:

-rwsr-xr-x 1 root root   35392 Nov 19  2012 mktemp
Run Code Online (Sandbox Code Playgroud)

但相反,他们读的是这样的:

-rwxr-xr-x 1 root root   35392 Nov 19  2012 mktemp
Run Code Online (Sandbox Code Playgroud)

我认为有一个 's' 的地方有一个 'x',这意味着 mktemp 不以 root 权限运行。mktemp 如何在没有权限的情况下在目录中创建临时文件?

Aar*_*ler 7

mktemp, 默认在 下创建一个临时目录/tmp,默认任何人都可以写;如果您将--tmpdir选项传递给mktemp(或设置TMPDIR环境变量),它将尝试在选项参数给定的目录中创建一个临时目录,除非您在给定目录中具有写权限,否则这失败。例如:

[me@box] $ mktemp
/tmp/tmp.sL1g7rRGQv
[me@box] $ mktemp --tmpdir=/root
mktemp: failed to create file via template `/tmp.XXXXXXXXXXX': Permission denied
Run Code Online (Sandbox Code Playgroud)

如果你正在做,例如,mktemp --tmpdir=/root作为一个非 root 用户并且它没有失败,那么一些非常奇怪的事情正在发生。你确定这是你看到的吗?

  • 有点吹毛求疵:恕我直言`/tmp` 通常设置了_sticky bit_ (`t`):`drwxrwxrwt root root 0 May 24 23:52 /tmp`。IE。每个人都可以在其中创建文件/目录,但不能删除/重命名其他人拥有的文件——即使它是 _formally_ 世界可写的,如 `ls` 所示。有关更多信息,请参见例如 https://en.wikipedia.org/wiki/Sticky_bit (5认同)