Hospedando programa de Shell Script como página HTML

Os scripts de Shell, sejam em linguagem BASH ou outro interpretador de comandos, são peça fundamental para diminuir o tempo gasto com inúmeras linhas de comandos em servidores Linux,FreeBDS, Solaris, etc. O grande problema é quando um cliente Windows precisa executar esta aplicação remotamente ou até quando se quer construir uma interface mais “user friendly” para o programa.

Uma solução bem legal para este tipo de entrave é hospedar o script de Shell em um servidor Apache, tornando-o acessível via Web Browser por qualquer workstation com qualquer navegador, ou seja: o programa vai se tornar um CGI.

Para este exemplo vamos utilizar o seguinte cenário:

  • Servidor: Debian 6  – X86_64
  • Web server: Apache2
  • Interpretador de comandos: BASH 4
  • IP do servidor: 192.168.1.103


INSTALAÇÃO/CONFIGURAÇÃO DO APACHE2:
Instalando através de repositório APT:
#apt-get install apache2 -y
Agora temos que habilitar o funcionamento de CGI no Apache, assim como criar um Alias para o diretório onde vão ficar os scripts que vão ser executados:
#vim /etc/apache2/sites-available/default
Nas linhas acima estamos carregando o módulo mod_cgi.so do Apache, o que habilita a interpretação de aplicações CGI pelo serviço. Também estamos dizendo que o diretório onde será hospedada a aplicação será o /usr/lib/cgi-bin, mas para o usuário o acesso será feito no alias /shell, por exemplo: http://192.168.1.103/shell/index.sh.
Como em qualquer alteração em qualquer site do Apache, vamos recarregar o serviço:
#/etc/init.d/apache2 reload
*No caso do Red Hat, todo esse procedimento (feito ate agora) precisaria ser feito de outra forma.
Agora que a parte do Apache já está configurada, vamos ao script:
CRIANDO O SCRIPT
Tomarei como exemplo um script de backup de usuários do sistema (bem simples):
Criando o Index:
#vim /usr/lib/cgi-bin/index.sh
Repare que o “action” aponta para um arquivo chamado bkp.sh, que será efetivamente a aplicação que vai executar o backup. Vamos agora criar esta aplicação:
#vim /usr/lib/cgi-bin/bkp.sh

Explanando o script:

Primeiramente, vamos criar uma variável para a data, que vai receber a data do dia no formato dia-mês-ano, para que o arquivo de backup seja exclusivo para cada dia.

A variável ‘login’ vai receber os dados da página index.sh no seguinte formato: login=valor, portanto, para ficarmos apenas com o campo do valor, precisamos dar um “print” nessa variável obtendo apenas o campo do valor, o que está sendo feito na criação da variável ‘usr’.

A variável homedir vai buscar o diretório pessoal do usuário dentro do arquivo /etc/passwd (melhor forma de saber exatamente qual o homedir do usuário).

APLICANDO AS PERMISSÕES E EXECUTANDO A APLICAÇÃO:

Não podemos esquecer de que o usuário utilizado pelo Apache para ler e executar as páginas é o www-data (que tem por grupo primário o www-data), sendo assim, vamos criar o diretório de backup e mudar o dono para www-data:

#mkdir /backup && chown www-data /backup

É também importante que os arquivos de script sejam executáveis:

#chmod +x /usr/lib/cgi-bin/index.sh

#chmod +x /usr/lib/cgi-bin/bkp.sh

 

Agora vamos testar tudo isso em um browser qualquer de qualquer cliente:

Como resultado:

 

Vamos conferir se realmente o backup foi feito no diretório /backup do servidor:

 

Boa sorte a todos!!

www.brunoodon.com.br

  • Bruno ,

    Muito bom seu post. como as palavras do Vagner , faço as minhas “O Shell é o limite.”

    Grande Abraço.

  • Edwilson Silva

    E ai Bruno .. tudo blz?

    Excelente artigo…. muito bom mesmo.

    Um grande abraço.
    NOTA: Acabei por não me tornar professor de lá !

  • Muito interessante sua dica e util.
    Pois acho que vou acabar usando ela para um outro recurso qu eme veio a mente, acho que só mudaria no “Allow from ” de All para os IP’s autorizados a realizarem tal recurso.

    Valew. Parabens.