Назад | Перейти на главную страницу

Запуск сценариев Perl CGI на CentOS 7 с Apache / Httpd

Мои скрипты CGI Perl CentOS 7 работают некорректно, они либо отображаются в виде обычного текста, либо я получаю сообщение об ошибке сервера.

Я поместил свои скрипты в стандартные /var/www/cgi-bin каталог без везения.

Я попытался разместить CGI-скрипты в /var/www/html/another-dir но они просто появляются как обычный текст.

Вот как добиться правильного выполнения сценариев CGI Perl в CentOS 7.

Я оставляю это здесь, так как кажется, что многие ресурсы в Интернете не объединяют эти шаги и оставляют таких, как я, очень запутанными.

Короче говоря, это то, что нужно сделать.

  1. Установите программное обеспечение.
  2. Создайте свой тестовый файл CGI.
  3. Убедитесь, что модуль CGI загружен. Внутри httpd.conf.
  4. Измените настройки каталога в httpd.conf.
  5. Измените разрешения, чтобы разрешить выполнение CGI.

Установить и настроить программное обеспечение

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 ++, находящегося в меню «Правка»); в противном случае вы получите ошибку сервера.