Execute scripts CGI Perl no CentOS 7 com Apache / Httpd

4

Meus scripts CGI Perl do CentOS 7 não estão sendo executados corretamente, eles estão aparecendo como texto simples ou estou recebendo um erro do servidor.

Eu tenho colocado meus scripts no diretório /var/www/cgi-bin padrão sem sorte.

Eu tentei colocar scripts CGI em /var/www/html/another-dir , mas eles estão chegando como texto simples.

    
por Joseph 28.01.2016 / 03:36

3 respostas

6

É assim que scripts CGI Perl são executados corretamente no CentOS 7.

Estou deixando isso aqui, pois parece que muitos dos recursos na internet não combinam os passos e deixam pessoas como eu muito confusas.

Em resumo, isso é o que precisa ser feito.

  1. Instalar software.
  2. Crie seu arquivo CGI de teste.
  3. Verifique se o módulo CGI está carregado. Dentro de httpd.conf .
  4. Altere as configurações do diretório em httpd.conf .
  5. Altere as permissões para permitir a execução de CGI.

Instalar e configurar software

sudo yum update
sudo yum install httpd
sudo yum install perl perl-CGI
sudo systemctl start httpd.service
sudo systemctl enable httpd.service

Crie seu arquivo CGI de teste

Mesmo seguindo essas etapas durante todo o tempo, nunca obtive um script CGI dentro de /var/www/cgi-bin para carregar sem modificar a raiz da Web dentro de httpd.conf . Em vez disso, decidi ativar o CGI em outro diretório.

No meu servidor, quero que a raiz da web html mantenha meus arquivos CGI. Isso é /var/www/html/hello.cgi

#!/usr/bin/perl
print "Content-type: text/html\n\n"; # This is mandatory.
print "<h2>Hello world!</h2>";

Certifique-se de que o módulo CGI esteja carregado. Dentro de httpd.conf

Você pode fazer uma verificação fácil para isso por meio do comando.

grep -n "LoadModule" /etc/httpd/conf/httpd.conf

Eu pude ver que nenhum módulo CGI foi especificado e confirmei sua existência dentro da pasta de módulos via:

find /etc/httpd/modules/ -iname "*cgi*"

Este é o que eu sou depois:

/etc/httpd/modules/mod_cgi.so

Vamos adicionar isso ao arquivo /etc/httpd/conf/httpd.conf :

LoadModule cgi_module modules/mod_cgi.so

Eu acredito que você precisa carregar o de uma maneira diferente no Ubuntu , tenha isso em mente.

Altere as configurações do diretório em httpd.conf

Antes de reiniciar o httpd , temos que alterar mais uma coisa em /etc/httpd/conf/httpd.conf :

<Directory "var/www/html">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>

De acordo com muitos Googlings, talvez seja necessário também modificar essa parte do arquivo httpd.conf para que aponte para o mesmo diretório acima de "var/www/html" :

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

Eu não modifiquei o meu, não pareceu fazer diferença.

Altere as permissões para permitir que o CGI seja executado

E este me deixou muito preso! Não negligencie isso!

Você precisa dizer ao seu servidor que esses scripts CGI podem ser executados como programas.

chmod 705 *.cgi

Ou você pode segmentar scripts CGI individuais.

chmod 705 hello.cgi

(Algumas pessoas na internet disseram que chmod 755 e 777 também funcionam.)

Agora reinicie httpd da seguinte forma:

sudo systemctl restart httpd.service

Neste ponto, meus scripts CGI são renderizados corretamente em HTML.

Eles estão sendo veiculados da raiz da Web assim: http://<IP>/hello.cgi

Por favor, sinta-se à vontade para adicionar mais informações que possam ajudar os outros.

    
por 13.04.2017 / 14:22
1

(Some people on the internet have said that chmod 755 and 777 might also work.)

Se você estiver compartilhando o servidor com qualquer outra pessoa e, em geral, por causa de um possível ataque, você provavelmente não deveria estar usando / any / de 755, 705 ou 777. Isso daria a outros usuários conectados ao seu servidor a capacidade para executar seus scripts com quaisquer argumentos que eles escolherem. Em vez disso, certifique-se de que seus scripts e todos os diretórios acima dele possuam nginx, apache ou qualquer usuário / grupo que execute seu servidor da web e supostamente execute seus scripts, como proprietário ou grupo (usando o comando chown ou chgrp). Em seguida, defina o terceiro bit em chmod para 0 (você nunca deve usar algo mais permissivo que 750), porque outros usuários em seu servidor (exceto você e nginx / apache, seja um intruso ou um usuário legítimo), tem / não / negócios executando, lendo ou modificando seus scripts a partir do shell.

Você pode ler as permissões do arquivo linux em, por exemplo, link ou link etc

Boa sorte!

EDIT: Esta é uma explicação do que o usuário chick escreveu em 28 de janeiro - boa chamada, as permissões são muito permissivas no tutorial.

    
por 08.08.2016 / 12:07
0

Mais uma observação a ser mencionada é que, se você estiver gravando seu código no ambiente Windows e, em seguida, transferindo-o remotamente para o servidor, converta o arquivo para Unix EOL (especialmente ao usar o Notepad ++) , encontrado no menu Editar); caso contrário, você receberá um erro do servidor.

    
por 28.01.2018 / 00:06