Blog Linux

Iremos admitir que você já sabe instalar o Apache e já utiliza-o com PHP, HTML,…caso não saiba pesquise na internet como instalá-los. O bom de usar CGI é que você pode executar comando do Shell Script na sua página Web.

A maioria das distribuições já possuem o módulo CGI do Apache configurado e com o suporte a ele.

Caso deseje certificar-se de que o módulo já está carregado, basta verificar em

Obs: Estou usando o Editor Nano, mas vc pode usar o de sua preferência. Logue-se como root , se não possuir o sudo.

su
nano /etc/apache2/mods-available/cgi.load

Veja se dentro do arquivo aberto há essa linha descomentada

LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so

Certifique-se também de que já está habilitado

nano /etc/apache2/mods-enabled/cgi.load

Se estiver comentado (#), “descomente” e salve o arquivo.

Agora vamos informar ao Apache quais os formatos que desejamos trabalhar

nano /etc/apache2/mods-enabled/mime.conf

Procure nele a linha que possui o seguinte código

#AddHandler cgi-script .cgi

Se estiver comentado, “descomente” e adicione o .sh no final, deixando-o assim

AddHandler cgi-script .cgi .sh

Caso não esteja habilitado, rode esse comando para leitura de arquivos CGI

a2enmod cgi

Por padrão no Debian Jessie há uma pasta que manda o http://localhost/cgi-bin/ para /usr/lib/cgi-bin , ou seja, se você pôr um arquivo cgi dentro de /usr/lib/cgi-bin automaticamente quando vc acessar seu http://localhost/cgi-bin/ ele irá acessar /usr/lib/cgi-bin. Mas caso vc deseje alterar o endereço, para por exemplo: http://localhost/sh/ , então vc precisa editar o arquivo 000-default.conf e adicionar uma linha do com ScriptAlias nele, assim

nano /etc/apache2/sites-available/000-default.conf

E adicione ANTES da tag o seguinte código

ScriptAlias /sh/ /usr/lib/cgi-bin/

Salve-o e depois restarte o Apache

systemctl restart apache2

Ou só releia o arquivo de configuração:

service apache2 reload

Depois é só criar um arquivo teste, exemplo o que vou disponibilizar aqui abaixo, salvá-lo no diretório /usr/lib/cgi-bin e depois acessar o endereço http://localhost/cgi-bin/ ou http://localhost/sh/ , dependendo se vc criou alias do Document Root ou não, e ver se está tudo ok.

Após salvar o arquivo, não esqueça de dar permissão de visualização para ele

chmod a+x /usr/lib/cgi-bin/teste.cgi

Arquivo teste.cgi

#!/bin/bash
  
echo "content-type: text/html"
echo
echo
echo "
  <html> <head> <meta charset='utf-8' /> <title> CGI script </title> </head>
  <body>
  <h1>Algumas informações sobre a máquina que o CGI está rodando:</h1>
  "
  
echo "<h4>uptime</h4>"
echo "<pre>$(uptime)</pre>"
  
echo "<h4>uname</h4>"
echo "<pre>$(uname -a)</pre>"
  
echo "<h4>/proc/cpuinfo</h4>"
echo "<pre>$(cat /proc/cpuinfo)</pre>"
  
echo "
  </body>
  </html>
  "

Caso deseje, fiz esse script que faz TODAS AS ETAPAS acima descritas para Habilitar CGI e .sh no Apache, se não quiser rodá-lo, veja as alterações que ele efetua!

#!/bin/bash
# ./enable-cgi-apache2.sh
# esse script habilita cgi e .sh no apache do debian jessie
[[ $(id -u) != 0 ]] || echo -e "Permissão negada, é root?\nAbortar.";exit 1
echo "aguarde habilitando cgi e .sh no apache..."
VersaoApache=$(apache2 -v | sed -n 1p | awk {'print $3'} | cut -d/ -f2)
echo "versao do apache2: $VersaoApache"
echo "LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so" >  /etc/apache2/mods-available/cgi.load
echo "LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so" > /etc/apache2/mods-enabled/cgi.load
sed -i 's/\#AddHandler cgi\-script \.cgi/AddHandler cgi\-script \.cgi \.sh/' /etc/apache2/mods-enabled/mime.conf
a2enmod cgi
_TEMP=$(mktemp)
cat /etc/apache2/sites-available/000-default.conf > $_TEMP
echo "ScriptAlias /sh/ /usr/lib/cgi-bin/" > /etc/apache2/sites-available/000-default.conf
cat $_TEMP >> /etc/apache2/sites-available/000-default.conf
systemctl restart apache2
service apache2 reload
/etc/init.d/apache2 restart
_TESTE=$(mktemp)
wget https://goo.gl/zjBMn8 -O $_TESTE 2>/dev/null
cat $_TESTE > /usr/lib/cgi-bin/teste.sh
chmod a+x /usr/lib/cgi-bin/teste.sh
echo "configuração realizada."
echo "acesse: http://0.0.0.0/sh/teste.sh"
exit 0

Qualquer dúvida, é só comentar.

Abraços.

Tutorial Oficial da Apache

Debian HandBook

thobias.org

VOL