¿Cómo puede hacer que una micro instancia EC2 sirva scripts CGI desde lighthttpd? Por ejemplo Python CGI?
Bueno, me llevó medio día, pero pude ejecutar Python cgi en una microinstancia gratuita Amazon AWS EC2, utilizando el servidor lighttpd. Creo que ayudará a mis compañeros novatos a poner todos los pasos en un solo lugar. ¡Armado con los simples pasos a continuación, le tomará solo 15 minutos configurar las cosas!
Mi pregunta para los usuarios más experimentados que leen esto es: ¿Hay alguna falla de seguridad en lo que he hecho? (Consulte los permisos de archivo y directorio).
Paso 1: Inicie su instancia EC2 y ssh en ella.
[Obviamente, deberá registrarse en Amazon EC2 y guardar sus pares de claves en un archivo * .pem. No voy a repasar esto, ya que Amazon te dice cómo hacerlo.]
Inicie sesión en su cuenta de AWS e inicie su instancia EC2. La web tiene tutoriales para hacerlo. Observe que el tamaño de instancia predeterminado que Amazon le presenta es "pequeño". Esto no es "micro" y, por lo tanto, le costará dinero. Asegúrese de elegir manualmente "micro". (Las micro instancias son gratuitas solo durante el primer año ...)
Encuentre el código DNS público para su instancia en ejecución. Para hacer esto, haga clic en la instancia en el panel superior del tablero y eventualmente verá el campo "DNS público" en el panel inferior. (Es posible que deba tocar un poco). El DNS público se parece a:
ec2-174-129-110-23.compute-1.amazonaws.com
Inicie su programa de consola Unix. (En Max OS X, se llama Terminal y vive en la carpeta Aplicaciones -> Utilidades).
cd al directorio en su sistema de escritorio que tiene su archivo * .pem que contiene sus pares de claves AWS.
ssh a su instancia EC2 usando un comando como:
ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>
Entonces, para mí, esto fue:
ssh -i amzn_ec2_keypair.pem [email protected]
Su instancia EC2 debería permitirle entrar.
Paso 2: descargue lighttpd a su instancia EC2.
Para instalar lighttpd, necesitará acceso root en su instancia EC2. El problema es: Amazon no le permitirá iniciar sesión como root. (No directamente, al menos). Pero hay una solución alternativa. Escriba este comando:
sudo /bin/bash
El símbolo del sistema cambiará de $ a #. No saldremos de "sudo" hasta el último paso de todo este proceso.
Instale la aplicación lighttpd (versión 1.4.28-1.3.amzn1 para mí):
yum install lighttpd
Instale las bibliotecas FastCGI para lighttpd (no es necesario, pero ¿por qué no?):
yum install lighttpd-fastcgi
Comprueba que tu servidor funciona:
/etc/init.d/lighttpd start
Paso 3: deja que el mundo exterior vea tu servidor.
Si ahora trataras de acceder a tu servidor desde el navegador en tu escritorio, fallaría. El motivo: de manera predeterminada, Amazon AWS no abre ningún puerto a su instancia EC2. Por lo tanto, debe abrir los puertos manualmente.
Vaya a su tablero EC2 en el navegador de su escritorio. Haga clic en "Grupos de seguridad" en el panel izquierdo. Aparecerán uno o más grupos de seguridad en el panel superior derecho. Elija el que se asignó a su instancia EC2 cuando inició su instancia.
Aparecerá una tabla llamada "Conexiones permitidas" en el panel inferior derecho. Un menú emergente le permitirá elegir "HTTP" como método de conexión.
Los otros valores en esa línea de la tabla deben ser: tcp, 80, 80, 0.0.0.0/0
Ahora presione el servidor de su instancia EC2 desde el escritorio en su navegador. Use la dirección DNS pública que utilizó anteriormente para SSH. Debería ver la página web genérica lighttpd. Si no lo haces, no puedo ayudarte porque soy un novato. :-(
Paso 4: Configurar lighttpd para servir CGI.
De vuelta en el programa de consola, cd al directorio de configuración para lighttpd:
cd /etc/lighttpd
Para habilitar CGI, desea descomentar una línea en el archivo <modules.conf>. (¡Podría haber habilitado Fast CGI, pero los mejores pasos son los mejores!) Puede hacer esto con el editor "ed" de la siguiente manera:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
Cree el directorio donde vivirán los programas CGI. (El archivo /etc/lighttpd/lighttpd.conf determina dónde estará). Crearemos nuestro directorio en la ubicación predeterminada, por lo que no tenemos que editar los archivos de configuración:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
¡Casi allí! Por supuesto, debe poner un programa CGI de prueba en el directorio cgi-bin. Aqui hay uno:
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 su servidor lighttpd:
/etc/init.d/lighttpd restart
Pon a prueba tu programa CGI. En el navegador de su escritorio, presione esta URL, sustituyendo la dirección DNS pública de su instancia EC2:
http://<<Public DNS>>/cgi-bin/hellopyworld.py
Para mí, esto fue:
http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py
Paso 5: ¡Eso es! ¡Limpia y da gracias!
Para salir del comando "sudo / bin / bash" dado anteriormente, escriba:
exit
Agradecimientos: Un montón de gracias 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
¡Buena suerte amigos! Me disculpo por la naturaleza no tradicional de esta "pregunta", pero he recibido tanta ayuda de Stackoverflow que estaba ansioso por devolver algo.
fuente
Respuestas:
(Publicación extraña, así que espero que esta no sea una respuesta tan extraña).
Sobre el tema de fallas de seguridad: se considera una mala práctica general almacenar scripts cgi-bin dentro de la raíz del documento del servidor web. Incluso el W3C lo elude en "Son lenguajes compilados como C más seguro ..." en sus Preguntas frecuentes sobre seguridad en la World Wide Web :
Esto no es una amenaza tan importante como la capacidad de escribir un archivo dentro de la raíz del documento. Sin embargo, un atacante podría obtener el código fuente del cgi, idear un ataque dirigido contra él y usarlo como un trampolín en el servidor.
Para mitigar esto, puede agregar las siguientes líneas a lighttpd.conf (o alguna variación en ellas) para dirigir cgi-bin a un directorio separado de la raíz del documento / var / www / lighttpd.
Esto requiere los módulos cgi y alias para lighttpd.
fuente