WEBMAIL

Forums: 

Hola Amigos

Estoy instalando un server con Centos 4.4 y quiero instalar el webmail, la pregunta es la siguiente que me sugieren que utilice horde o squirremail, cual de los dos es mejor en seguridad y es facil de usar.

Saludos

c-client.a

Que tal hacking, mira si me di cuenta de lo que me indicas y lo puse /home/src/imap-2004g \, pero me sigue el mismo error, estaba revisando y encontre que hay un enlace que esta roto libc-client.a > c-client.a en la ruta /home/src/imap-2004g/c-client/, y no se de donde como realizar nuevamente e enlace de este archivo.

Saludos

Re: c-client.a

El enlace lo puedes hacer con el comando ln, como te indique en un post anterior.
Si te parece complicado lo que puedes hacer es ingresar a la carpeta lib (que es
en realidad un enlace) y ejecutar

# cp c-client.a libc-client.a

Con eso tambien deberia funcionar

Saludos,

Listo PHP

Que tal hacking, ya se arregló era un problema con la liclreria c-client, tuve que eliminar la carpeta imap-2004g y descomprimirla de nuevo y ejecutar nuevamente el make lrh, ya se arregló y terminé de compilar-instalar php, que mas hago.

Saludos

Re: Ayudame - Paso 6.1

Paso 6.1 Postconfiguracion MySQL

De acuerdo a nuestra configuracion MySQL se encuentra instalado en el directorio
/usr/local/mysql.

Antes de subir o ejecutar el servicio MySQL vamos a realizar unos cambios de manera
que nuestro sistema de base de datos tenga un nivel mas de seguridad.
Para proceder nos cambiamos al directorio donde reside MySQL
# cd /usr/local/mysql

Si ejecutamos un comando dir o ls podemos observar una carpeta var (en otras versiones
de MySQL ,windows, o dependiendo de la configuracion puede ser la capeta data), dentro
de la cual inicialmente existen dos carpetas: mysql y test.
Estas carpetas contienen los archivos de formato, indice y datos de cada una de las tablas
definidas para cualquier base de datos que hayamos creado, en este caso los archivos corresponden
a las bases de datos mysql y test.

De estas dos bases de datos (directorios) la mas importante y hasta critica es mysql, pues contiene
la definicion de los niveles de acceso (seguridad) de los diferentes usuarios (no confundir con los
usuarios del sistema operativo) que vayamos a definir.
Inicialmente la base de datos mysql tiene una configuracion muy insegura pues permite el acceso del
usuario root sin clave. Vamos a aprovechar esta "flexibilidad" para usar
en caso de que olvidemos la clave del usuario root, esta configuracion inicial y poder recuperar el
acceso al servidor MySQL como usuario privilegiado root, para eso guardamos una copia de la carpeta root
# cp -R ./var/mysql /root/configs

Ahora vamos a ingresar para administrar como usuario privilegiado root, esto debemos hacerlo como usuario
root del sistema operativo (al momento puede ser confuso, pero esto se aclara enseguida). Ingresamos
# ./bin/mysql -p o si hemos ingresado a nuestra caja linux como otro usuario diferente a root hacemos
# ./bin/mysql -u root -p

Inicialmente el usuario root no tiene password, por lo que al pedido de ingresar un password solo presionamos
la tecla enter.
El sistema MySQL nos presenta un mensaje de bienvenida, muestra la version que estamos usando y nos indica
como obtener ayuda. Inmediatamente nos presenta un "prompt" con el texto mysql> para indicarnos que esta listo
para recibir comandos.

myslq> use mysql; (seleccionamos base datos mysql cada comando debe finalizar con un ;)

Primero vamos a definir los usuarios y privilegios, inicialmente tenemos en la tabla user lo siguiente


mysql> select * from user;

+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| localhost | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 |
| nombre_host.com | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 |
| nombre_host.com | | | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 |
| localhost | | | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
4 rows in set (0.01 sec)


Podemos observar que en los cuatro registros existentes ninguno tiene una clave asignada. Tambien que
se permite el acceso sin usuario ni clave a cualquier usuario que tenga una cuenta en nuestro servidor,
esto representa una brecha de seguridad. En nuestro caso puntual de utilizar MySQL para almacenar la
informacion de los usuarios de Webmail solo es necesario tener un usuario que sirva de intermediario
entre la aplicacion web y la base de datos MySQL y por obvias razones ese usuario no sera el root.
El usuario root lo utilizaremos solo para tareas de administracion desde el equipo local.


mysql> delete from user where User=''; (Borramos todo registro que no tenga un nombre de usuario)
mysql> delete from user where Host='nombre_host.com'; (Borramos registro que permite acceso via ip del servidor)

Veamos como nos esta quedando nuestra tabla de acceso para usuario

mysql> select * from user;

+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| localhost | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
1 row in set (0.01 sec)

Procedemos a crear un password para el usuario root y para incrementar el nivel de seguridad del password lo
encriptamos con la funcion password.


mysql> update user set Password=password('poner_aqui_clave_root');

Veamos el resultado


mysql> select * from user;
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| localhost | root | *AD1DFA37D3A3461E1793AEAEF804B1B7B8250AF9 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
1 row in set (0.01 sec)

Para evitarnos los problemas de tener que tener que usar nuestro respaldo inicial de la base de datos
mysql en la que el usuario root no tiene password es una buena practica escribir en un cuaderno o documento
la clave de root.
Si estamos de acuerdo en que el usuario root solo se usara para tareas de administracion, la pregunta es como
accesamos a la informacion guardada en la base de datos tanto para Horde como para otras aplicaciones web?
La respuesta es utilizar una cuenta de usuario con los permisos minimos necesarios. Vamos a crear el usuario
webapp, aqui es importante aclarar que este usuario no es una cuenta del sistema operativo y su ambito de accion
es MySQL.


mysql> insert into user (Host,User,Password) values ('localhost','webapp',password('clave_usuario_webapp'));

Veamos el resultado


mysql> select * from user;
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| localhost | root | *AD1DFA37D3A3461E1793AEAEF804B1B7B8250AF9 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 |
| localhost | webapp | *EC9FF80F106A93A44A1C3700F8CEE190E99E9357 | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 |
+--------------------+------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
1 row in set (0.01 sec)

Lo primero que salta a la vista es que el usuario webapp fue creado sin privilegios, privilegios negados (N), para
ejecutar cualquier tipo de accion en MySQL (Select, Insert, Update, etc.) Como va entonces a manipular informacion?
Para hacerlo vamos a usar otra tabla que se encarga de indicarle a MySQL, que acciones y sobre que bases de datos un
usuario puede actuar. Es la tabla db, veamos que valores contiene inicialmente.


mysql> select * from db;
+------+---------+------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv |
+------+---------+------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
| % | test | | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y |
| % | test\_% | | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y |
+------+---------+------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
2 rows in set (0.00 sec)

Otra configuracion insegura que podria representar riesgo para la integridad de MySQL, lo que indica es que
desde cualquier servidor (red local o internet si el equipo esta expuesto a internet) cualquier usuario puede
accesar con casi todos los privilegios a la base de datos test. A pesar de que la base de datos test no tiene informacion
alguna es mejor eliminarla, pues con un poco de trabajo podriamos ser el host sin costo del servicio de bases de datos
MySQL a cualquier usuario de Internet.


mysql> delete from db;
mysql> drop database test; (para eliminar la base de datos test)

Nuestra tabla db se encuentra vacia y ahora procedemos a indicarle que puede hacer cada usuario y sobre que base de datos.


mysql> insert into db (Host,Db,User) values('localhost','mi_base_datos','webapp');

Veamos como quedo


mysql> select * from db;
+-----------+---------------+--------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv |
+-----------+---------------+--------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
| localhost | mi_base_datos | webapp | N | N | N | N | N | N | N | N | N | N | N | N |
+-----------+---------------+--------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
1 row in set (0.00 sec)

El usuario webapp tiene acceso local unicamente, pero no puedo todavia hacer ninguna accion.

mysql> update db set Select_priv ='Y' where User='webapp' and Db='mi_base_datos';

mysql> select * from db;
+-----------+---------------+--------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv |
+-----------+---------------+--------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
| localhost | mi_base_datos | webapp | Y | N | N | N | N | N | N | N | N | N | N | N |
+-----------+---------------+--------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+
1 row in set (0.00 sec)

Vemos que el usuario webapp ya puede hacer consultas (Select), para permitir los demas privilegios podemos ejecutar
update modificando el nombre de cada privilegio que deseamos cambiar y el valor de N a Y.

Resumiendo hemos eliminado a MySQL para usuarios anonimos (sin cuenta ni clave) y ya sabemos como crear usuarios,
y como definir que acciones pueden ejecutar y sobre que tablas.
Los cambios que hemos realizado se reflejaran una vez hayamos reiniciado MySQL, puesto que MySQL mira la configuracion
para los niveles de acceso de la base de datos mysql unicamente al iniciarse. Sin embargo podemos hacer que esta informacion
se actualize mientras MySQL esta en ejecucion sin reiniciarlo, con la siguiente orden


mysql> flush privileges;

mysql> quit; (para salir al prompt de linux)

Estamos listos para subir el servicio MySQL, dentro de la carpeta bin existe un script que permite hacerlo tiene
el nombre mysqld_safe, pero no lo usaremos. Vamos a utilizar un script que permite el inicio automatico de MySQL
cada vez que se reinicia nuestro equipo de manera que no tengamos que hacerlo manualmente, este se encuentra en
la carpeta support-files en el directorio que contiene el codigo fuente utilizado para instalar MySQL. Lo vamos
a mover a /etc/rc.d/init.d/

# cp /home/src/mysql-4.1.22/support-files/mysql.server /etc/rc.d/init.d/mysqld

Vamos a cambiarnos a la carpeta /etc/rc.d/init.d y editar el archivo mysqld con nano

# cd /etc/rc.d/init.d ; nano mysqld

Vamos a localizar la siguiente linea

$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &

Modificamos de manera que quede asi

$bindir/mysqld_safe --user=mysql --datadir=$datadir --pid-file=$pid_file --bind-address=127.0.0.1 >/dev/null 2>&1 &

Este cambio indica al script que ejecute el servicio MySQL bajo el usuario mysql, y ademas escuche conexiones
en la interface local 127.0.0.1, es decir MySQL no tendra acceso desde internet.

Guardamos el cambio y salimos de nano.

Luego cambiamos permisos de ejecucion al archivo
# chmod 700 mysqld

Configuramos para que mysqld se ejecute siempre que se inicia o reinicia linux, Centos en nuestro caso.

# chkconfig --add mysqld

Para estar seguros que la configuracion fue exitosa podemos ejecutar y deberemos tener como respuesta
una linea similar a esta

# chkconfig --list|grep mysql
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Los numeros indicas los niveles de inicio de linux, que corresponde a la siguiente tabla
# 0 - halt (apagado)
# 1 - Single user mode (monousuario)
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode (multiusuario es el que normalmente debemos usar)
# 4 - unused
# 5 - X11 (modo grafico, no recomendable para sitios en produccion)
# 6 - reboot (reinicio)

En cristiano, quiere decir que MySQL se iniciara cuando entremos en modo multiusuario con y
sin servicio de red, y en el modo grafico no recomendado. Y no lo hara en modo monousuario o
cuando lo mandemos reiniciar o apagar.

Para ver los comando que podemos pasar para iniciar-detener-bajar MySQL ejecutamos

# service mysqld

Veremos una linea
Usage: /etc/init.d/mysqld start|stop|restart|reload

Iniciamos MySQL

# service mysqld start

Deberiamos ver una linea
Starting MySQL [ OK ]

Para verificar que se esta ejecutando en la interface local usamos, con el resultado indicado

# netstat -at|grep mysql
tcp 0 0 localhost:mysql *:* LISTEN

Hasta aqui la postconfiguracion de MySQL, cuando estes listos continuamos con la postconfiguacion
de Apache.

Que tal Hacking

Hola hacking, buen inicio de semana, te comento que el fin de semana estuve realizando todos los pasos de nuevo, ya que no estaba seguro y lo volvì a instalar, ahora que ya estoy hasta el paso 6.1, podemos seguir con la instalaciòn.

Gracias

Saludos

Re: Ayudame - Paso 6.2

Paso 6.2 Postconfiguracion Apache

Vamos a ubicarnos en la carpeta donde instalamos Apache, de acuerdo a nuestro script (cfg.apache)
# cd /opt/apache

Si lo instalaste en otra carpeta, la mas comun suele ser /usr/local/apache
# cd /usr/local/apache

Abrimos el archivo httpd.conf, que contiene la configuracion para nuestro servidor web Apache.

# nano ./conf/httpd.conf

Primero verificamos algunas configuraciones de Apache, la configuracion servira tanto si se
esta alojando un sitio o varios sitios virtuales con una o varias ips (con pocas modificaciones).
Lo primero es modificar ciertas configuraciones de inicio pues pueden ser algo inseguras.

Modificamos DocumentRoot, que originalmente apunta a un subdirectorio dentro de la carpeta que
contiene todos los archivos de Apache y que normalmente se llama htdocs. Sugiero crear una carpeta
en otro directorio que puede ser el home o el var, dependiendo del tamaño que contengan una de estas
carpetas y de la cantidad de aplicaciones y datos que van a contener nuestras aplicaciones web (php).
Esa carpeta debe pertenecer al mismo usuario y grupo con el que se ejecuta apache, localiza las lineas
User y Group, de acuerdo a nuestra configuracion-compilacion-instalacion deberia tener como usuario y
grupo a nobody


User nobody
Group nobody

Entonces debemos darle propiedades a este usuario y grupo sobre nuestra carpeta, ejemplo

# mkir /home/www
# chown -R nobody.nobody /home/www

Continuamos con la modificacion de DocumentRoot


DocumentRoot "/home/www/htdocs"

Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all

Es importante eliminar de la linea Options, la palabra Indexes ya que esta muestra un listado de todos
los archivos que contiene un directorio web, cuando apache no encuentra un archivo indice por omision.
Esta deficion de archivo indice por omision es la que sigue.


DirectoryIndex index.php index.html default.html

En esta linea de configuracion le indicamos a Apache una lista de archivos que debe buscar por omision cuando
no le indicamos de manera especifica que pagina web estamos solicitando un ejemplo ilustra mejor. Dos formas de llamar
solicitar un sitio web.

http://www.misitio.com/ (aqui pido al servidor que me muestre la pagina web por omision)
http://www.misitio.com/default.htm (aqui indico explicitamente el nombre de la pagina, default.htm)

Cuando apache recibe una solicitud como la primera, sin indicar el nombre especifico de pagina web, lo que hace
es buscar en la lista de nombres inidicados por DirectoryIndex si existe una de esas paginas web y envia el
contenido del primer archivo que encuentre en la lista.
Si no existe ninguna de las paginas de la lista actua de una de las siguientes maneras, verifica
en la linea de Options anteriores y si existe la palabra Indexes muestra un listado de archivos del sitio web
solicitado, sino existe la linea Indexes muestra un mensaje de error indicando que el usuario no tiene permisos
para ver el contenido de esa carpeta.

La siguiente linea que debemos revisar es Listen, es buena practica indicar en que direccion ip nuestro servidor
web esta escuchando por requerimientos y en que puerto (80 es el puerto de omision generalmente usado). Esta
opcion te puede ayudar para indicarle al servidor web Apache que escuche en mas de un puerto, util en ciertas
ocasiones.

Listen 12.34.56.78:80 (cambiar con la direccion ip correspondiente a tu servidor)

La siguiente es indicar un nombre de contacto, de una direccion email valida, donde nos pueden contactar para notificar
de algun problema con el servicio web.


ServerAdmin administrador@misitio.com

Luego es una buena practica tener al menos un sitio web activo, diria que es hasta obvio sino no tendria sentido
tener activo el servicio web Apache.


ServerName www.sitioactivopordefault.com

Para terminar, es mi costumbre siempre manejar cualquier sitio web como virtual incluso si solo alojo un sitio
web en mi servidor, la principal razon es para poder acomodar nuevos sitios sin tener que hacer muchos cambios.
Primero habilito la opcion de manejo de sitios web virtuales indicando la ip y el puerto que deseo usar. Si tengo
mas de una direccion ip asignada a mi servidor y todas las direcciones ip van a responder pedidos de paginas de
todos los sitios virtuales puedo usar un *.


NameVirtualHost 1.2.3.4:80

Luego viene la definicion de mi sitio o sitios


(recuerda indicar tu direccion ip y el puerto)
ServerAdmin postmaster@misitio.com
DocumentRoot /home/www/misitio (aqui pon el nombre del directorio que contiene las paginas web)
ServerName mail.misitio.com
ErrorLog logs/misitio.com-error_log (es buen habito generar un log por cada sitio web virtual)
CustomLog logs/misitio.com-access_log combined (utiliza log combined, informacion mas completa para generar estadisticas)

El nombre del directorio debe estar creado, aunque no contenga ninguna pagina web o Apache generara un
mensaje de error si intentamos levantar el servicio web.
Si necesitas manejar mas sitios web en el mismo servidor solo debes crear la informacion adecuada dentro
de las etiquetas , o sea es cuestion de copiar, pegar y modificar para que la
nueva definicion virtual corresponda al nuevo sitio web.

Ahora vamos a verificar las configuaciones para que Apache sepa como debe manejar los archivos con extension
.php.
Buscamos y creamos/modificamos las siguientes lineas.

# Seccion extra modules
AddModule mod_php5.c

# Seccion extra modules
LoadModule php5_module directorio_donde_reside/libphp5.so

Reemplaza "directorio_donde_reside", por el nombre del directorio donde se encuentra la libreria libphp5.so, en algunas instalaciones es libexec, en otras modules. No es necesario indicar toda la ruta. Y en nuestro caso deberia estar en libexec.

LoadModule php5_module libexec/libphp5.so

AddType application/x-httpd-php .php (escribela debajo de la linea AddType application/x-tar .tgz)

Luego guarda los cambios y verificamos que no hayamos cometido algun error en la configuracion del archivo
httpd.conf, para eso ejecutamos un script que viene con Apache y que se encuentra en el directorio bin de
Apache.

# /opt/apache/bin/apachectl configtest

El resultado sera Syntax OK o un mensaje indicando el numero de la linea donde se presento el error.

Vamos a levantar el servicio web Apache

# /opt/apache/bin/apachectl start

Aparecera un mensaje indicando que el servicio esta levantado, similar al siguiente

/opt/apache/bin/apachectl start: httpd started

Si todo va bien, finalizamos copiando el archivo apachectl a /etc/rc.d/init.d y lo configuramos
para que Apache se levante automaticamente cada vez que inicio o reinicio el servidor linux.

# cd /etc/rc.d/init.d
# cp /opt/apache/apachectl httpd
# chown 700 httpd
# chkconfig --add httpd

Podemos verificar esta configuracion ejecutando
# service httpd

Veremos un mensaje con los parametros que podemos usar con el comando anterior ya sea para detener,
levantar, reiniciar, o verificar el el archivo de configuracion del servicio web Apache. De manera que para detener el servicio
web Apache podemos hacer.


usage: /etc/init.d/httpd (start|stop|restart|fullstatus|status|graceful|configtest|help)

start - start httpd
stop - stop httpd
restart - restart httpd if running by sending a SIGHUP or start if
not running
fullstatus - dump a full status screen; requires lynx and mod_status enabled
status - dump a short status screen; requires lynx and mod_status enabled
graceful - do a graceful restart by sending a SIGUSR1 or start if not running
configtest - do a configuration syntax test
help - this screen

# service httpd stop

Listo ya tenemos configurado MySQL y Apache, lo siguiente es la postconfiguracion de PHP para finalmente
proceder a configurar y probar Horde. Cuando estes listo continuamos, ya falta poco animo, con estos pasos
podras configurar Apache+MySQL+PHP las veces que sean necesarios y en la mayoria de distribuciones de linux
con las versiones que necesites de los componente y de librerias que tus proyectos requieren, cierto que yum y update
pueden parecer mas faciles pero requerda que no siempre podras encontrar todos las librerias en formato rpm.

Re: Ayudame - Paso 6.3

Paso 6.3 Postconfiguracion PHP

Antes de pasar a la configuracion de Horde como tal vamos a realizar
unas configuraciones de PHP y dejar lista la libreria PEAR.

En tu navegador ingresa la siguiente direccion http://pear.php.net/go-pear , copia el contenido
que se muestra y guardalo en el archivo go-pear.php.
El archivo go-pear.php puedes guardarlo en la carpeta que indicaste como directorio raiz en la configuracion
del archivo httpd.conf, especificante a la que indicaste en DocumentRoot.
De acuerdo al paso anterior deberias guardarla en el directorio /home/www/htdocs

# nano /home/www/htdocs/go-pear.php

Copiar el texto, guardar y salir de nano.

Luego en el servidor procedemos a abrir esa pagina en el navegador, y ejecutar la pagina.
http//misitio.com/go-pear.php

En la direccion pongo misitio.com, asumiendo que fue configurado al menos un sitio web como se indico en la
configuracion de Apache, reemplaza con el nombre que hayas configurado ya sea en ServerName o en la definicion
VirtualHost

Al cargar la pagina aparece un mensaje en ingles que indica que se va instalar un manejador web para poder
administrar (instalar, actualizar)las librerias PEAR que son requeridas por algunas aplicaciones, en nuestro caso
concreto Horde utiliza algunas de las librerias PEAR. Al hacer click en el enlace "Next" aparece un formulario
para poder instalar los archivos necesarios para el administrador web como tambien indicarle a PHP donde se encuentran
los archivos de las diferentes librerias PEAR que necesitaremos instalar en este caso para Horde.

Los que debes tener cuidado en configurar correctame son:


Installation prefix, de acuerdo a nuestra configuracion (cfg.php) debe ser /opt/php
PHP code directory ($php_dir), debe ser $prefix/lib/php
Filename of WebFrontend , debe ser /home/www/htdocs/indexpear.php

Antes de continuar con la instalacion haciendo click en el boton "install", asegurate que los directorios
/opt/php/lib/php tengan los permisos necesarios para que el usuario nobody pueda escribir. Puesto que
el directorio /opt/php no se encuentra accesible de manera directa por el servidor Apache considero seguro
hacer # chown -R nobody.root php

Selecciona que se instale la libreria MDB2, pero no selecciones "Compatibility-Mode for old non-DOM Browsers"

Al hacer click aparece una pantalla que indica el avance de la instalacion de los archivos necesarios para
el administrador web PEAR.

Al terminar puedes ingresar al manejador web PEAR, http//misitio.com/indexpear.php

Cuando estes listos vamos finalmente a configurar y probar Horde.

Problema con httpd

Que tal hacking, mira tengo un problema ya que cuando hice el paso anterior lo de postconfiguracion de apache subiò el httpd, lo mandè a reiniciar y me salio un error que no reconoce el servicio, revisè todo y no hay errores, pero al momento de digitar chkconfig --add httpd, ahora me sale que service httpd does not support chkconfig, a que se refiere.

Saludos

Re: Problema con httpd

Primero nos aseguramos que no este ejecutandose ni el script apachectl ni httpd

# killall httpd
# killall apachectl

Ahora ejecuta los siguientes pasos

# chkconfig --list|grep httpd

Deberia mostrar una linea como la siguiente

httpd 0:off 1:off 2:off 3:on 4:off 5:off 6:off

Vamos a eliminar el script que ejecuta el servicio de manera automatica, verificar
que tenga los permisos adecuados y añadirlo nuevamente.

Cambiate al directorio /etc/rc.d/init.d y verifica que httpd existe y que tiene los permisos adecuados.

# cd /etc/rc.d/init.d ; ls -al httpd
-rwx------ 1 root root 4468 Feb 16 11:50 httpd

El archivo debe tener permiso de ejecucion, ejecuta

# chmod 700 httpd

Borramos si existe la entrada

# chkconfig --del httpd

Ahora vamos nuevamente a añadir el script para que se ejecute automaticamente

# chkconfig --add httpd

Probamos que el servicio quedo configurado correctamente

# service httpd restart

Saludos,

Páginas