我正在尝试使用简单的 Perl 脚本将文件上传到在 CentOS 7 上运行 Apache/2.4.6 的 Web 服务器。我收到一条权限被拒绝的消息。我的代码:
[user@machine cgi-bin]$ cat test.pl
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use strict;
print header;
print start_html(-title => "Test");
print "<center> <h1> Hello </center>\n";
my $filename = "/home/apache/test.txt";
open(my $FILE, ">$filename");
if(-e $filename) {
print "$filename exists\n";
print $FILE "Hello\n";}
else {
print "$filename does not exist\n";}
close($FILE);
print end_html;
在查看了以前的答案后,我将权限更改为 /home/apache 目录,并将所有者更改为 apache。
drwxrwxrwx. 2 apache root 37 May 30 18:54 apache
但是,当我手动运行 test.pl 脚本时,文件会创建,而当我在 Web 浏览器中打开它时,文件不会创建。非常感谢您提供帮助。谢谢。
答案1
CentOS 7 包含 SELinux,它不允许 Web 服务器进程写到用户主目录(尽管可以设置为允许读来自用户主目录)。
要解决该问题,请选择其他目录,然后设置其 SELinux 上下文允许写入(httpd_sys_rw_content_t)。通常,为了避免 SELinux 出现问题,Web 内容应放置在/srv/www
或下的目录中/var/www
。