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

Perl 在CGI中写入文件会导致不同的文件,perl,cgi,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。为什么会这样?如何将文件写入所需文件夹 为什么会这样 应用程序不应该使用/tmp,因为它通常是全局可写的,这是一种安全风险。尝试通过与其他用户和服务看到的/tmp不同的方式修复

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

open(FH, '>', '/tmp/homeip.conf') or die $!;
print FH $ip;
close FH;
但是文件被写入
/tmp/systemd-private-CxvLw6/tmp/homeip.conf
而不是
/tmp/homeip.conf
。为什么会这样?如何将文件写入所需文件夹

为什么会这样

应用程序不应该使用
/tmp
,因为它通常是全局可写的,这是一种安全风险。尝试通过与其他用户和服务看到的
/tmp
不同的方式修复此问题

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


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


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

看起来您的CGi进程是在
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
...
PrivateTmp=true