Buscar este blog

sábado, 25 de enero de 2014

¿Problemas con el cron en Plesk?

Cuando no se ejecuten las tareas programadas en linux, es porque por defecto no tienen acceso a la shell /bin/sh.
Para permitir el acceso ejecuten esta sentencia.
/usr/local/psa/bin/server_pref -u -crontab-secure-shell "/bin/sh"
para quitar el permiso se ejecutar lo siguiente
/usr/local/psa/bin/server_pref -u -crontab-secure-shell ""

miércoles, 22 de enero de 2014

Limpiando la cola de correos en Plesk

Me gustaria explicar como limpiar la cola de correos de qmail, en un servidor que esta corriendo usando Plesk. A continuacion mostrare dos metodos. Los metodos mencionados solo eliminan los correos  de la cola y nada más.
Primero revisaremos los correos en cola usando la herramienta qmail-qstat:
[root@test /]# /var/qmail/bin/qmail-qstat
messages in queue: 22463
messages in queue but not yet preprocessed: 22
Para eliminar los mensajes de la cola SIEMPRE para el servicio primero, para evitar tener que reconfigurar Qmail otra vez.
service qmail stop
Una vez que el servicio esta para ejecuta los siguientes comandos, uno por uno, basado en el numero de carpetas que tengas dentro de queue. Esto puede tomarse su tiempo.
find /var/qmail/queue/mess -type f -exec rm {} \;
find /var/qmail/queue/info -type f -exec rm {} \;
find /var/qmail/queue/local -type f -exec rm {} \;
find /var/qmail/queue/intd -type f -exec rm {} \;
find /var/qmail/queue/todo -type f -exec rm {} \;
find /var/qmail/queue/remote -type f -exec rm {} \;
Finalmente inicia el servicio y asegurate que la cola ha sido eliminada.
service qmail start
Para automatizar el proceso, puedes usar estos dos scripts disponibles, (basicamente estan mejorando las mismas operaciones nombradas anteriormente). Para quellos que reciban un sobrerecargado file truncating, por favor usen el segundo script. Toma un poco mas de tiempo, pero la cola de correos es eliminada.

miércoles, 5 de junio de 2013

Manual Vsftpd in suse 11

INTRODUCCIÓN
INSTALACIÓN
CONFIGURACIÓN BÁSICA
Configuraciones Generales
Configuración para usuarios Locales
Configuración para usuarios Anónimos
Configuración de logs
Configuraciones relacionadas a Transferencias
USUARIOS VIRTUALES
CONEXIONES SEGURAS UTILIZANDO SSL
ENLACES


INTRODUCCIÓN

Este pequeño documento tiene como objetivo indicar los principales pasos para configurar un servicio ftp en openSUSE utilizando el reconocido servidor VSFTPD(Very Secure FTPD). Aclaro que en la mayoría de los casos las configuraciones son realizadas editando directamente los archivos de configuración, para esto pueden utilizar el editor de texto de su preferencia (Yo utilizo el Vim =)).


INSTALACIÓN
Para instalar el paquete del servidor VSFTPD lo hacemos desde “Yast → Software → Instalar/desinstalar Software” donde buscamos el paquete con nombre “vsftpd”, lo seleccionamos, comprobamos las dependencias y lo instalamos.

Todas los demás paquetes que necesitaremos más adelante posiblemente ya han sido instalados por defecto con el sistema operativo (paquetes pam, openssl, openssl-certs, db-utils, etc.) ya que son paquetes fundamentales para otras aplicaciones básicas, no obstante, podemos verificar su instalación desde Yast.

Cuando hayamos culminado con la instalación probamos levantar el servicio abriendo una consola en la cual nos conectamos como root (gabriel@superserver:~> su -) y ejecutamos el siguiente comando:
Código:
superserver:/ # service vsftpd start
si el servicio se levantó correctamente saldrá el siguiente mensaje:
Código:
Starting vsftpd               done
Paramos nuevamente el servicio con el comando service vsftpd stop, accedemos nuevamente al Yast y nos dirigimos a “Sistema → Editores de niveles de ejecución” donde verificamos que en modo experto estén marcadas las opciones 3 y 5 de los niveles de ejecución para el servicio vsftpd, lo que permite que el servicio se inicie automáticamente cada vez que se encienda el equipo. Concluido con estos pasos, continuamos con la configuración del servicio en sí.


CONFIGURACIÓN BÁSICA

El archivo de configuración del servidor VSFTPD se encuentra en el directorio /etc/ y se llama vsftpd.conf, el cual vamos a tener que modificar con cualquier editor de texto que sea de nuestra preferencia. 

Las directivas o comandos que se van a especificar en esta sección son las necesarias para montar un servidor ftp básico que permite la conexión de usuarios locales del sistema operativo como así también de usuarios anónimos.

Obs: Antes de comenzar a modificar un archivo de configuración, nunca hay que olvidarse de hacer una copia de seguridad del mismo, así siempre tendremos a mano una versión original para restaurar la configuración por defecto sin perder mucho tiempo 

Abrimos el archivo conectados como root:
Código:
superserver:/ # vi /etc/vsftpd.conf
A continuación se citarán las principales directivas que deberán estar definidas (descomentadas) en el archivo de configuración seguidos de sus respectivos parámetros, hay muchas otras directivas que se pueden consultar en http://vsftpd.beasts.org/vsftpd_conf.html, toda línea que lleve al principio el carácter almohadilla (#) será interpretado como un simple comentario.

Configuraciones Generales:
Código:
#!/bin/bash
# Ejemplo del archivo de configuración /etc/vsftpd.conf
# General Settings
#
# Permite el modo escritura.
write_enable=YES

# Activa mensajes de directorio.
dirmessage_enable=YES

# Mensaje de bienvenida
ftpd_banner=Bienvenido al servidor ftp de GK - Powered by openSuSE 10.3
Configuración para usuarios Locales:
Código:
# Local FTP user Settings
# 
# Permite que usuarios locales puedan conectarse.
local_enable=YES

# Enjaula a los usuarios locales dentro de su propio directorio personal, 
# esta opción mejora la seguridad.
chroot_local_user=YES

# Permite especificar una lista con los usuarios locales a los cuales no
# se les enjaulará cuando la opción chroot_local_user = YES.
chroot_list_enable=YES

# Especifica la ruta en donde se encuentra la lista, en mi caso he creado una 
# carpeta en el directorio /etc llamada “vsftpd”, en la cual coloqué el archivo 
# de texto (vsftpd.chroot_list) que contiene la lista.
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

# Esta directiva la he dejado comentada, pero puede resultar muy interesante 
# para los casos en que sea necesario limitar la velocidad de transferencia para 
# los usuarios locales, por defecto la velocidad de transferencia es ilimitada.
#local_max_rate=7200
Configuración para usuarios Anónimos:
La configuración que viene más adelante está ideada para que los usuarios que se conectan anónimamente, no puedan subir archivos, sino solamente descargar aquellos compartidos por el administrador del servicio.

Antes de comenzar con la modificación de las directivas de la sección “Anonymus FTP user Settings” del archivo vsftpd.conf, necesitamos crear una carpeta en el sistema de archivos que será utilizada como el directorio raíz para las conexiones anónimas, con la instalación por defecto del servidor vsftpd en openSUSE 10.3, el directorio para usuarios anónimos se encuentra por defecto en /srv/ftp/, este directorio es el HOME del usuario de sistema “ftp” dueño del servicio (Ver Yast → Seguridad y Usuarios → Gestión de Usuarios → Definir Filtro: Usuarios del Sistema → Usuario FTP → Ver Detalles). Previendo la posterior utilización de dicho directorio para albergar a los usuarios virtuales, coloqué una nueva carpeta en dicho directorio llamada anónimo (/srv/ftp/anonimo) :
Código:
superserver: # cd /srv/ftp
superserver:/srv/ftp # mkdir anonimo
asignándole el dueño:grupo y los permisos de forma idéntica a la carpeta “ftp” que se encuentra en /srv, esto lo comento porque cuando coloqué otros permisos a la carpeta “anonimo”, las conexiones anónimas no funcionaron correctamente. 
Código:
superserver:/srv/ftp # chmod 755 anonimo/
superserver:/srv/ftp # chown root:root anonimo/
Esta carpeta (/srv/ftp/anónimo) será la que contendrá los archivos compartidos para los usuarios conectados como anónimos.

Continuación de la configuración del archivo vsftpd en la sección “Anonymus FTP user Settings”:
Código:
# Anonymus FTP user Settings
#
# Permitir conexiones anónimas.
anonymous_enable=YES

# Directorio raíz para los usuarios anónimos. Carpeta creada en /srv/ftp/ como
# se comentó anteriormente.
anon_root=anonimo

# Solo permite descargar a los usuarios anónimos aquellos archivos que tengan 
# permisos de lectura.
anon_world_readable_only=YES

# Para mi caso especifiqué con la siguiente directiva que los usuarios anónimos 
# no tengan permisos para subir archivos al servidor.
anon_upload_enable=NO

# Esta directiva permite a los usuarios anónimos a crear carpetas en ciertos
# casos.
anon_mkdir_write_enable=NO

# Directiva que permite establecer el límite de la velocidad máxima de 
# transferencia de datos para los usuarios anónimos. Fui un poco drástico jeje
# (2kb/s)
anon_max_rate=2048
Configuración de logs:
Código:
# Log Settings
#
# Activa la generación de registros logs por cada uploads/downloads.
xferlog_enable=YES

# Define cual será el archivo log.
vsftpd_log_file=/var/log/vsftpd.log

# Si esta directiva no se encuentra comentada activa el registro (log) de todas 
# las peticiones/respuestas del servidor.
log_ftp_protocol=YES
Configuraciones relacionadas a Transferencias:
Código:
# Transfer Settings
#
# (ftp-data).
connect_from_port_20=YES

# Tiempo de espera para mantener establecidas conexiones inactivas.
idle_session_timeout=600

# Tiempo de espera para mantener establecidas conexiones de datos inactivas.
data_connection_timeout=120

# Comando que permite activar/desactivar conexiones pasivas.
pasv_enable=YES

# PAM setting. Suele estar configurado por defecto.
pam_service_name=vsftpd

# Configura listen=YES para que vsftpd corra en modo standalone.
listen=YES

# Máximos clientes simultáneos conectados. Ejemplo:
max_clients=5

# Máximas conexiones simultáneas por IP. Ejemplo:
max_per_ip=3

# Como tenemos activado el uso de conexiones pasivas especificamos el rango de
# puertos que serán utilizados por este método de conexión.
pasv_min_port=40000
pasv_max_port=40020
Bueno, hasta este punto ya tenemos configurado un servidor ftp básico que acepta conexiones de usuarios locales que pueden realizar downloads & uploads así como también acepta conexiones de usuarios anónimos que solamente tienen autorización para realizar descargas. Para poner nuevamente en marcha el servicio guardamos y salimos del archivo de configuración y ejecutamos el comando:
Código:
superserver:/ # service vsftpd start
y si todo salió según lo planeado deberá aparecer una línea que indique que el servicio se inició correctamente:
Código:
Starting vsftpd              done
No hay que olvidarse de autorizar los puertos correspondientes al servicio vsftpd y del rango de puertos destinados a las conexiones pasivas en el Firewall de openSUSE en el caso de que el mismo se encuentre activo.


Servicio vsftpd autorizado en el firewall.


Rangos de puertos para conexiones pasivas autorizados en la ventana 
de Opciones Avanzadas.


USUARIOS VIRTUALES

Vamos a incorporar un punto más a favor de la seguridad evitando usar los usuarios locales para conectarnos al servidor ftp, para ello vamos a implementar el método de autenticación combinando PAM y bases de datos db (Berkeley Database) que son muy simples de manipular, para ello necesitamos tener instalados los paquetes db-utils y pam, que ya suelen estar instalados por defecto.

Para generar la tabla que contendrá los usuarios virtuales y sus respectivas contraseñas primeramente debemos crear un archivo de texto plano donde cargaremos esos datos, para ello nos dirigimos al directorio /etc/vsftpd que creamos anteriormente, ahí adentro creamos un nuevo archivo llamado por ejemplo “logins.txt
Código:
superserver:/etc/vsftpd # touch logins.txt
le establecemos permisos de lectura y escritura solo para el usuario root con el comando:
Código:
superserver:/etc/vsftpd # chmod 600 logins.txt
y le agregamos un contenido similar a:
Código:
user_gabriel
pass_gabriel
user_jorge
pass_jorge
donde la primera línea corresponde al login del usuario virtual gabriel y la segunda a la contraseña del mismo, ya en la tercera línea se agrega otro nuevo login, en este caso jorge y que sigue el mismo procedimiento que las 2 primeras líneas (Arriba login y abajo la contraseña). Una vez que hayamos ingresado todos los usuarios virtuales que deseamos, preparamos un script que ejecutará una serie de comandos para generar la tabla db que es interpretable por el módulo pam.

Para el script creamos otro nuevo archivo también en el directorio /etc/vsftpd/ llamado “generar_db.sh” y le agregamos el siguiente texto:

Código:
#!/bin/bash
# PRIMERAMENTE SE BORRA EL ARCHIVO "vsftpd_login.db" si es que ya existe.
rm -f vsftpd_login.db

# Genera el archivo "db" que contiene los usuarios virtuales
# del servicio vsftpd.
db_load -T -t hash -f logins.txt vsftpd_login.db

# Se asignan permisos de seguridad solo para root.
chmod 600 vsftpd_login.db
le asignamos el permiso de ejecución al archivo “generar_db.sh”:
Código:
superserver:/etc/vsftpd # chmod 700 generar_db.sh
y luego ejecutamos el script:
Código:
superserver:/etc/vsftpd # ./generar_db.sh
Con esto creamos el archivo “vsftpd_login.db” en el directorio /etc/vsftpd/, listo para ser utilizado. 

El siguiente paso consiste en modificar el archivo de configuración PAM del servicio vsftpd, este archivo lo podemos encontrar en el directorio /etc/pam.d/ y debería llevar el mismo nombre especificado en la directiva “pam_service_name”, en este caso “vsftpd”.

Antes de editar el archivo, hacemos una copia de seguridad del mismo y nos aseguramos que el servicio ftp no esté corriendo, verificado esto, editamos el archivo comentando todas sus líneas anteponiendo el carácter #, y le agregamos las siguientes líneas:

Código:
# Para usuarios virtuales. OBS: En caso de que se utilice un OS con arquitectura 
# 64 bits (x86_64), la ruta correcta para el archivo “pam_userdb.so” es 
# “/lib64/security/pam_userdb.so”.
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
Estas líneas permiten que los usuarios que se conecten al servicio ftp sean validados contra los registros que contiene la tabla vsftpd_login.db que hemos creado.

Como de ahora en más ya no se podrá acceder con los usuarios locales, se tiene que especificar al servidor vsftpd que un usuario local se encargará de gestionar todos los usuarios virtuales que se conecten, también aprovecharemos para agregar el directorio de donde el servidor vsftpd tendrá que buscar la configuración personal de cada usuario virtual, para lo que nuevamente editamos el archivo de configuración /etc/vsftpd.conf y agregamos las siguientes líneas al final del archivo:

Código:
# Usuarios Virtuales
#
# Activamos el uso de usuarios virtuales. 
guest_enable=YES

# Esta directiva permite especificar el usuario que se encargará de manejar los 
# usuarios Virtuales, por defecto si no se especifica esta línea en openSUSE es 
# “ftp” que como ya sabemos tiene su home en /srv/ftp/, pero puede ser cualquier 
# otro usuario si lo deseamos.
guest_username=ftp

# Especificamos el directorio de donde el servicio obtendrá la configuración 
# personal de cada usuario virtual que agregamos a la tabla “vsftpd_login.db”.
user_config_dir=/etc/vsftpd/config_por_usuario
Guardamos los cambios del archivo vsftpd.conf y creamos el directorio indicado en la directiva “user_config_dir” dentro de la carpeta /etc/vsftpd/:
Código:
superserver:/etc/vsftpd # mkdir config_por_usuario
En su interior creamos por cada usuario virtual que agregamos a la tabla “vsftpd_login.db” un archivo de texto plano con el mismo nombre del login del usuario.
Código:
superserver:/etc/vsftpd/config_por_usuario # touch gabriel jorge
Por ejemplo editamos el archivo “gabriel” recientemente creado y le agregamos las siguientes líneas:

Código:
#!/bin/bash
# Indicamos cual será el directorio personal del usuario gabriel
local_root=/srv/ftp/gabriel
# Le damos permisos de escritura para su directorio personal.
write_enable=YES
# Con virtual_use_local_privs igualado a YES, supone indicar que los usuarios 
# virtuales tendrán los mismos privilegios que los usuarios locales.
virtual_use_local_privs=YES
Lo mismo podemos agregar al archivo “jorge”, obviamente indicando otro directorio personal. Ahora solo nos resta crear los directorios personales para ambos usuarios virtuales (gabriel y jorge) en el directorio /srv/ftp/, cambiarlos de dueño y asignar los permisos correspondientes:

Código:
superserver: # cd /srv/ftp
superserver:/srv/ftp # mkdir gabriel jorge
superserver:/srv/ftp # chown -R ftp:ftp gabriel
superserver:/srv/ftp # chown -R ftp:ftp jorge
superserver:/srv/ftp # chmod -R 744 gabriel
superserver:/srv/ftp # chmod -R 744 jorge
El siguiente paso es activar nuevamente el servicio (service vsftpd start) para comprobar su funcionamiento con los usuarios virtuales que hemos agregado, además las conexiones anónimas deberán seguir funcionando, solamente los usuarios locales ya no podrán conectarse al servidor.


CONEXIONES SEGURAS UTILIZANDO SSL

Como el protocolo ftp no encripta la información que fluye entre la aplicación cliente y el servidor, los datos como ser contraseñas, logins, etc. pueden ser obtenidos con mucha facilidad por personas con malas intenciones o simplemente curiosos mediante el escaneado de paquetes que circulan a través de la red. Para evitar estos casos, se puede activar la encriptación de paquetes utilizado ssl para tener un servicio ftp seguro (ftps).

El primer paso consiste en generar un Certificado SSL, para ello necesitamos tener instalados los paquetes openssl y openssl-certs. Nos dirigimos al directorio /etc/ssl/certs y ahí ejecutamos el siguiente comando:

Código:
superserver:/etc/ssl/certs# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem
Para preparar el certificado, el comando openssl nos solicitará que ingresemos varios datos como ser país, provincia, ciudad, empresa, nombre, email, etc., esta información luego aparecerá en el certificado que cualquier usuario deberá aceptar para hacer uso del protocolo seguro. Cuando finalice tendremos el certificado concluido con el nombre vsftpd.pem.

Para el siguiente paso paramos el service ftp en el caso de que lo tengamos corriendo (service vsftpd stop) y editamos el archivo de configuración vsftpd.conf, nos dirigimos hasta el final donde agregaremos las siguientes líneas

Código:
# Secure FTP
# 
# Activamos el soporte SSL
ssl_enable=YES

# No se obliga el establecimiento de conexiones encriptadas mediante SSL para 
# usuarios locales.
force_local_logins_ssl=NO

# No se obliga a que las transferencias de datos locales sean encriptados con 
# SSL.
force_local_data_ssl=NO

# Se habilitan los soportes para las diversas versiones de SSL
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

# Se especifica la ubicación del Certificado Generado.
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
Por ultimo iniciamos nuevamente el servicio vsftpd (service vsftpd start) y probamos establecer conexiones seguras utilizando clientes que soportan esta funcionalidad como ser los clientes FilleZilla, gfTP, etc.


ENLACES

Sitio Web de Vsftpd: http://vsftpd.beasts.org/
Completa Lista de Directivas para el archivo vsftpd.confhttp://vsftpd.beasts.org/vsftpd_conf.html

sábado, 8 de diciembre de 2012

Make PHP 5.3.6

Hola buenas, se que es de madrugada pero no queria compartir la experiencia que tengo ahorita en linux, al tratar de generar mi propio compilado de php 5.3.6, resulta que tenemos plesk panel instalado y corriendo php 5.2, el cual fue un downgrade que hizo un amigo mio para poder correr zend optimizer, el cual es requerido por unas sitios web que tenemos alojados alli; regresando al asunto, encontre un articulo donde podia montar varias versiones de php para un determinado cliente como es este caso donde me toca trabajar con moodle en un dominio, y sin embargo la version 2.3 de moodle requiere si o si php 5.3 por cuestiones importantes ya que esta version soporta llamada dinamica a funciones de clases estaticas, mientras que versiones anteriores no soportan esta caracteristicas, entonces ahora me encuentro compilando mi version de php 5.3 que voy a usar para este nuevo dominio con plesk panel. A continuacion escribire la liste de comandos que usé, mas algunas enlaces de referencias que me fueron de mucha ayuda para resolver este reto. Saludos. Seguire actualizando este post :)


Two PHP versions linux Plesk HOWTO

Few days ago i was exchanging emails with Parallels support. I was asking them to help me to setup two php versions on linux plesk server. After few emails they answeared me that it is not possible. It didn't help when i told them that i was using fastcgi on my own hosting server and that i was having 3 php versions configurable per customer. Nop... Their answear was 
Quote:
As of now there is no option available in the linux, where you can choose php as per the customers.
Hope you are clear now. If you have any further help, feel free to get back to us. We would be glad to assist you further.
And, there i was, left helpless, without possibility to finish migration from my old hosting server to our new and shiny Plesk. I needed newer php version because php provided by my linux distro is 5.1.
So, i logged in to Plesk server and spend around 20 minutes planning how to intercept Plesk calls. And it is done.
For this to work you have to have php running as fastcgi (it is most secure way, so i assume that everyone is running php as fastcgi)
Here it goes:

1. ssh to your plesk server, download php source, unpack it and configure it
Code:
ssh yourserver -l root cd /usr/local/src mkdir php540 cd php540 wget http://www.php.net/get/php-5.4.0.tar.gz/from/at2.php.net/mirror tar xzvf php-5.4.0.tar.gz cd php-5.4.0
NOTICE: you HAVE TO USE PREFIX switch in order to have your new php installed inside one directory, for example:

Code:
./configure '--with-libdir=lib64' '--cache-file=../config.cache' '--prefix=/usr/local/php536-cgi' '--with-config-file-path=/usr/local/php536-cgi/etc' '--disable-debug' '--with-pic' '--disable-rpath' '--with-bz2' '--with-curl' '--with-freetype-dir=/usr/local/php536-cgi' '--with-png-dir=/usr/local/php536-cgi' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr/local/php536-cgi' '--with-openssl' '--with-pspell' '--with-pcre-regex' '--with-zlib' '--enable-exif' '--enable-ftp' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-wddx' '--with-kerberos' '--with-unixODBC=/usr' '--enable-shmop' '--enable-calendar' '--without-sqlite3' '--with-libxml-dir=/usr/local/php536-cgi' '--enable-pcntl' '--with-imap' '--with-imap-ssl' '--enable-mbstring' '--enable-mbregex' '--with-gd' '--enable-bcmath' '--with-xmlrpc' '--with-ldap' '--with-ldap-sasl' '--with-mysql=/usr' '--with-mysqli' '--with-snmp' '--enable-soap' '--with-xsl' '--enable-xmlreader' '--enable-xmlwriter' '--enable-pdo' '--with-pdo-mysql' '--with-pdo-pgsql' '--with-pear=/usr/local/php536-cgi/pear' '--with-mcrypt' '--enable-intl' '--without-pdo-sqlite' '--with-config-file-scan-dir=/usr/local/php536-cgi/php.d' '--enable-zip'
As you can see, my prefix was /usr/local/php536-cgi/
Choosing a prefix is a MUST because that way your new php installation will not interfere with older php used by plesk.

2. compile your php
Code:
make
3. install your new php
Code:
make install
4. create php wrapper
for example, let's say that you have a customer blabla.com that uses some newer php functions that don't exist in php 5.1. Let's call that customer blabla.com. For him we will tell apache to use our new php (5.4.0)
Code:
cd /var/www/vhosts/blabla.com/cgi-bin mkdir .cgi_wrapper cd .cgi_wrapper
now we will create new file and name it .phpwrapper
Code:
vi .phpwrapper
file content:
Code:
#!/bin/sh export PHPRC=/var/www/vhosts/blabla.com/etc/ export PHP_FCGI_CHILDREN=4 export PHP_FCGI_MAX_REQUESTS=1000 exec /usr/local/php540-cgi/bin/php-cgi
let's strengthen our new files and dirs permissions and privileges:
Code:

cd /var/www/vhosts/blabla.com/cgi-bin chmod 101 .cgi_wrapper chmod 500 .cgi_wrapper/.phpwrapper chown blabla.com:psacln .cgi_wrapper -R chattr -R +i .cgi_wrapper

5. make apache aware of our wrapper
plesk offers a functionality of changing httpd setup per host. we will use that functionality to tell apache that for blabla.com it needs to use our new wrapper, instead of one provided by plesk:
Code:
cd /var/www/vhosts/blabla.com/conf
we will create file named vhost.conf
Code:
vi vhost.conf
file content:
Code:
RemoveHandler fcgid-script AddHandler fcgid-script .php SetHandler fcgid-script FCGIWrapper /var/www/vhosts/blabla.com/cgi-bin/.cgi_wrapper/.phpwrapper .php Options +ExecCGI allow from all
So, we have told apache not to use plesk php wrapper (RemoveHandler fcgid-script) and instead of that we have created a new handler for php files. When executing php files on blabla.com domain apache will call our wrapper and use new php that we installed

6. we need to reconfigure blabla.com domain
Code:
/usr/local/psa/admin/sbin/httpdmng --reconfigure-domain blabla.com
7. and restart apache
Code:
/etc/init.d/httpd restart
That's it. For every domain that needs some extra functions provided only in php versions newer than one provided with your plesk distro you can do steps 4,5,6 and 7 (replace blabla.com with your customer domain name) and that's all.

Adicional: A veces podemos necesitar instalar este paquete yum-install libtool-ltdl-devel

lunes, 16 de julio de 2012

Cloud Computing de Amazon

Buenos dias que tal espero que bien, escribo para comentarles mis primeras experiencias con cloud computing bueno mis primeras experiencias con el servicio que ofrece amazon porque cloud computing ya lo vengo viendo como hace un par de años. La impresion que tengo es relativamente buena. Estoy usando Cloudfront y S3, la verdad es que tenia curiosodad desde hace meses sobre como usar estos servicios y aca estoy ya realizando mis primeros test con php usando unas librerias de ejemplo que abstraen toda la configuracion y me hacen facil la implementacion, espero de aca a  unos dias poder entenderlo al 100% y liberar una propia version para usar en mi proyecto de aplicaciones sociales, lo cual de ahi parti para avriguar ya que intento alojar todas la imagenes en el servicio en la nube de amazon ademas de los archivos estaticos como css y js, bueno espero seguir investigando en este punto y compartir recursos para aquella personas que tambien esten usando los sevicios en la nube de amazon. Hasta el siguiente post!

martes, 12 de junio de 2012

unable to connect to tcp://gdata.youtube.com:80

Hola, en este nuevo post quisiera contarles el problema que tuve con la conexion a la api de google (youtube), tengo una plataforma que usa la api oficial de youtube proveida por Zend, bueno el caso es que en si no solo era el problema con la api de Youtube sino tambien con la api de facebook lo cual me parecio bastante sospechoso, es mas solo me habia dado cuenta de la lentitud con la que se hacian mis peticiones a la api de facebook, entonces decidi hacerle seguimiento. Parece que en facebook solo llegaba al timeout pero luego trataba una forma alternativa y lograba conectarse, supongo que seguro de los varios metodos que hay para comunicarse con un servidor remoto. Empeze primero haciendo file_get_contents para asegurarme de que podia solicitar informacion  ya sea por json o xml o alguna otra salida, y asi fue no tuve ningun problema, para mi ejemplo use file_ge_contents hacia un servidor que me daba la hora y todo fue bien, luego probe con fsockopen y entoncs probe con el siguiente dominio gdata.google.com y entonces me salio un timeout, proble lo mismo en otro servidor dedicado que administro y todo fue bien, luego probe con el ip ya que tambien es una opcion valida y que me recomendaron cuando investigue en la web, y estaban en lo cierto con el ip todo corrio sin ningun problema, entonces dije si esto esta pasando con gdata.youtube.com entonces puede ser lo mismo para facebook porque me preocupo bastante que una peticion sencilla a facebook api que normalmente toma 1/5 de segundo lo estaba haciendo en 4 o 5 segundos, entonces me decidi a probar cambiando los nombres de dominios por las ips, como bien saben en la api de facebook se manejan 5 o 6 dominios no recuerdo entoncs modifique mi archivo /etc/hosts y le indique mis dominio con sus respectivos ips, incluyendo los de gdata.youtube.com y facebook. Probe y todo regreso a la normalidad, cargue mis videos de youtube y recupere el tiempo de carga de 1/5 con la api de facebook, entonces la conclusion a la que llego es que algo esta fallando con la traduccion de los dominios de facebook y youtube, pero que extraño que solo sea para estos dominios ya que probe con otros y no tuve ningun problema, la otra opcion que tuve fue revisar el archivo /etc/resolv.conf para ver si algo habia cambiado pero estaba todo normal, la otra opcion pueden que haya pasado algo en el firewall del datacenter donde esta el servidor dedicado y hayan denegado la traduccion de los dominios de facebook o youtube, pero al fin seguire haciendole seguimiento a este problema ya que no es recomendable tener las ips estaticas en hosts, ah me olvidaba tambien revise mis interfaces de red que por cierto habian cambiado a mascara 255.255.255.255, pero las regrese a 255.255.255.0 sin embargo el problema persisitio, igual se tenia que corregir, la otra opcion puede ser porque a partir del 6 de junio se empezo a usar el nuevo estandar ipv6, aunque no creo que haya sido el motivo. Bueno seguire investigando y cualquier cosa actualizare este post, espero les haya sido util esta informacion. Hasta el siguiente post =]

jueves, 10 de mayo de 2012

Problemas Con Cookies en Diferentes Archivos PHP

Que tal ya llevaba tiempo si escribir una entrada, bueno esta vez tengo la oportunidad de publicar para resolver un problema que tuve hace un par de dias en una aplicacion web que llevo desarrollando.
El escenario era este tenia mi pagina php multidioma pero necesitaba guardar una cookie del idioma que escogiera de un popup y recargar la pagina entonces cuano yo hacia click en el idioma llamaba a una funcion javascript y esta a su vez enviaba por post a un archivo que me creaba una cookie con el iso del idioma, PERO cuando la llamaba de mi pagina php era como si nunca se hubiese creado la cookie, bueno les escrbo un poco de codigo para ser mas claro:
setcookie("language_pre",$_REQUEST["prefix"],time()+86400);
con el codigo de arriba seteaba mi cookie y ciando la llamaba desde mi otro archivo php era como si no la hubiese ajustado. El DETALLE era que al final de la funcion setcookie() tenia que especificar la ruta "/" asi a mi cookie la volvia accesible desde cualquier lado de mi servidor. O sea el codigo correcto era 

setcookie("language_pre",$_REQUEST["prefix"],time()+86400,"/");

Espero les haya servido, con esto logre convertir mi aplicacion multiidioma! Saludos.