Como você pode fazer uma micro instância EC2 servir scripts CGI do lighthttpd? Por exemplo, Python CGI?
Bem, demorou meio dia, mas consegui o Python cgi rodando em uma micro-instância gratuita do Amazon AWS EC2, usando o servidor lighttpd. Acho que vai ajudar meus colegas noobs a colocar todos os passos em um só lugar. Armado com as etapas simples abaixo, você levará apenas 15 minutos para configurar as coisas!
Minha pergunta para os usuários mais experientes que estão lendo isso é: Existem falhas de segurança no que eu fiz? (Veja permissões de arquivo e diretório.)
Etapa 1: Inicie sua instância do EC2 e faça o ssh nela.
[Obviamente, você precisará se inscrever no Amazon EC2 e salvar seus pares de chaves em um arquivo * .pem. Não vou discutir isso, pois a Amazon diz como fazê-lo.]
Entre na sua conta da AWS e inicie sua instância do EC2. A web tem tutoriais sobre como fazer isso. Observe que o tamanho da instância padrão que a Amazon apresenta para você é "pequeno". Isso não é "micro" e, portanto, custará dinheiro. Certifique-se de escolher manualmente "micro". (As micro instâncias são gratuitas apenas no primeiro ano ...)
Encontre o código DNS público para sua instância em execução. Para fazer isso, clique na instância no painel superior do painel e, eventualmente, você verá o campo "DNS público" preenchido no painel inferior. (Talvez você precise se preocupar um pouco.) O DNS público se parece com:
ec2-174-129-110-23.compute-1.amazonaws.com
Inicie seu programa de console Unix. (No Max OS X, ele se chama Terminal, fica na pasta Aplicativos -> Utilitários.)
cd para o diretório do sistema da área de trabalho que possui o arquivo * .pem contendo os pares de chaves da AWS.
ssh para sua instância do EC2 usando um comando como:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>
Então, para mim, isso foi:
ssh -i amzn_ec2_keypair.pem [email protected]
Sua instância do EC2 deve permitir que você entre.
Etapa 2: faça o download do lighttpd na sua instância do EC2.
Para instalar o lighttpd, você precisará de acesso root na sua instância do EC2. O problema é: a Amazon não permitirá que você entre como root. (Não diretamente, pelo menos.) Mas há uma solução alternativa. Digite este comando:
sudo /bin/bash
O caractere de prompt do sistema mudará de $ para #. Não sairemos do "sudo" até a última etapa de todo esse processo.
Instale o aplicativo lighttpd (versão 1.4.28-1.3.amzn1 para mim):
yum install lighttpd
Instale as bibliotecas FastCGI para lighttpd (não necessário, mas por que não?):
yum install lighttpd-fastcgi
Teste se seu servidor está funcionando:
/etc/init.d/lighttpd start
Etapa 3: Deixe o mundo externo ver seu servidor.
Se você agora tentasse acessar seu servidor a partir do navegador da área de trabalho, ele falharia. O motivo: por padrão, o Amazon AWS não abre nenhuma porta para sua instância do EC2. Então, você precisa abrir as portas manualmente.
Vá para o painel do EC2 no navegador da área de trabalho. Clique em "Grupos de segurança" no painel esquerdo. Um ou mais grupos de segurança aparecerão no painel superior direito. Escolha o que foi atribuído à sua instância do EC2 quando você a iniciou.
Uma tabela chamada "Conexões permitidas" será exibida no painel inferior direito. Um menu pop-up permitirá que você escolha "HTTP" como método de conexão.
Os outros valores nessa linha da tabela devem ser: tcp, 80, 80, 0.0.0.0/0
Agora acerte o servidor da instância do EC2 na área de trabalho do seu navegador. Use o endereço DNS público usado anteriormente para fazer o SSH. Você deverá ver a página da web genérica lighttpd. Se não, não posso ajudá-lo, porque sou um noob. :-(
Etapa 4: configure o lighttpd para servir CGI.
De volta ao programa do console, cd para o diretório de configuração do lighttpd:
cd /etc/lighttpd
Para habilitar o CGI, você deseja descomentar uma linha no arquivo <modules.conf>. (Eu poderia ter ativado o Fast CGI, mas os passos do bebê são os melhores!) Você pode fazer isso com o editor "ed" da seguinte maneira:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
Crie o diretório em que os programas CGI residirão. (O arquivo /etc/lighttpd/lighttpd.conf determina onde isso será.) Criaremos nosso diretório no local padrão, para que não seja necessário editar os arquivos de configuração:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
Quase lá! Claro que você precisa colocar um programa CGI de teste no diretório cgi-bin. Aqui está um:
cd cgi-bin
ed
a
#!/usr/bin/python
print "Content-type: text/html\n\n"
print "<html><body>Hello, pyworld.</body></html>"
.
w hellopyworld.py
q
chmod 655 hellopyworld.py
Reinicie seu servidor lighttpd:
/etc/init.d/lighttpd restart
Teste seu programa CGI. No navegador da área de trabalho, pressione este URL, substituindo o endereço DNS público da sua instância do EC2:
http://<<Public DNS>>/cgi-bin/hellopyworld.py
Para mim, isso foi:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
Passo 5: É isso aí! Limpe e dê graças!
Para sair do comando "sudo / bin / bash" fornecido anteriormente, digite:
exit
Agradecimentos: Agradecimentos a:
wiki.vpslink.com/Install_and_Configure_lighttpd
www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html
aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html
Boa sorte amigos! Peço desculpas pela natureza não tradicional dessa "pergunta", mas recebi tanta ajuda do Stackoverflow que estava ansiosa para retribuir algo.
fonte
Respostas:
(Mensagem estranha, espero que não seja uma resposta tão estranha).
Sobre o assunto de falhas de segurança: é considerado uma prática ruim geral armazenar scripts cgi-bin na raiz do documento do servidor web. Até o W3C o escapa em "São linguagens compiladas como C mais seguras ..." nas Perguntas frequentes sobre segurança na World Wide Web :
Essa não é uma ameaça tão significativa quanto a capacidade de gravar um arquivo na raiz do documento. No entanto, um invasor pode obter o código-fonte do cgi, planejar um ataque direcionado contra ele e usá-lo como um trampolim para o servidor.
Para atenuar isso, você pode adicionar as seguintes linhas ao lighttpd.conf (ou alguma variação nele) para direcionar o cgi-bin para um diretório separado da raiz do documento / var / www / lighttpd.
Isso requer os módulos cgi e alias para o lighttpd.
fonte