Instalación y Configuración de Geeklog 1.4.x

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://joel-barrios.blogspot.com/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2007 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca de Geeklog.

Geeklog es una aplicación basada sobre PHP y MySQL, y distribuida bajo los términos de la licencia GNU/GPL, para el manejo dinámico de contenido de red. Sin modificaciones tras su instalación, es un motor de bitácora personal, Sistema de Manejo de Contenido (CMS o Content Management System) y/o portal de red. Incluye soporte para comentarios, rastreo (o tracback, un método para solicitar notificación cuando alguien enlaza hacia un documento), varios formatos de sindicación (es decir, RSS o Really Simple Sindication), protección contra Spam y todas las funciones básicas para contar con un sitio de red dinámico y versátil.

Gracias a la plataforma para componentes añadidos (Plug-ins), su funcionalidad puede ser fácilmente extendida con foros, galerías de e imágenes, área de descargas y muchas otras cosas más.

URL: http://www.geeklog.net/

¿Por qué Geeklog?

Geeklog fue diseñado con la seguridad como prioridad, siendo que su utilización inicial fue precisamente un sitio de seguridad. Las vulnerabilidades son poco frecuentes y los guiones que explotan vulnerabilidades (exploits), que aún funcionen, son raros de encontrar. Una de las grandes ventajas de Geeklog contra otro tipo de sustento lógico similar, es su esquema de permisos de usuario. Es posible asignar permisos de lectura y/o escritura a un usuario o grupo de usuarios, y hacer que estos usuarios hereden permisos al ser añadidos a un grupo o grupos. Esta funcionalidad cubre los requisitos necesarios para ser utilizado en redes internas en empresas y corporaciones.

Geeklog, además, se enfoca en la calidad del código utilizado, así como también asegurarse que los API (Application Programming Interface o Interfaz de Programación de Aplicaciones) utilizados, no estropeen componentes añadidos (plug-ins) de terceros tras una actualización, a menos que el caso realmente lo requiera. De tal modo, es posible continuar utilizando componentes creados por terceros para versiones anteriores de Geeklog, y sin embargo estos casi por seguro funcionarán correctamente con la versión más reciente, salvo aquellos que utilicen el sistema de comentarios, mismo que fue rediseñado a partir de la versión 1.4.0.

Aspectos de seguridad a considerar.

Geeklog es uno de los Sistemas de Manejo de Contenido más seguros y confiables, sin embargo no significa que sea invulnerable. Hay varios aspectos a considerar, los cuales aplicados de forma correcta pueden mejorar considerablemente la seguridad.

Prefijo de las tablas de Geeklog.

Una de las principales consideraciones que se deben tomar en cuenta es que la mayoría de los guiones disponibles para explotar vulnerabilidades (exploits) indudablemente presupondrán el prefijo de las tablas de Geeklog para lograr su cometido. es decir, el valor del parámetro $_DB_table_prefix, el cual de forma predeterminada es gl_. La mejor forma de impedir ser susceptible a guiones explotables, es cambiar dicho valor por cualquier otro, preferentemente que combine letras y números de forma que sea difícil para un delincuente informático adivinar éste.

Rutas de los directorios de Geeklog.

La siguiente consideración es la localización de los directorios utilizados por Geeklog en el sistema. Conviene instalar el directorio público fuera del directorio raíz de apache, es decir, que no esté dentro de /var/www/html. La forma de hacer esto es colocando el directorio público en una ruta como /var/www/nombre_ofuscado y definiendo dicho directorio como uno virtual en la configuración de Apache.

El directorio de configuración de Geeklog, del mismo modo, y con mayor razón, jamás debe quedar dentro del directorio raíz de Apache. Debe ser instalado en cualquier parte del sistema, como por ejemplo /var/www/nombre_ofuscado, y, a diferencia del directorio público, jamás deberá poder accederse desde el navegador.

Muchos guiones explotables pueden hacer daño si se conoce la ruta exacta en el sistema para diversos componentes de Geeklog.

Desactivar el despliegue de errores de PHP.

La función display_errors función viene deshabilitada de forma predeterminada en el fichero php.ini, sin embargo muchos administradores suelen habilitarla para realizar diagnósticos y pruebas. En realidad, jamás se debe habilitar ésta si se trata de un servidor en producción, porque hará que se muestre en el navegador información que puede ser utilizada en un guión explotable, como son rutas en el sistema de archivo y prefijos de tablas en la base de datos.

Cuando se está hospedado en un servidor con esta función habilitada, se puede recurrir a variables en ficheros .htaccess del siguiente modo:

php_flag display_errors Off

Sustento lógico necesario.

Geeklog requiere algunos componentes para poder funcionar. Específicamente se necesitan Apache, MySQL, PHP y el soporte de MySQL para PHP.

Instalación a través de yum.

Si se utiliza de CentOS 4 o White Box Enterprise Linux 4, solo basta utilizar lo siguiente:

yum -y install httpd php php-mysql mysql-server

Instalación a través de Up2date

Si se utiliza de Red Hat™ Enterprise Linux 4, solo basta utilizar lo siguiente:

up2date -i httpd php php-mysql mysql-server

Instalación de Geeklog.

Geeklog se distribuye en archivos TAR comprimidos con algoritmo Gzip. Una vez descargado, solo basta utilizar el Gestor de archivadores (file-roller) desde el modo gráfico, o bien, si solo se dispone de una terminal, la siguiente sentencia de mandatos:

tar zxvf geeklog-1.4.1.tar.gz

Lo anterior genera un directorio nuevo denominado geeklog-1.4.1, bajo el cual están todos los componentes de Geeklog.

Procedimientos.

Respaldo de la base de datos existente.

Si va a ser utilizada una base de datos existente, conviene respaldar ésta antes de continuar.

mysqldump --opt -u root -p base-de-datos > respaldo-base-de-datos.sql

Para restaurar el respaldo, se utiliza lo siguiente:

mysql -u root -p base-de-datos < respaldo-base-de-datos.sql

Creación de la base de datos para Geeklog en MySQL.

Deben definirse previamente tres valores a utilizar con Geeklog: nombre de la base de datos, usuario para acceder a esta base de datos y clave de acceso para este usuario. Éstos, preferentemente, deben ser valores difíciles de adivinar para terceros.

Tomando en cuenta lo anterior, se crea la base de datos utilizando el mandato mysqladmin.

mysqladmin -u root -p create base-de-datos

Una vez creada la base de datos, se accede hacia el servidor de MySQL con el mandato mysql, con la finalidad de asignar permisos, usuario y clave de acceso.

mysql -u root -p

El usuario y clave de acceso necesarios se asignan del siguiente modo:

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 4 to server version: 4.1.20

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> GRANT ALL ON base-de-datos.*
    -> TO usuario-geeklog@localhost
    -> IDENTIFIED BY 'clave-de-acceso';

mysql> exit

Configuración de directorios para Geeklog.

El directorio principal puede quedar en cualquier lugar del sistema de archivos, pero nunca dentro del directorio raíz de Apache, más sin embargo en una ruta a la cual tenga acceso éste último. Un buen lugar es dentro de /var/www/ o bien /etc. Preferentemente utilizando un nombre de directorio ofuscado o bien algo difícil de adivinar.

mv geeklog-1.4.1 /var/www/conf_geeklog

EL directorio de configuración requiere que los subdirectorios backup, data y logs tengan permisos de escritura para el usuario apache. Puede hacerse asignando permiso 707 (drwx—rwx) a éstos, o bien, la forma más conveniente, asignándolos al usuario apache del siguiente modo:

chown -R apache.apache 
/var/www/conf_geeklog/{backup,data,logs}

El directorio público de Geeklog, es decir, public_html, también es conveniente esté fuera del directorio raíz de Apache.

mv /var/www/conf_geeklog/public_html 
/var/www/html_geeklog

El acceso desde Apache hacia este directorio conviene más que sea como directorio virtual. Para tal fin se añade la configuración correspondiente en Apache creando el fichero /etc/httpd/conf.d/geeklog.conf, considerando que Geeklog será accedido como http://www.dominio.algo/portal/, con el siguiente contenido:

	Alias /portal /var/www/html_geeklog/

Geeklog funciona perfectamente sin la variable register_globals habilitada, sin embargo algunos de los añadidos para Geeklog si lo requieren. Debido a que no es conveniente habilitar register_globals en todo el servidor HTTP, puede configurarse el directorio /var/www/html_geeklog/ para permitir utilizar éste en donde sea necesario a través de un fichero .htaccess. Siendo así, la configuración en /etc/httpd/conf.d/geeklog.conf quedaría del siguiente modo:

	Alias /portal /var/www/html_geeklog/
	<Directory "/var/www/html_geeklog/">
		Options Includes
		AllowOverride all
	</Directory>

Para utilizar register_globals solo será necesario crear el fichero /var/www/html_geeklog/.htaccess con el siguiente contenido:

php_flag display_errors Off
php_flag register_globals On

El el directorio público, hay varios directorios que deben permitir escritura para el usuario apache. Puede hacerse asignando permiso 707 (drwx—rwx) a éstos, o bien, la forma más conveniente, asignándolos al usuario apache del siguiente modo:

chown -R apache.apache 
/var/www/html_geeklog/images/{articles,library,topics,userphotos}

chown -R apache.apache 
/var/www/html_geeklog/backend

Fichero lib-common.php.

Es el único fichero del directorio público que requiere modificarse, y es para establecer donde se encuentra el fichero config.php de Geeklog. Aproximadamente en la línea 84 de /var/www/html_geeklog/lib-common.php se encuentra una función require_once donde se debe establecer /var/www/conf_geeklog/config.php del siguiente modo:

/**
* Configuration Include: You should ONLY have to modify this line.
* Leave the rest of this file intact!
*
* Make sure to include the name of the config file,
* i.e. the path should end in .../config.php
*/
require_once( '/var/www/conf_geeklog/config.php' );

Fichero config.php.

Se accede hacia el directorio /var/www/conf_geeklog/.

cd /var/www/conf_geeklog/

Se edita el fichero config.php y se definen los valores para las siguientes variables, considerando que se utilizará el idioma español para México y codificación UTF-8 para el conjunto de caracteres:

$_DB_host localhost
$_DB_name base-de-datos
$_DB_user usuario-geeklog
$_DB_pass clave-de-acceso
$_DB_table_prefix e3f45g_ (cualquier prefijo, terminado en guión bajo, que no sea fácil de adivinar)
$_CONF[‘path’] /var/www/conf_geeklog/
$_CONF[‘path_html’] /var/www/html_geeklog/
$_CONF[‘site_url’] http://www.dominio.algo/portal (no debe llevar / al final)
$_CONF[‘site_admin_url’] http://www.dominio.algo/portal/admin (no debe llevar / al final)
$_CONF[‘site_mail’] alguien@algo.algo
$_CONF[‘site_name’] Nombre del portal
$_CONF[‘site_slogan’] Eslogan del portal
$_CONF[‘language’] spanish_utf-8
$_CONF[‘default_charset’] utf-8
$_CONF[‘locale’] es_MX.utf-8
$_CONF[‘rdf_language’] es-mx

Nuevamente, la mejor recomendación es que los valores para $_DB_name, $_DB_user, $_DB_pass, $_DB_table_prefix, $_CONF[‘path’] y $_CONF[‘path_html’] deben ser difíciles de adivinar para un atacante.

Instalador de Geeklog

Para concluir la instalación, es necesario acceder hacia http://www.dominio.algo/portal/admin/install/install.php, especificar la ruta para el fichero config.php (la cual, para el ejemplo de este documento, sería /var/www/conf_geeklog/config.php), habilitar la casilla para utilizar tablas Innodb y continuar dando clic en los botones de siguiente. Al terminar, Geeklog podrá ser accedido como http://www.dominio.algo/portal/, y solo restarán un par de ajustes más desde la recién instalada interfaz HTTP..

Procedimientos posteriores.

Hecho todo lo anterior, por motivos de seguridad, debe ser eliminado el directorio /var/www/html_geeklog/admin/install/.

rm -fr /var/www/html_geeklog/admin/install/

El usuario administrador predeterminado de Geeklog es admin, y la clave de acceso es password. Ambos deben ser cambiados accediendo hacia http://www.dominio.algo/portal/admin/user.php?mode=edit&uid=2 y definiendo otro nombre de usuario y una nueva clave de acceso.

Problemas posteriores.

Si algo salió mal durante la instalación, es posible diagnosticarlo examinando las bitácoras de Apache, específicamente /var/log/httpd/error_log, o bien la bitácora de Geeklog, es decir, /var/www/conf_geeklog/logs/error.log. Los errores más comunes son errores tipográficos en las rutas de directorios o ficheros en el fichero de configuración, es decir, /var/www/conf_geeklog/config.php.