Archive for the ‘php’ Category

Framework PHP symfony en Debian Lenny

Thursday, July 24th, 2008

Que es Symfony ?

Libro Symfony - La guia definitiva

Symfony es un framework para desarrollo de aplicaciones Web. Tiene una arquitectura MVC (model view controller), ORM (object relational mapper), y un monton de clases predefinidas que nos simplifican la creacion de una aplicacion.
En este articulo les muestro lo facil que se instala en Debian Lenny GNU/Linux, y les dejo el link para que descarguen el libro en forma gratuita.

El libro en su version en castellano lo pueden descargar del siguiente link, en donde ademas encontraran otros libros interesantes:
Libros gratuitos y originales sobre HTML, CSS, JavaScript, AJAX y otras tecnologías web.

La version en ingles:
The Definitive Guide to symfony

Instalacion de symfony en Debian Lenny

Como prerequisitos, debes tener instalado Apache, PHP5 y casi seguro que Mysql tambien.
Aqui supondre que ya tienes instalados y configurados estos programas.

Para una instalacion simple, lo mejor es primero instalar PEAR.

$ sudo aptitude install php-pear

$ dpkg -l *pear*
php-pear      5.2.6-2    PEAR - PHP Extension and Application Repository

El paquete symfony de PEAR contiene las librerias symfony y todas sus dependencias. Tambien contiene un script que extiende la linea de comandos e incluye el comando symfony.
La instalacion a traves del paquete PEAR es la forma de instalacion recomendada en la documentacion.

El primer paso para instalarlo es agregar el canal symfony a PEAR, con este comando:
( notar que lo ejecuto en modo root)

# pear channel-discover pear.symfony-project.com

Ahora estamos listos para instalar symfony, con este comando:

# pear install symfony/symfony

downloading symfony-1.1.0.tgz ...
Starting to download symfony-1.1.0.tgz (2,130,238 bytes)
.......done: 2,130,238 bytes
install ok: channel://pear.symfony-project.com/symfony-1.1.0

Creando un proyecto

Cada proyecto symfony sigue una estrucutra de directorios predefinida. El comando symfony automatiza la creacion de nuevos proyectos al inicializar el esqueleto del proyecto, con la estructura de directorios y permisos correctos. Asi que para crear un proyecto, simplemente hay que crear un directorio y pedirle a symfony que cree el proyecto:

# mkdir ~/myproject
# cd ~/myproject
# symfony generate:project myproject

Creando la aplicacion

El proyecto aun no esta listo para se visto, porque requiere al menos una aplicacion. Para inicializarla, hay que usar el comando generate:app y pasar como parametro el nombre de la aplicacion:

# php symfony generate:app frontend

Eso creara el directorio frontend/ en la carpeta apps/ en la raiz del proyecto, con una configuracion de aplicacion default y un conjunto de directorios listos para hostear los archivos del sitio web.

Bueno, y hasta aqui llegamos. Si quieres ver como configurar Apache para empezar a probar tu nueva aplicacion, o empezar a estudiar como funciona el framework Symfony, existe excelente documentacion. Puedes empezar por descargar el libro :-)

Exploit Ejecucion codigo en forma remota - Remote code execution

Monday, September 11th, 2006

No soy un experto en seguridad ni nada parecido, pero al menos puedo darme cuenta cuando estoy en medio de un ataque o intento de ataque.
Como siempre, me gusta poner ejemplos lo mas reales posibles, ¿ y que mas real que mostrar ataques hacia mi propio servidor ?, je je.

Aqui ire publicando todos los avances que vaya realizando en materia de ir fortificando el servidor, y tambien ire publicando todos los ataques, asi que el que no quiera ser publicado que no me ataque.
Cuanto mas me ataquen, mas material tendré para publicar y para estudiar, je je.

Creo que la mejor manera de parar los ataques es justamente sacandolos a la luz lo mas pronto posible.

Vulnerabilidad en applicaciones Web.

(more…)

Ejecutar script Perl desde páginas PHP

Saturday, September 9th, 2006

Tengo una duda sobre PHP. Tengo que ejecutar desde PHP (con Apache2) un script de Perl. Entonces uso system(”path/file.pl”)
Pero no se ejecuta.
Sera un error de permisos? puede estar mi script en cualquier carpeta del sistema y pertenecer a root?
Help me!

Diego R. Mañas

*************************************************

Hola Diego !!!.
Bueno, aqui hay varias cosas que hay que tener en cuenta, asi que vayamos paso a paso.
Aunque este de acuerdo o no con tu solucion, nos enfocaremos en resolver especificamente tu problema inmediato.
Revisaremos primero una serie de cosas basicas y luego iremos profundizando hasta encontrar la solucion.
Tal vez puedas ser un poco mas especifico sobre en que lugar se encuentra el archivo y que permisos tiene, pero igual voy a tratar de darte unos consejos generales:

1)
¿ que pasa si intentas ejecutar file.pl como
usuario normal desde el prompt?

¿Se ejecuta normalmente?
Si no se ejecuta, lo mas probable es que te hayas olvidado de marcar el script como ejecutable. Eso se hace con la siguiente sentencia:

chmod ug+x path/file.pl

La cual le da permiso de ejecucion al dueño y al grupo.

2)
Cuando Apache ejecuta scripts, no lo hace como usuario root (o no debería por problemas de seguridad)
Por ejemplo, un script en PHP no deberia poder ejecutar un comando como el siguiente: system(”/sbin/halt”)
$ /sbin/halt
halt: must be superuser.

Cuando el proceso de Apache corre, generalmente lo hace como usuario www-data (al menos en Debian).
Entonces, lo que debes verificar es que el usuario www-data tenga permiso de ejecucion sobre ese archivo.

Eso lo puedes lograr cambiando el owner del archivo:

chown www-data:www-data path/file.pl

Si necesitas cambiar todos los archivos del path directamente ejecutas

chwon -R www-data:www-data path

Lo que hace que el dueño y el grupo del archivo sean www-data.
Al ser www-data el dueño del archivo, deberia poder ejecutarlo si es que el archivo tiene permiso de ejecucion.
Un listado del archivo deberia mostrarlo asi:

-rwxr-xr-x 1 www-data www-data

Tambien debes tener en cuenta que el usuario www-data debe tener acceso a toda la cadena del directorio. Tanto al directorio actual como a todos los padres. Por ejemplo de nada te sirve tener los permisos correctos si el archivo se encuentra en un path donde el padre de ese path no puede ser accedido por www-data. toda la cadena del path debe ser accesible.

3)
Puede ser que ahora los permisos esten correctos, pero entonces el script path/file.pl este intentando ejecutar otros comandos que a su vez requieran
permisos de root. Bueno, en este caso la solucion no es tan sencilla porque hay que analizar concienzudamente las posibles implicaciones de seguridad.

4)
Tambien puedes revisar el archivo
/var/log/apache2/error.log
En busca del posible problema, o de por lo menos una idea.

Bueno espero que estos consejos te den una idea de por donde empezar a revisar y espero que cuando encuentres la solucion por favor como agradecimiento la escribas aqui.

Tambien, para ayudarme a resolver tu problema podrias escribir los resultados de las pruebas que te puse mas arriba, y ser un poco mas especifico asi tal vez pueda intentar reproducir el problema en mi computadora.

Bueno, eso es todo por ahora. Si se me ocurre otra cosa te aviso.

Sebastián Emilio Narváez
– Los amigos de GNU/Linux son mis amigos …

##########################################################
El script que quiero ejecutar tiene permisos de ejecución, pero estaba en un directorio del root y su dueño era root. Cambié el dueño a daemon:daemon, que parece ser el mismo del Apache2 en este Slackware. Y lo cambié de directorio, ahora está debajo de apache2/htdocs/
Ahora puedo ejecutar el script desde una página web, pero la página se detiene hasta que el script finaliza su ejecución y devuelve un resultado. Aproveché eso para que muestre una respuesta atractiva en la página, pero mi intención original era sólo que se ejecute y pasar a otra cosa. Incluso puse system(path/file.pl &) pensando que pasaría a 2do plano pero no sucedió así.

Gracias por la ayuda :)

Diego R. Mañas