Мои скрипты CGI Perl CentOS 7 работают некорректно, они либо отображаются в виде обычного текста, либо я получаю сообщение об ошибке сервера.
Я поместил свои скрипты в стандартные /var/www/cgi-bin
каталог без везения.
Я попытался разместить CGI-скрипты в /var/www/html/another-dir
но они просто появляются как обычный текст.
Вот как добиться правильного выполнения сценариев CGI Perl в CentOS 7.
Я оставляю это здесь, так как кажется, что многие ресурсы в Интернете не объединяют эти шаги и оставляют таких, как я, очень запутанными.
Короче говоря, это то, что нужно сделать.
httpd.conf
.httpd.conf
.Установить и настроить программное обеспечение
sudo yum update
sudo yum install httpd
sudo yum install perl perl-CGI
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
Создайте свой тестовый файл CGI
Даже полностью выполнив эти шаги, я ни разу не получил внутри скрипта CGI. /var/www/cgi-bin
загрузить без изменения корневого веб-сайта внутри httpd.conf
. Вместо этого я решил просто активировать CGI в другом каталоге.
На моем сервере мне нужен веб-корень html
для хранения моих файлов CGI. Это /var/www/html/hello.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n"; # This is mandatory.
print "<h2>Hello world!</h2>";
Убедитесь, что модуль CGI загружен. Внутри httpd.conf
Вы можете легко проверить это с помощью команды.
grep -n "LoadModule" /etc/httpd/conf/httpd.conf
Я увидел, что модули CGI не указаны, и подтвердил их существование в папке модулей с помощью:
find /etc/httpd/modules/ -iname "*cgi*"
Это тот, который мне нужен:
/etc/httpd/modules/mod_cgi.so
Добавим это к /etc/httpd/conf/httpd.conf
файл:
LoadModule cgi_module modules/mod_cgi.so
Я считаю, что вам нужно загрузить модуль по-другому в Ubuntu, Запомни.
Измените настройки каталога в httpd.conf
Перед перезапуском httpd
мы должны изменить еще одну вещь внутри /etc/httpd/conf/httpd.conf
:
<Directory "var/www/html">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
По мнению многих пользователей Google, вам, возможно, придется изменить эту часть httpd.conf
файл, чтобы он указывал на тот же каталог, что и выше "var/www/html"
:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
Свою я не модифицировал, похоже, это не имело значения.
Измените разрешения, чтобы разрешить выполнение CGI
И этот меня сильно застрял! Не забывайте об этом!
Вы должны сообщить своему серверу, что эти сценарии CGI могут выполняться как программы.
chmod 705 *.cgi
Или вы можете настроить таргетинг на отдельные сценарии CGI.
chmod 705 hello.cgi
(Некоторые люди на Интернет сказал, что chmod 755
и 777
также может работать.)
Теперь перезапустите httpd
вот так:
sudo systemctl restart httpd.service
На данный момент мои сценарии CGI правильно отображаются в HTML.
Они обслуживаются из корневого веб-сайта следующим образом: http://<IP>/hello.cgi
Не стесняйтесь добавлять любую дополнительную информацию, которая может помочь другим.
(Некоторые люди в Интернете сказали, что chmod 755 и 777 также могут работать.)
Если вы разделяете сервер с кем-либо еще, и в целом из-за возможной атаки вам почти определенно не следует использовать / любой / из 755, 705 или 777. Это даст другим пользователям, вошедшим на ваш сервер, возможность выполнять ваши скрипты с любыми аргументами на выбор. Вместо этого убедитесь, что в ваших сценариях и во всех каталогах над ним есть nginx, apache или любой другой пользователь / группа, запускающая ваш веб-сервер, и должна выполнять ваши сценарии как владелец или группа (с помощью команды chown или chgrp). Затем установите третий бит в chmod равным 0 (вы никогда не должны использовать что-то более разрешительное, чем 750), потому что другие пользователи на вашем сервере (кроме вас и nginx / apache, будь то злоумышленник или законный пользователь) имеют / no / business выполнение, чтение или изменение ваших скриптов из оболочки.
Вы можете прочитать о разрешениях файлов Linux, например, https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps#octal или https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions и т.д
Удачи!
РЕДАКТИРОВАТЬ: это объяснение того, что пользователь chick написал 28 января - хороший звонок, разрешения в учебнике слишком разрешительные.
Еще одно примечание: если вы пишете свой код в среде Windows, а затем удаленно загружаете его на сервер, убедитесь, что вы конвертируете файл в Unix EOL (особенно при использовании Notepad ++, находящегося в меню «Правка»); в противном случае вы получите ошибку сервера.