我注意到在 ubuntu 中,mktemp 允许用户在目录中创建临时文件,即使该用户没有写入权限。因此,我期望 mktemp 上的权限如下所示,在运行它时为用户提供临时 root 权限:
-rwsr-xr-x 1 root root 35392 Nov 19 2012 mktemp
但他们读到的是这样的:
-rwxr-xr-x 1 root root 35392 Nov 19 2012 mktemp
我以为是“s”的地方,其实是“x”,这意味着 mktemp 不以 root 权限运行。mktemp 如何在没有权限的情况下在目录中创建临时文件?
答案1
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
例如,如果你mktemp --tmpdir=/root
以非root用户身份执行此操作没有失败,那么就会发生一些非常奇怪的事情。你确定这就是你看到的吗?