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

Share

    Comments

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

    2. E ai Bruno .. tudo blz?
      Excelente artigo…. muito bom mesmo.
      Um grande abraço.
      NOTA: Acabei por não me tornar professor de lá !

    3. 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.

    4. Muito bom !!

      Uma pena que as imagens não estão disponíveis, assim perdi um pedaço da explicação. Fez falta.

    Deixe um comentário

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    © 2019 All Rights Reserved. Cooperati.