Habilitar Cgi-Shell no Apache2

Publicado por Raimundo Alves Portela em 09/12/2011

[ Hits: 38.354 ]

Blog: http://portelanet.com

 


Habilitar Cgi-Shell no Apache2



Nessa dica ajudo a mostrar como habilitar a execução de comandos Shell dentro de páginas web, por meio de CGI no Apache2.

Habilitar módulo cgi

Certifique-se de que o módulo cgi esteja sendo carregado no arquivo "/etc/apache2/mods-available/cgi.load":

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

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


Agora verifique-se que ele esteja habilitado no arquivo "/etc/apache2/mods-enabled/cgi.load":

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

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


Obs.: Se nos dois arquivos essa linha estiver comentada, com um '#" no inicio, retire-o e salve o arquivo.

Agora que temos o módulo habilitado, precisamos informar ao Apache qual o formato a ser manipulado para cgi-script no arquivo "/etc/apache2/mods-enabled/mime.conf", no meu caso usei o tradicional '.sh'

Abra o arquivo com seu editor de texto:

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

Procure a linha:

#AddHandler cgi-script .cgi

Deixe-a assim:

AddHandler cgi-script .cgi .sh


Preparando o Ambiente

Agora você precisa habilitar o parâmetro 'ExecCGI' dentro de 'Options' na referência ao diretório virtual do Apache2, no meu caso não modifiquei o padrão (/var/www), em vez disso criei um novo alias para um novo diretório criado para brincar com o shell.

E além disso, precisamos ter um diretório o usuário do Apache, no caso o 'www-data', tenha poderes. Então fiz:

$ sudo mkdir /home/shell
$ sudo chmod 771 /home/shell
$ sudo chown www-data /home/shell
$ sudo chgrp rai3mb /home/shell


Ok, criei o diretório, deixei o 'www-data' como usuário dono dele e como grupo o do meu usuário 'rai3mb', para que eu possa manipular arquivos com meu usuário.

Agora basta criar o diretório virtual no apache apontando para o '/home/shell', edite o arquivo "/etc/apache2/sites-available/default":

sudo nano /etc/apache2/sites-available/default

#!/bin/bash
echo Content-type: text/html
echo
#---------------------------------------------------
read DADOS
FRASE=$(echo "$DADOS" | cut -d'=' -f2 | tr '+' ' ')
LANG=$(echo "$DADOS" | cut -d'=' -f3)
#---------------------------------------------------------------------------------------------------------
touch frase.mp3
wget -q -U Mozilla -O frase.mp3 "http://translate.google.com/translate_tts?ie=UTF-8&tl=$LANG&q=$FRASE"

cat <<FIM
<EMBED SRC='frase.mp3' AUTOSTART=FALSE LOOP=FALSE name='musica' id='musica'>
FIM

echo "<br/>Dados recebidos: <b>$DADOS</b>"


Obs.: Script baseado em: Script: Transformar eBook em Audiobook

Basta salvar dentro do diretório que você criou, no meu caso /home/shell, dar permissão de execução para o arquivo 'form_teste.sh', e chamar no Browser:

http://localhost/shell/pag_teste.html
Linux: Habilitar Cgi-Shell no Apache2
pag_teste.html

Linux: Habilitar Cgi-Shell no Apache2
form_teste.sh

Até a próxima.
@rai3mb

Outras dicas deste autor

Usando o script alertaTwitter

Usando o SHC um compilador de Shell-Script genérico

Tint2 - minha barra/painel de janelas de volta

Adquira a Linux Magazine Community

Atualizando conteúdo dinamicamente com jQuery

Leitura recomendada

Conhecendo o printf

Criar "ícone" para executar Scripts

Aulas Shell Script do zero - Parte 5

Aulas Shell Script do zero - Parte 1

Usando SSH de forma automática com senha (sem publicar chaves)

  

Comentários
[1] Comentário enviado por danniel-lara em 10/12/2011 - 12:33h

Parabéns pela dica

[2] Comentário enviado por rejanevl em 14/07/2013 - 14:22h

eu fiz tudo do mesmo jeito, mas sempre que coloco pra rodar um código .html no browser aparece essa mensagem:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/2.2.22 (Ubuntu) Server at localhost Port 80

pra rodar um código .html eu preciso dar permissão?

não sei o que estou fazendo de errado. Você pode me ajudar?

[3] Comentário enviado por thbenko em 17/09/2013 - 20:52h

Salve....

Primeiramente parabéns pelo artigo.

Eu estou com um problema estranho, ao acessar a pasta que eu setei o alias, ele da erro 403 Forbidden.

Já até joguei permissão pra 777 e mesmo assim continua o erro.

Alguma ideia?

[4] Comentário enviado por thbenko em 17/09/2013 - 21:02h

Só acrescentando.

Olhei o log do apache e ele retorna o seguinte erro:
[error] [client 177.*.*.*] Directory index forbidden by Options directive: /concept/scripts/web/

[5] Comentário enviado por marssolinha em 18/01/2014 - 01:07h

Boa Madrugado rai3mb, tudo bem?

Estou com um sério problema.
Tenho um servidor Ubuntu em uma Escola, e preciso gerenciar ele por meio de um sistema em php, porem, apesar de seguir todos os passos do seu tutorial o meu script aparece com o erro 403 Forbidden, e não consigo executar.

Por favor me ajude se puder.

Agradeço desde já,

Abraços
Mauro Marssola



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts