在CGI中写入文件会导致不同的文件

时间:2015-10-07 20:07:09

标签: perl cgi

我在Perl CGI中有这部分代码:

open(FH, '>', '/tmp/homeip.conf') or die $!;
print FH $ip;
close FH;

但该文件已写入/tmp/systemd-private-CxvLw6/tmp/homeip.conf而非/tmp/homeip.conf。为什么是这样?以及如何将文件写入所需的文件夹?

1 个答案:

答案 0 :(得分:1)

  

为什么会这样?

应用程序不应使用/tmp,因为它通常是全局可写的,这是一种安全风险。 systemd尝试通过allowing services to create a private /tmp directory修复与其他用户和服务看到的/tmp不同的内容。

这在Apache的systemd单元文件(我系统上的/usr/lib/systemd/system/httpd.service)中启用:

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
...
PrivateTmp=true
  

如何将文件写入所需的文件夹?

这是一种安全风险,所以不要这样做。如果您需要其他进程可以访问您的临时文件,请将它们存储在一个不可写入世界的目录中。