![mktemp 如何在 ubuntu 中没有写权限的目录中创建临时文件?](https://linux22.com/image/1364523/mktemp%20%E5%A6%82%E4%BD%95%E5%9C%A8%20ubuntu%20%E4%B8%AD%E6%B2%A1%E6%9C%89%E5%86%99%E6%9D%83%E9%99%90%E7%9A%84%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%88%9B%E5%BB%BA%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我注意到在 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用户身份执行此操作没有失败,那么就会发生一些非常奇怪的事情。你确定这就是你看到的吗?