Habilitando o Apache a utilizar Shell como CGI no CentOS 6.3

O apache já vem com suporte a CGI por padrão com isso vamos habilitar ele a utilizar shell script como CGI

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.

Vamos instalar o apache

yum install httpd

Agora vamos inserir ele na inicialização do sistema

chkconfig --add httpd
chkconfig httpd on

Vamos criar um diretório para armazenar as nossas páginas em shell

mkdir -p /var/www/html/shell

Agora vamos criar um virtualhost para armazenar as nossas páginas

vim /etc/httpd/conf.d/shell.conf
<VirtualHost *:80>
 ServerName shell.douglasqsantos.com.br
 ServerAlias shell.douglasqsantos.com.br
 DocumentRoot "/var/www/html/shell"

 #Controle de acesso ao shell
 <Directory "/var/www/html/shell">
   DirectoryIndex index.sh
   Options +ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch
   AddHandler cgi-script .sh
   AllowOverride All

   #Autenticação do shell
   AuthUserFile /etc/httpd/access/shell-htpasswd
   AuthName "Shell"
   AuthType Basic
   require valid-user
 </Directory>

 #Configuração dos logs do apache
 ErrorLog /var/log/httpd/shell.douglasqsantos.com.br-error.log
 CustomLog /var/log/httpd/shell.douglasqsantos.com.br-access.log common

 #Retirando a assinatura do Apache
 ServerSignature Off

 IndexIgnore .??* *~ *# README RCS CVS *,v *,t *

 # Possible values include: debug, info, notice, info, error, crit,
 # alert, emerg.
 LogLevel info
</VirtualHost>

Agora vamos criar a nossa página index.sh

vim /var/www/html/shell/index.sh
#!/bin/bash
#index.sh

echo Content-type: text/html
echo
echo "<h1>Hello World</h1>"

Como os sh vão trabalhar como cgi eles tem que ter permissão de execução senão vamos ter um erro do servidor apache

Vamos dar permissão para o index.sh

chmod +x /var/www/html/shell/index.sh

Agora vamos criar o diretório que vai armazenar a autenticação do nosso site

mkdir /etc/httpd/access/

Agora vamos criar o arquivo que vai armazenar os usuários, eu vou cadastrar o usuário shell

htpasswd -c -s /etc/httpd/access/shell-htpasswd shell
New password: 
Re-type new password: 
Adding password for user shell

Agora vamos reiniciar o apache

/etc/init.d/httpd restart

Agora já podemos acessar http://shell.douglasqsantos.com.br ou http://ip_servidor, aqui vai ser solicitado usuário que vai ser shell e a senha que foi definida para ele.

OBS: Não esqueça que os script vão ser executados pelo usuário apache e ele não tem permissão total ao sistema com isso vamos estar executando scripts como usuário comum.