cgi脚本无法写入apache下的世界可写文件

cgi script can't write to world writable file under apache

我正在尝试使用 CentOS 7、Apache 2.4 和 Ruby 2.0 创建一个简单的 CGI 脚本。所有工具都是从官方包安装的。

我的脚本位于 /var/www/cgi-bin/test.cgi 是:

#!/usr/bin/ruby

puts "Content-Type: text/plain\n\n"
begin
    file = File.open("test.log", "a")
    file.puts("foobar")
    file.close
rescue Exception
    puts "pwd: #{`pwd`}"
    puts $!.inspect
end

当我加载 http://myhost/cgi-bin/test.cgi 时,我得到以下信息:

pwd: /var/www/cgi-bin
#<Errno::EACCES: Permission denied - test.log>

但是:

[root@host cgi-bin]# ls -l /var/www/cgi-bin
total 8
-rwxr-xr-x. 1 root root 153 Jul 10 22:03 env.cgi
-rwxr-xr-x. 1 root root 359 Jul 11 00:45 test.cgi
-rw-rw-rw-. 1 root root   0 Jul 11 00:42 test.log

如果不是脚本自己的工作目录中的世界可写文件,我如何(以及在​​哪里)从这个 cgi 脚本中写入数据?

SELinux 阻止文件写入。 "setenforce Permissive" 让他们通过了。编辑 /etc/sysconfig/selinux 并重新启动以使其永久化。