Introducción


Se desea instalar la aplicación Oscommerce para montar una tienda Web, con características de seguridad, fácil administración y navegación utilizando el servidor Web Apache, y la base de datos Mysql en FreeBSD 6.0.

 

Requerimientos

 

FreeBSD 6.0 Instalado

Instalar el Port de Oscommerce (se encuentra en /usr/ports/www/oscommerce)

Instalar el Port de Mysql (Se encuentra en /usr/ports/databases/mysql41-server)

Instalar el Apache (se encuentra en /usr/ports/www/apache2)

Instalar PHP 4 (Se encuentra en /usr/ports/lang/php4)

 

 Configuración

 

Procederemos a editar el Archivo Makefile de PHP para incluir soporte para PCRE que es el paquete de manejo de expresiones regulares de perl usado por PHP que se encuentra en: /usr/ports/lang/php4/Makefile

 

Nos colocamos en el directorio: /usr/ports/lang/php4/

oscommerce$ cd  /usr/ports/lang/php4/

 

Y editamos el archivo Makefile

 

oscommerce$ emacs Makefile

 

Añadimos en la línea 59 después del .endif lo siguiente:

 

#pcre

CONFIGURE_ARGS+=--with-pcre-regex=yes

PHP_HEADER_DIRS=pcrelib

 

Guardamos el archivo, y con esto queda activado el soporte de expresiones regulares para PHP.

 

Instalación de OSCOMMERCE

 

Nos colocamos en el directorio: /usr/ports/www/oscommerce

oscommerce# cd  /usr/ports/www/oscommerce

 

Y tecleamos:

 

oscommerce# make install clean

 

con lo que bajara, compilara e instalara, Oscommerce, Mysql, Apache 2 y php4 y demás dependencias.

Cabe destacar que cuando termine de descargar el paquete de Oscommerce nos preguntara si deseamos incluir algunas opciones, marcaremos la opción de APACHE2 y OPENSSL, con esto aseguraremos que la versión de Apache que se instalara sea la 2 y además que sea capaz de manejar conexiones seguras.

 

Al darle OK en las opciones, continuara descargando los demás paquetes que se necesitan.

 

Configuración de inicio de servicios:

 

Editamos el archivo /etc/rc.conf y añadimos:

 

oscommerce# emacs /etc/rc.conf

añadimos:

apache2_enable="YES"

apache2_flags="-DSSL"

mysql_enable="YES"

 

Con esto conseguimos activar apache y mysql para que arranquen desde el inicio, además de que apache soporte conexiones seguras.

 

Configuración de Apache 2:

 

Editamos el archivo de configuración que de apache que se encuentra en: /usr/local/etc/apache2/httpd.conf para añadir los módulos de PHP, con el fin de que nuestro servidor Web interprete correctamente las extensiones *.php

 

oscommerce# emacs  /usr/local/etc/apache2/httpd.conf

añadimos lo siguiente en la línea 885 del archivo de configuración.

 

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

 

guardamos el archivo de configuración y con esto queda activado el soporte PHP de nuestro servidor Web.

 

Configuración de los certificados de seguridad:

 

Crearemos los certificados de seguridad utilizando la utilería openssl.

Primero se deben de crear los directorios con sus permisos correspondientes para esto hacemos lo siguiente:

 

oscommerce# mkdir /usr/local/etc/apache2/ssl.key

oscommerce# mkdir /usr/local/etc/apache2/ssl.crt

oscommerce# chmod 0700 /usr/local/etc/apache2/ssl.key

oscommerce# chmod 0700 /usr/local/etc/apache2/ssl.crt

 

con esto ya tenemos el lugar específico en donde estarán nuestros certificados de seguridad y los permisos correctos.

 

oscommerce# cd ~

oscommerce# openssl genrsa -des3 -out server.key 1024

 

Se les preguntara una frase password en este paso es muy importante que se anote y la recuerden para su uso posterior.

 

El siguiente paso es Generar la firma del certificado:

 

oscommerce#openssl req -new -key server.key -out server.csr

 

Con esto el certificado esta listo para ser firmado, los siguientes pasos mostraran como auto firmar el certificado de seguridad aun que también se puede pagar dinero a compañías como verisign para que lo firmen (www.verisign.com).

 

oscommerce#openssl x509 -req -days 365 -in /root/server.csr -signkey /root/server.key -out /root/server.crt .

 

Este paso le da una validez al certificado de 365 días  procederemos a copiar los certificados en los lugares correspondientes:

 

oscommerce#

oscommerce#  cp ~/server.key /usr/local/etc/apache2/ssl.key/

cp ~/server.crt /usr/local/etc/apache2/ssl.crt/

 

Ahora daremos a los certificados los permisos adecuados:

 

oscommerce#chmod 0400 /usr/local/etc/apache2/ssl.key/server.key

oscommerce#chmod 0400 /usr/local/etc/apache2/ssl.crt/server.crt

 

Cuando se inicia el servicio de apache nos solicitara la frase que pusimos en el certificado de seguridad, para que no suceda esto, hacemos lo siguiente:

 

oscommerce#cd /usr/local/etc/apache2/ssl.key

oscommerce#cp server.key server.key.orig

oscommerce#openssl rsa -in server.key.orig -out server.key

 

Y con esto nuestro servidor de apache prendera sin ningún problema.

 

 

Ahora nuestro servidor Web esta listo para aceptar conexiones seguras.

 

Configuración de PHP.

 

Debemos renombrar el archivo /usr/local/etc/php.ini-dist y llamarlo php.ini para esto:

 

Nos colocamos en el directorio /usr/local/etc.

oscommerce# cd /usr/local/etc

 

y renombramos el archivo SIN borrar el original que nos puede servir de respaldo en el caso de alguna eventualidad.

 

oscommerce# cp php.ini-dist php.ini

 

Una vez hecho esto editamos el archivo php.ini que se encuentra en el mismo lugar (/usr/local/etc/php.ini) y pondremos la opción register_globals que se encuentra por default en OFF la cambiaremos ON esto es en la linea 365 de dicho archivo:

 

oscommerce# emacs php.ini

 

register_globals=On

 

Guardamos el archivo de configuración y con esto habilitaremos el manejo de variables vía oscommerce.

 

 Configuración de la Base de datos Mysql

 

Lo primero que tenemos que hacer una vez instalado el Servidor de Mysql es asignar una contraseña a la cuenta root y crearemos la base de datos llamada bdoscommerce:

Prendemos el servicio de mysql con:

 

oscommerce# /usr/local/etc/rc.d/mysql-server.sh start

oscommerce# /usr/local/bin/mysqladmin -u root  password 'algunpassword'

 

oscommerce# echo "CREATE DATABASE bdoscommerce;" | mysql -u root -palgunpassword

 

oscommerce# mysql -u root -palgunpassword

 

mysql> grant INSERT,SELECT on bdoscommerce.* to root@localhost;

 

Query OK, 0 rows affected (0.01sec)

 

mysql> quit

 

Con esto además de prender el servicio de mysql y crear la cuenta de root con password creamos la base de datos bdoscommerce y permitimos a los usuarios realizar operaciones sobre ella.

 

Configuración de OSCOMMERCE:

 

Imaginemos que el IP de nuestro servidor FreeBSD con OsCommerce es 192.168.1.1 entonces , entraremos a algún navegador Web como el Firefox o algún otro de su preferencia y teclearemos en la barra de direcciones :

http://192.168.1.1/oscommerce/catalog/install/index.php

 

1.- Nos llevara a la primera pantalla de configuración de oscommerce. en la cual daremos click sobre el botón de INSTALL

2.-En la siguiente pantalla vienen seleccionadas las opciones de: Import Catalog Database y Automatic Configuration las cuales dejaremos intactas para que el sistema instale las tablas que trae por default y aplique las configuraciones de manera automática.

3.-La siguiente pantalla es la más importante ya que en ella vamos a introducir los parámetros de acceso a la base de datos y serán los siguientes:

a) Database Server: localhost

b) Username: root

c) Password: algunpassword  (es el password que le asignamos a la base de datos mysql)

d) Database Name: bdoscommerce

y activaremos la opción de:

Session Storage: DATABASE (para almacenar las sesiones de los usuarios en la base de datos)

 

4.- Damos click en continue, y nos debe de aparecer un mensaje como:

 

A test connection made to the database was successful.

 

En caso contrario debemos dar click en back y revisar tanto el nombre de la base de datos como los demás parámetros.

 

5.-Daremos click de nuevo en el botón continue para importar los catálogos de datos.

 

6.-De nueva cuenta nos debe de aparecer:

 

The database import was succesful.

 

En caso contrario debemos revisar que la ubicación del archivo:

/usr/local/www/data/oscommerce/catalog/install/oscommerce.sql

 

sea la correcta.

 

7.-Damos de nuevo click en continue y nos aparecerá la pantalla de:

 

Please enter the Web server information:

 

En la cual vienen definidos nuestros parámetros por default, si deseamos hacer algún ajuste de los directorios o de nuestro nombre de la página editamos las opciones.

La opción interesante aquí es Enable SSL Connections: la cual debemos activar, para que nuestra página Web maneje conexiones seguras basándose en los certificados que creamos anteriormente.

 

8.- De nueva cuenta presionamos el botón continue y ahora nos lleva a la pantalla de configuración del entorno seguro, el cual ya trae los valores por default necesarios para empezar a usar nuestra pagina.

 

9.-Damos click en continue y nos llevara a la pantalla de

 

osCommerce Configuration

 

En la cual revisaremos los ajustes básicos que ya tenemos de pantallas anteriores damos click en Continue, y con esto se termina el proceso de instalación del sistema Oscommerce.

 

10.- Para acceder al panel de control de Oscommerce se debe teclear desde algún navegador Web: http://192.168.1.1/oscommerce/catalog/admin/index.php

o bien si queremos acceder por conexión segura:

https://192.168.1.1/oscommerce/catalog/admin/index.php

 

11.- Para acceder a la interfase del catalogo o tienda debemos entrar a:

 

http://192.168.1.1/oscommerce/catalog/index.php

 

 

 

Configuración después de la instalación:

 

Después de instalar Oscommerce se necesitan seguir los siguientes pasos.

 

1.-Renombrar o borrar el directorio de instalación de Oscommerce para lo que tecleamos.

oscommerce# rm -rf  /usr/local/www/data/oscommerce/catalog/install

 

con esto se BORRARA el directorio install .

 

2. Resetear los permisos de  /usr/local/www/data/oscommerce/catalog/includes/configure.php a 444 para lo cual hacemos:

 

oscommerce#chmod 444 /usr/local/www/data/oscommerce/catalog/includes/configure.php

 

3. Configurar los permisos en  el directorio de imágenes "/usr/local/www/data/oscommerce/catalog/images" a 777

 

oscommerce# chmod 777 /usr/local/www/data/oscommerce/catalog/images

 

4. Configurar los permisos en el directorio  "/usr/local/www/data/oscommerce/catalog/admin/images/graphs" a 777

 

oscommerce#chmod 777 /usr/local/www/data/oscommerce/catalog/admin/images/graph

 

5. Crear el directorio  /usr/local/www/data/oscommerce/catalog/admin/backups y ponerle permisos 777 (Este es el fólder en donde se guardará el respaldo de la base de datos que se hace en la  sección de herramientas del panel de administración de oscommerce).

 

oscommerce#mkdir /usr/local/www/data/oscommerce/catalog/admin/backups

oscommerce#chmod 777 /usr/local/www/data/oscommerce/catalog/admin/backups

 

Configuración del Panel de Administración de Oscommerce.

 

1.- Seguridad

Primero que todo necesitamos proteger con contraseña el panel de administración , ya que por default este viene abierto a que todo el mundo pueda entrar sin necesidad de utilizar contraseña , utilizaremos la seguridad de apache , en especifico el archivo .htaccess para lo que hacemos lo siguiente :

oscommerce#emacs /usr/local/etc/apache2/httpd.conf

 

buscamos la línea 396, que debiera de ser AllowOverride, en la sección de Directory y sustituimos:

AllowOverride NONE

 

POR

 

AllowOverride AuthConfig

 

Y guardamos el archivo.

 

Se Necesitará crear un archivo de contraseñas. Éste archivo se deberá colocar en algún sitio no accesible mediante la Web. Por ejemplo, si sus documentos son servidos desde /usr/local/www/data usted podría querer colocar el(los) archivo(s) de contraseñas en /usr/local/etc/apache2/passwd.

 

Para crear un archivo de contraseñas, use la utilidad htpasswd que viene con Apache.  escribimos:

 

oscommerce#mkdir /usr/local/etc/apache2/passwd

 

oscommerce# htpasswd -c /usr/local/etc/apache2/passwd/passwords usuario

 

aparecerá:

 

New password: mypassword

Re-type new password: mypassword

Adding password for user usuario

 

htpasswd  pedirá la contraseña, y luego  la volverá a pedir para confirmarla.

 

lo que se consigue con esto es crear un archivo passwords en el directorio /usr/local/etc/apache2/passwd con la información del login de: usuario y la contraseña.

 

El siguiente paso es configurar el servidor para que solicite una contraseña y decirle al servidor a qué usuarios se les permite el acceso. Puede hacer esto editando el archivo httpd.conf o usando un archivo .htaccess. Por ejemplo, si desea proteger el directorio /usr/local/www/data/oscommerce/catalog/admin, puede usar las siguientes directivas,  colocándolas en el archivo /usr/local/www/data/oscommerce/catalog/admin/.htaccess

 

Para lo que hacemos:

oscommerce#emacs /usr/local/www/data/oscommerce/catalog/admin/.htaccess

 

y añadimos:

 

AuthType Basic

AuthName "Panel de control”

AuthUserFile /usr/local/etc/apache2/passwd/passwords

Require user usuario

 

guardamos el archivo de configuración.

 

NOTA IMPORTANTE: EL archivo .htaccess solo debe contener la información listada arriba toda otra directiva debe de ser comentada o borrada.

 

Para que los cambios tengan efecto, debemos reiniciar el servicio de apache .para esto tecleamos:

 

oscommerce# /usr/local/etc/rc.d/apache2.sh restart

Para lo cual debe de aparecer:

 

Syntax OK

Stopping Apache2

Waiting for Pids

starting apache2 .

 

 

 La directiva AuthType selecciona el método que se va a usar para autentificar al usuario. El método más común es Basic, y éste método está implementado en mod_auth. Es importante ser consciente, sin embargo, de que la autentificación Básica envía la contraseña desde el cliente hasta el navegador sin encriptar. Por lo tanto, este método no debería ser usado para información altamente sensible. Apache soporta otro método de autentificación: AuthType Digest. Este método está implementado en mod_auth_digest y es mucho más seguro. Sólo las versiones más recientes de clientes soportan la autentificación del tipo Digest.

 

La directiva AuthName establece el Dominio a usar en la autentificación. El dominio (realm) cumple dos funciones importantes. Primero, el cliente frecuentemente presenta esta información al usuario como parte del cuatro de diálogo para la contraseña. Segundo, es usado por el cliente para determinar qué contraseña enviar para un área autentificada dada.

 

Así, por ejemplo, una vez que el cliente se haya autentificado en el área "Panel de control ", automáticamente se volverá a tratar de usar la misma contraseña en cualquier área del mismo servidor que esté marcado con el Dominio (Realm) "Panel de control”. Por lo tanto, puede evitar que se le pida al usuario la contraseña más de una vez permitiendo compartir el mismo dominio (realm) para múltiples áreas restringidas. Por supuesto, por razones de seguridad, el cliente siempre necesitará pedir de nuevo la contraseña cuando cambie el nombre de la máquina del servidor.

 

La directiva AuthUserFile establece la ruta al archivo de contraseña que acabamos de crear con htpasswd. Si tiene un gran número de usuarios, sería bastante lento buscar por medio de un archivo en texto plano para autentificar al usuario en cada solicitud. Apache también tiene la capacidad de almacenar la información del usuario en archivos rápidos de bases de datos. El módulo mod_auth_dbm proporciona la directiva AuthDBMUserFile. Estos archivos pueden ser creados y manipulados con el programa dbmmanage. Muchos otros tipos de opciones de autentificación están disponibles en módulos de terceras partes en la Base de datos de Módulos de Apache.

 

Finalmente, la directiva Require proporciona la parte de la autorización del proceso estableciendo el usuario al que se le permite acceder a esa área del servidor.

 

 

Cambios a algunos archivos de Configuración de Oscommerce:

 

1.- Cuando tratamos de borrar TODOS los Fabricantes que vienen definidos por default, al momento de eliminar el último, nos aparecerá este error:

Fabricantes 

 

Esto es por que la tabla de manufacturers de nuestra base de datos mysql NO permite estar vacía, por lo que tenemos que modificar lo siguiente:

 

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-20, 20' at line 1

 

select manufacturers_id, manufacturers_name, manufacturers_image, date_added, last_modified from manufacturers order by manufacturers_name limit -20, 20

 Hacemos un backup del archivo: /usr/local/www/data/oscommerce/catalog/admin/includes/classes/split_page_results.php .

 

oscommerce#cd /usr/local/www/data/oscommerce/catalog/admin/includes/classes

 oscommerce#cp split_page_results.php split_page_results.php.respaldo

 

Después editamos el archivo split_page_results.php, y añadimos lo siguiente:

 

oscommerce#emacs split_page_results.php

 

localizamos la línea: 37 y 38 que dicen:

 

$offset = ($max_rows_per_page * ($current_page_number - 1));

$sql_query .= " limit " . $offset . ", " . $max_rows_per_page;

 

y ponemos lo siguiente:

 

$offset = ($max_rows_per_page * ($current_page_number - 1));

if ($offset < 0)

{

$offset = 0 ;

}

$sql_query .= " limit " . $offset . ", " . $max_rows_per_page;

 

Guardamos el archivo de configuración, con esto aseguramos que nuestra tabla no genere errores al quedarse vacía.

 

 

 

Conclusiones

Se tiene ahora la plataforma Oscommerce instalada y depurada, lista para ser utilizada

como tienda Web, manejar pedidos, productos y estadísticas de manera segura y rápida

espero que les sea de utilidad.

 

 

Agradecimientos Especiales:

Quiero agradecer de manera muy especial la colaboración de:

Alicia Rodríguez Suárez (Procedimientos de error de Oscommerce)

Mario Alberto Luna Pavo (Configuración de Oscommerce)

Ignacio Padua Hernández (Depuración de Oscommerce)

Paulina Reyes Villanueva (Asesoría y consulta. )


Fuentes de Información

 

www.oscommerce.com

 

http://httpd.apache.org/docs/2.0/howto/auth.html

 

http://www.oscommerce.info/docs/english/e_post-installation.html

 

www.bsdguides.com

 

www.freebsd.org.mx

 

 

 

 

 

 

--------------------------------------------------------------------------------

 

Dudas y comentarios son bienvenidos a jleal@univillarica.mx