By Marcos Oliveira,

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

Curso Extremamente Avançado em Shell Script Bash

Você irá descobrir técnicas avançadas de escrever em Shell Script. Como criar instaladores para distribuições Linux, Animações, Documentações, além de tudo sobre Processos em sistemas tipo UNIX, detalhes sobre Comandos Avançados e Muito Mais !