Запуск сценариев Perl CGI в CentOS 7 с помощью Apache / Httpd

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

Я безуспешно помещал свои сценарии в каталог по умолчанию / var / www / cgi-bin .

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

4
задан 28 January 2016 в 04:36
3 ответа

Вот как заставить скрипты 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: // /hello.cgi

] Пожалуйста, не стесняйтесь добавлять любую дополнительную информацию, которая может помочь другим .

7
ответ дан 3 December 2019 в 02:50

(Некоторые люди в Интернете сказали, что chmod 755 и 777 также могут работать.)

Если вы разделяете сервер с кем-либо еще, и в целом из-за возможной атаки вы почти определенно не следует использовать / any / из 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 января - хороший звонок , разрешения в учебнике слишком велики.

1
ответ дан 3 December 2019 в 02:50

Еще одно примечание, которое следует упомянуть, это то, что если вы пишете свой код в среде Windows, а затем удаленно загружаете его в сервер, убедитесь, что вы преобразовали файл в Unix EOL (особенно при использовании Notepad ++, находящегося в меню «Правка»); в противном случае вы получите ошибку сервера.

0
ответ дан 3 December 2019 в 02:50

Теги

Похожие вопросы