Я пытаюсь загрузить файлы на веб-сервер под управлением Apache / 2.4.6 на CentOS 7, используя простой скрипт Perl. Я получаю сообщение об отказе в разрешении. Мой код:
[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 вручную, файл создается, а когда я открываю его в веб-браузере, файл не создается. Помощь будет очень признательна. Спасибо.
CentOS 7 включает SELinux, который не позволяет процессам веб-сервера записывать в домашние каталоги пользователей (хотя его можно настроить на позволять читать из домашних каталогов пользователей).
Чтобы решить проблему, выберите другой каталог и установить его контекст SELinux разрешить писать (httpd_sys_rw_content_t). Обычно, чтобы избежать проблем с SELinux, веб-контент следует помещать в каталоги в /srv/www
или /var/www
.