viernes, 28 de marzo de 2008

Workflow - Scarab

Hola, muchas veces en las empresas en que trabajamos es necesario implementar un sistema que haga un seguimiento a distintos casos o actividades, es decir la construcción o implementación de un workflow. Ahora ustedes se preguntaran ¿Que es un Workflow? , en simples palabras, un workflow es el seguimiento a un flujo de trabajo ver aquí para más información.

Los Workflow deben cumplir con los siguientes objetivos (copiado de wikipedia):
  • Reflejar, mecanizar y automatizar los métodos y organización en el sistema de información
  • Establecer los mecanismos de control y seguimiento de los procedimientos organizativos
  • Independizar el método y flujo de trabajo de las personas que lo ejecutan
  • Facilitar la movilidad del personal
  • Soportar procesos de reingeniería de negocio
  • Agilizar el proceso de intercambio de información y agilizar la toma de decisiones de una organización, empresa o institución

Ahora que ya sabemos lo que es un workflow, y que además necesitamos implementar uno, veremos como lo haremos.
Existen muchos workflow en el mercado, en el siguiente link hay una lista de ellos, son proyectos Open Source - Workflow Engine in Java.

Nos centraremos en una aplicación Open Source llamada Scarab de tigris.org, escrita en Java y altamente configurable, trabaja con distintas bases de datos como Oracle, Postgre, Mysql, Hipersonic, etc., Prototype como librería de Ajax, y los mejores estándares abiertos de tecnología J2EE, como base de Workflow ocupa WfmOpen, La meta de este proyecto (WfmOpen) es proporcionar una puesta en práctica ligera basada en un motor del worflow J2EE. el cual funcionará en una variedad de plataformas y con licencia GPL.

Tambien el código fuente se integra fácilmente con ides como eclipse y netbeans, trabajando con ant y maven a gusto del desarrollador, velocity Macro para las paginas y turbine como motor.

Bueno pongamos manos a la obra y descarguemos el proyecto desde este link

bajemos la ultima versión estable, la 0.21, en formato tar.gz o zip, y lo descomprimimos en el directorio donde tengamos nuestros desarrollos, esto nos generara un árbol de archivos como el siguiente:

slack@ulinux:~/desarrollo/scarab-0.21$ ls -la

total 364
drwxr-xr-x 10 slack slack 4096 2008-03-28 10:26 .
drwxr-xr-x 45 slack slack 4096 2008-03-24 10:06 ..
drwxr-xr-x 3 slack slack 4096 2008-03-27 16:06 bin
drwxr-xr-x 2 slack slack 4096 2008-03-28 09:40 build
-rwxr-xr-x 1 slack slack 10104 2008-03-12 22:38 .classpath
drwxr-xr-x 8 slack slack 4096 2008-03-12 22:36 extensions
-rwxr-xr-x 1 slack slack 9646 2007-02-09 16:28 INSTALL
drwxr-xr-x 2 slack slack 4096 2008-03-12 22:36 lib
-rwxr-xr-x 1 slack slack 175 2007-02-09 16:28 LICENSE
-rwxr-xr-x 1 slack slack 28373 2007-02-09 16:28 maven.xml
-rwxr-xr-x 1 slack slack 18837 2007-02-09 16:28 MIGRATION
-rwxr-xr-x 1 slack slack 14209 2008-03-27 11:44 minimal.properties
-rwxr-xr-x 1 slack slack 3868 2007-02-09 16:28 minimal.xsl
-rwxr-xr-x 1 slack slack 370 2008-03-12 22:38 .project
-rwxr-xr-x 1 slack slack 55009 2008-03-27 15:07 project.properties
-rwxr-xr-x 1 slack slack 28509 2007-02-09 16:28 project.xml
-rwxr-xr-x 1 slack slack 4139 2007-02-09 16:28 project.xsl
-rwxr-xr-x 1 slack slack 3194 2007-02-09 16:28 README
drwxr-xr-x 9 slack slack 4096 2007-02-09 16:34 src
drwxr-xr-x 9 slack slack 4096 2007-02-09 16:34 tomcat
-rwxr-xr-x 1 slack slack 98872 2007-02-09 16:31 velocity.log
-rwxr-xr-x 1 slack slack 14120 2007-02-09 16:28 wizzard.properties
-rwxr-xr-x 1 slack slack 3956 2007-02-09 16:28 wizzard.xsl
drwxr-xr-x 3 slack slack 4096 2007-02-09 16:34 www
drwxr-xr-x 7 slack slack 4096 2008-03-12 22:36 xdocs

y al montarlo el eclipse quedaría así este proyecto:



Entonces ahora tendremos que tener instalada y arriba Mysql la cual ocupa por defecto para el arranque inicial, la podriamos cambiar modificando el archivo minimal.properties de la raiz del proyecto, si ocupamos ANT debemos ir a la carpeta build del proyecto y correr con ant el archivo buid.xml, como muestra la siguiente imagen:



Antes de comenzar a deployar la aplicación debemos crear una base de datos llamada scarab en mysql con usuario root por default, luego en el navegador derecho de opciones de ant hacemos doble click en la opción por defecto marcada como deploy [default] y luego que termine en la consola de hacer este deploy si todo va bien debemos generar el war con la opcion war de ant, esto nos generara una carpeta con el nombre target en la raiz del proyecto y dentro de esta el archivo scarab.war que debemos llevar al webapp de tomcat.

Saludos y mucha suerte !!

miércoles, 12 de marzo de 2008

Hacker o Cracker?


Uno de los temas que tiene mucho que ver en esto de la informática y que no está muy claro todavía, es acerca de los hackers. Estas personas tienden a ser confundidas con otro tipo de individuos que son todo lo contrario a ellos...

En esta primera parte abarcaremos lo que es un hacker - ¿ Acaso no son los hackers los que se pasan tratando de romper las cuentas de hotmail a la gente?

¿Qué es lo primero que pensamos cuando escuchamos la palabra Hacker?.En un tipo frente a una computadora metiéndose a otra para desconfigurarla o robarle información, o en un tipo programando virus para infectar tu máquina y así perder toda tu información. Muchos usuarios de Internet les temen a estos tipos que incluso cuando saben que tienen uno en su lista de contactos, lo borran y borran todo lo relacionado con este, creyendo evitar así ser espiados, este tipo de personas asociados a un mundo medio under ground, de musica rock, bar de rene, o de la noche, etc... no somos tan malos, jjj.



En cambio otros (especialmente los principiantes) adoran a estos hackers y pasan días enteros buscando información de como convertirse en uno de ellos, y cuando se topan con uno quieren convertirse en su pupilo y aprender todas la magias que encierra a estos individuos denominados hackers por la sociedad.

Pero oh! Error señores, estos no son los verdaderos hackers. Los hackers de verdad no destruyen.... Construyen.

Todos estos individuos que se la pasan saboteando equipos no son más que Crackers que se dedican a crackear cuentas con el único fin de perjudicar a otros. Los Hackers en cambio son tipos rudos en la programación y tecnología o en la creación de soluciones a problemas, autodidactas, etc.

La sociedad ha denominado hackers a los crackers y esto a los hackers de verdad no les causa la menor de las gracias pues ellos están para construir, desarrollar soluciones, y descubrir fallos de seguridad en los sistemas que investigan, no para destruir y sabotear.

Un hacker no dice: Soy un Hacker!. la comunidad de hackers es la que lo denomina como tal, por sus características y esfuerzo al realizar una aplicación o al contribuir a la solución de un problema.

"Los hackers resuelven problemas y construyen cosas, y creen en la libertad y la ayuda voluntaria mutua. Para ser aceptado como hacker, deberás comportarte como si tuvieras esta actitud en tu interior. Y para comportarte como si tuvieras esta actitud, deberás creerte de verdad dicha actitud".

"Pero si piensas en cultivar las actitudes de hacker sólo como una forma de ganar aceptación en esta cultura, te estás equivocando. Transformarse en la clase de persona que cree estas cosas es importante para ti para ayudarte a aprender y mantenerte motivado. Como en todas las artes creativas, el modo más efectivo de transformarse en un maestro es imitar la mentalidad de los maestros no sólo intelectualmente, sino también emocionalmente".

Los hackers son autodidactas, y es para ellos todo un reto el resolver un problema. Entre mas grande sea el problema a resolver, mas interesante se hace el reto para un hacker de solucionarlo.

Linux es un ejemplo de una plataforma creada por hackers. Linux es un sistema operativo muy usado por los hackers, en el desarrollan aplicaciones, y crean soluciones a distintos problemas que tiene la comunidad linux, como la falta de algunas aplicaciones o la actualización de otras, etc. Estas aplicaciones van desde una página web hasta un sistema operativo completo.

La comunidad hacker esta en la red, y se encuentra en distintas comunidades y foros en lo ancho del Internet. Algunos son Moderadores y pasan largas jornadas leyendo problemas y aportando soluciones. Otros participan en proyectos de software y aportan código u optimizan código para los proyectos, en realidad son comunidad abierta al conocimiento.

Los hackers son los que le han dado forma a lo que hoy conocemos como Internet y su aportación es muy importante en el desarrollo informático. No solo son programadores, los hay desarrolladores y podría decir que también algunos solo son autodidactas y adictivos a la informatica.

Así que si la próxima vez quieres robar una cuenta de Hotmail y ser un gran hacker.. serás mas bien un cracker! (¡lamer es el término adecuado!). En vez de robar mejor: "aporta y crea soluciones para la comunidad... se autodidacta, sé un hacker!!.

Saludos y Suerte !!

jueves, 21 de febrero de 2008

Virtualización de Servidores

La virtualización es la capacidad de poder generar 'n' ambientes de sistemas operativos en un mismo hardware manteniendo un alto performance y rendimiento por cada uno de ellos, pudiendo además poder implementar clustering entre estos sistemas para balanceo de cargas y poder mantener los servicios 99.99% del tiempo arriba.


Un plan de virtualización define etapas de investigación y pruebas para una correcta implementación de este concepto en nuestras maquinas, la principal ventaja de la virtualización de servidores es, aprovechar los escasos recursos de equipamiento de servidores para poder generar un amplio ambiente virtual con n maquinas servidoras.

En Linux existe Xen (Open Source) para Virtualización de servidores, Xen es una maquina virtual de código abierto desarrollada en la universidad de Cambridge, recientemente Amazon comenzó a brindar servicios de Computadores bajo demanda utilizando Xen como el núcleo del servicio. Xen ha tenido gran éxito y es mantenido por una comunidad muy activa dentro del desarrollo de Software Open Source.

En la actualidad los fabricantes de hardware y CPU como Intel y Amd han dado soporte para la virtualización, y seguramente es la mejor implementación que se puede adoptar para un mantener un alto performance y rendimiento de los servicios de sistemas y web que se ofrecen.

Las técnicas de Virtualización deben contemplar la virtualización de todo el hardware, mas específicamente la virtualización de la CPU, Memoria, discos duros y hardware de entrada y salida.

Xen se puede configurar de manera transparente y compleja con muchos pasos. a diferencia de aplicaciones como VMWare, Xen se codifica básicamente en el kernel de Linux y se gestiona con un servicio que administra las maquinas virtuales, esa es la ventaja que nos puede proveer Xen al ser implementado en Un Sistema Operativo de código abierto como Linux.

Xen proporciona aislamiento seguro, control de recursos, garantías de calidad de servicio y migración de máquinas virtuales en caliente. Los sistemas operativos deben ser modificados explícitamente para correr Xen (aunque manteniendo la compatibilidad con aplicaciones de usuario). Esto permite a Xen alcanzar virtualización de alto rendimiento sin un soporte especial de hardware pero si con su compatibilidad.

Las máquinas virtuales Xen pueden ser migradas en caliente entre equipos físicos sin pararlos. Durante este proceso, la memoria de la máquina virtual es copiada iterativamente al destino sin detener su ejecución. Una parada muy breve de alrededor de 60 a 300 ms es necesaria para realizar la sincronización final antes de que la máquina virtual comience a ejecutarse en su destino final. Una tecnología similar es utilizada para suspender las máquinas virtuales a disco y cambiar a otra máquina virtual.

Para poder implementar Xen de manera exitosa en cualquier compañía debemos facilitar los recursos necesarios y proponer un plan de pruebas eficiente para su correcta implementación.

Algunos link recomendados:

http://es.wikipedia.org/wiki/Xen
http://www.xen.org/
http://www.citrixxenserver.com/Pages/default.aspx

Saludos y Suerte !!

lunes, 11 de febrero de 2008

Configurando Jboss portal para postgresql

Hola, en la actualidad y desde hace un tiempo las empresas implementan portales para dar soluciones de escala empresarial a sus clientes, uno de los portales que mas se utilizan es jboos portal, debido a que es open source y altamente robusto.
Un portal empresarial como jboos portal cumple con varias caracteristicas que nos aseguran una buena gestión y administración de portales para nuestros clientes, las caracteristicas tecnicas mas importantes son:

En tecnología y Arquitectura:
JEMS: Se apoya el poder de JBoss Enterprise Middleware JBoss Application Server, JBoss
Cache, JGroups, y Hibernate.
• PP Agnóstico: ¿funcionan con cualquier RDBMS apoyo de Hibernate
• SSO / LDAP: Se apoya Tomcat y JBoss de inicio de sesión único (SSO) de las soluciones.
• JAAS Autenticación: Custom autenticación a través de módulos JAAS login.
• Cacheing: Utiliza emitir opinión-caché para mejorar el rendimiento.
• Clusterable: Grupo de apoyo para el portal estatal permite que se agrupen portales para todos los casos.
• Hot-Despliegue: Se apoya JBoss dinámico para despliegue automático de características.

Soporte a Estandares:
• Especificación y Portlet API 1.0 (JSR-168)
• Content Repository for Java Technology API (JSR-170)
• Java Server Faces 1.2 (JSR-252)
• Java Management Extension (JMX) 1,2
• Completo J2EE 1,4 cumplimiento cuando se utiliza con JBoss AS

Portal y Portlet Container:
• Múltiples instancias del portal: La capacidad de tener múltiples instancias en funcionamiento dentro del portal de un portal de contenedores.
• IPC ™ Interamericano de Comunicación Portlet API permite a los portlets para crear enlaces con otros objetos, como una página, portal o ventana.
• Dynamicity ™ La capacidad de los administradores y los usuarios a crear y destruir objetos, como los portlets, páginas, Portales, temas, y diseños en tiempo de ejecución.
• Internacionalización: Capacidad para utilizar la internacionalización de archivos de recursos para cada portlet.
• Pluggable servicios: autenticación realizada por el contenedor servlet y JAAS que hacen posible el intercambio de Esquemas de autenticación.
• Página basada en la arquitectura: Permite la agrupación y división de los portlets en una página por cada base.
• Marco de apoyo existentes: Portlets utilizando Struts, Spring MVC, Sun JSF-RI, AJAX, o que cuenten con el apoyo de MyFaces Portado.

Temas y Diseños:
• Fácilmente intercambiables temas / diseños: Nuevos temas y diseños que contengan imágenes se pueden desplegar en un WAR
• Flexible API: Tema y diseño de la API están diseñados para separar la capa de negocio de la capa de presentación.

Funcionalidad de usuario y de grupo:
• Registro de usuario / validación: registro de los parámetros configurables para permitir que los usuarios de correo electrónico de validación antes de su activación.
• Login: Hace uso de contenedor servlet de autenticación.
• Crear o modificar usuarios: Capacidad para que los administradores de crear/editar perfiles de usuario.
• Crear o modificar Roles: La habilidad para los administradores de crear/editar los papeles.
• Asignación de Papel: La habilidad para los administradores asignar funciones a los usuarios.

Gestión de permisos:
• Permisos ampliables con la API: Permisos basados en la definición de papeles.
• Administraión de la interfaz: Permite a las cesiones de los permisos de funciones en cualquier momento por cualquier despliegue de portlet, Página, o portal de ejemplo.

Sistema de Gestión de Contenidos (CMS):
• JCR conformes: El CMS se alimenta a través de Apache Jackrabbit, una aplicación de código abierto de Java
• PP o almacenar el apoyo del sistema de archivos: Configurable para almacenar el contenido del sistema de archivos o bien un RDBMS.
• Factores externos Blob Soporte: Contenido configurable que permite almacenar grandes nodos de referencias y propiedades al residir en una RDBMS.
• versionado de apoyo: Todo el contenido editado o creado es autoversionedo con una historia de ediciones que se pueden ver en cualquier momento.
• equipado con un editor HTML: HTML de modo WYSIWYG, la funcionalidad de vista preliminar, y HTML .

El listado anterior son las caracteristicas mas importantes de este Open-Source. ahora que ya tenemos una mejor noción de lo que es un portal de fuente abierta podremos continuar con el articulo. Por defecto jboss portal viene con una base de datos, la HSQL o Hipersonic, ahora generaremos la configuración para PostgreSQL, de esta manera se nos facilita un poco la administración de la base del portal, si es que tenemos webmin.

Entonces lo primero que haremos sera descargarnos jboos portal de la siguiente url, para este ejemplo practico, ocupo jboss portal 2.4 bundled, postgresql 8.2, linux debian y la jdk1.5.0_12:

1.- Descargamos jboss-portal-2.4.1-bundled.zip de la siguiente url:

http://labs.jboss.com/jbossportal/download/index.html

2.- Lo descomprimimos en un directorio y nos aseguramos de tener los permisos para levantar en servicio:

slack@debian:~/portals$ unzip jboss-portal-2.4.1-bundled.zip

este comando anterior descomprime el zip en el directorio donde nos encontramos, luego vamos al directorio bin de la raiz del jboss.

slack@debian:~/portals$ cd jboss-portal-2.4.1/bin/
slack@debian:~/portals/jboss-portal-2.4.1/bin$ ls -la
total 180
drwxr-xr-x 2 slack slack 4096 2006-12-20 17:26 .
drwxr-xr-x 8 slack slack 4096 2006-12-20 17:27 ..
-rw-r--r-- 1 slack slack 3539 2006-12-20 17:26 classpath.sh
-rw-r--r-- 1 slack slack 3479 2006-12-20 17:26 jboss_init_hpux.sh
-rw-r--r-- 1 slack slack 2463 2006-12-20 17:26 jboss_init_redhat.sh
-rw-r--r-- 1 slack slack 3750 2006-12-20 17:26 jboss_init_suse.sh
-rw-r--r-- 1 slack slack 535 2006-12-20 17:26 probe.bat
-rw-r--r-- 1 slack slack 918 2006-12-20 17:26 probe.sh
-rw-r--r-- 1 slack slack 3221 2006-12-20 17:26 run.bat
-rw-r--r-- 1 slack slack 1572 2006-12-20 17:26 run.conf
-rw-r--r-- 1 slack slack 38163 2006-12-20 17:26 run.jar
-rw-r--r-- 1 slack slack 4672 2006-12-20 17:26 run.sh
-rw-r--r-- 1 slack slack 1813 2006-12-20 17:26 shutdown.bat
-rw-r--r-- 1 slack slack 17296 2006-12-20 17:26 shutdown.jar
-rw-r--r-- 1 slack slack 2061 2006-12-20 17:26 shutdown.sh
-rw-r--r-- 1 slack slack 2137 2006-12-20 17:26 twiddle.bat
-rw-r--r-- 1 slack slack 47481 2006-12-20 17:26 twiddle.jar
-rw-r--r-- 1 slack slack 2414 2006-12-20 17:26 twiddle.sh
-rw-r--r-- 1 slack slack 2037 2006-12-20 17:26 wstools.bat
-rw-r--r-- 1 slack slack 2776 2006-12-20 17:26 wstools.sh

tendremos que dar permiso al run.sh para levantar el servidor jboss, con el siguiente comando:

slack@debian:~/portals/jboss-portal-2.4.1/bin$ chmod +x run.sh

IMPORTANTE: no correr run.sh hasta terminar la configuración

Ya tenemos listo jboss para arrancarlo, ahora veremos el tema de la configuración de la base de datos, aqui lo setearemos para postgresql.

Primero vamos al webmin o algún gestor de bases de datos Postgre, creamos una base de datos para el portal (jbossportal), ademas nos creamos un usuario (portaluser) y le asignamos una clave (quaker77) para esta base de datos, con permisos para crear tablas.
Una vez creada correctamente la base de datos, verificamos que podamos conectarnos, para esto podemos ocupar un database explorer de bases de datos, del mismo ide Eclipse, Netbeans, u otro, ya conectados seguimos adelante con la configuracion de los archivos de jboss para postgresql.

Tendremos que editar 2 archivos de configuración, estos son:

postgres-ds.xml
portal-postgresql-ds.xml

y la ubicación donde deben ir el el portal es:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy

Sin embargo la primera vez estos archivos no se encuentran el este directorio, ya que la configuración por default es con HSQL. si listamos los archivos vemos los archivos de configuración para HSQL

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy$ ls
bsh-deployer.xml http-invoker.sar jboss-local-jdbc.rar
jmx-console.war monitoring-service.xml uuid-key-generator.sar
cache-invalidation-service.xml jboss-aop.deployer jboss-portal.sar jmx-invoker-service.xml portal-hsqldb-ds.xml client-deployer-service.xml jboss-bean.deployer jbossweb-tomcat55.sar jsr88-service.xml properties-service.xml
ear-deployer.xml jboss-ha-local-jdbc.rar jbossws14.sar mail-ra.rar schedule-manager-service.xml ejb-deployer.xml jboss-ha-xa-jdbc.rar jboss-xa-jdbc.rar mail-service.xml scheduler-service.xml
hsqldb-ds.xml jbossjca-service.xml jms management sqlexception-service.xml

Pero como nosostros queremos levantar el portal jboss con PostgreSQL, debemos reemplazar estos archivos por los que corresponden para PostgreSQL, el archivo portal-postgresql-ds.xml, se encuantra en el directorio Setup de la raiz del jboss, vamos allá entonces y procedemos a editarlo para nuestra base de datos

slack@debian:~/portals/jboss-portal-2.4.1/setup$ nano portal-postgresql-ds.xml

esto es lo importante:



PortalDS
jdbc:postgresql:jbossportal
org.postgresql.Driver
portaluser
quaker77



Guardamos el archivo en:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy

y eliminamos el archivo que correspondia a HSQL, portal-hsqldb-ds.xml

posteriormente hacemos lo mismo para postgres-ds.xml

Este archivo se encuentra en:

slack@debian:~/portals/jboss-portal-2.4.1/docs/examples/jca$ ls
asapxcess-jb3.2-ds.xml facets-ds.xml hsqldb-encrypted-ds.xml jms-ds.xml mssql-ds.xml pointbase-xa-ds.xml sybase-ds.xml
cicsr9s-ds.xml fastobjects-jboss32-ds.xml informix-ds.xml jsql-ds.xml mssql-xa-ds.xml postgres-ds.xml
db2-400-ds.xml firebird-ds.xml informix-xa-ds.xml lido-versant-service.xml mysql-ds.xml progress-ds.xml
db2-ds.xml generic-ds.xml jboss-ha-local-jdbc.rar mimer-ds.xml oracle-ds.xml sapdb-ds.xml
db2-xa-ds.xml hajndi-jms-ds.xml jboss-ha-xa-jdbc.rar mimer-xa-ds.xml oracle-xa-ds.xml sapr3-ds.xml
derby-ds.xml hsqldb-ds.xml jdatastore-ds.xml msaccess-ds.xml pointbase-ds.xml solid-ds.xml

Procedemos a editarlo de la misma manera:

slack@debian:~/portals/jboss-portal-2.4.1/docs/examples/jca$ nano postgres-ds.xml

de dejamos como se ve:



PostgresDS
jdbc:postgresql://[servername]:[port]/[database name]
org.postgresql.Driver
portaluser
quaker77

select 1


select 1







Lo guardamos y copiamos al directorio:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy

y eliminamos el archivo que correspondia a HSQL, hsqldb-ds.xml


Ahora buscamos el driver para conectarnos a postgre, yo tengo, postgresql-jdbc3-8.1-405.jar

lo copiamos a:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/lib$ ls
activation.jar commons-collections.jar jboss-backport-concurrent.jar jboss-management.jar jbosssx.jar postgresql-jdbc3-8.1-405.jar
antlr-2.7.6.jar commons-httpclient.jar jboss-common-jdbc-wrapper.jar jboss-monitoring.jar jboss-transaction.jar properties-plugin.jar
autonumber-plugin.jar commons-logging.jar jboss-hibernate.jar jbossmq.jar jmx-adaptor-plugin.jar scheduler-plugin-example.jar
bcel.jar hibernate3.jar jboss-j2ee.jar jboss-remoting-int.jar jnpserver.jar scheduler-plugin.jar
bindingservice-plugin.jar hsqldb.jar jboss.jar jboss-remoting.jar jpl-pattern.jar snmp-support.jar
bsf.jar hsqldb-plugin.jar jboss-jaxrpc.jar jbossretro-rt.jar jpl-util.jar wsdl4j.jar
bsh-1.3.0.jar javassist.jar jboss-jca.jar jboss-saaj.jar log4j.jar xmlentitymgr.jar
bsh-deployer.jar javax.servlet.jar jboss-jsr77.jar jboss-serialization.jar mail.jar
cglib.jar javax.servlet.jsp.jar jboss-jsr88.jar jboss-srp.jar mail-plugin.jar

Una vez todo listo, vemos la configuración que se despliega cuando arrancamos el portal:

slack@debian:~/portals/jboss-portal-2.4.1/bin$ ./run.sh

=========================================================================

JBoss Bootstrap Environment

JBOSS_HOME: /home/slack/portals/jboss-portal-2.4.1

JAVA: /usr/lib/jvm/jdk1.5.0_12/bin/java

JAVA_OPTS: -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dprogram.name=run.sh

CLASSPATH: /home/slack/portals/jboss-portal-2.4.1/bin/run.jar:/usr/lib/jvm/jdk1.5.0_12/lib/tools.jar

=========================================================================

13:56:48,594 INFO [Server] Starting JBoss (MX MicroKernel)...
13:56:48,595 INFO [Server] Release ID: JBoss [Zion] 4.0.4.GA (build: CVSTag=JBoss_4_0_4_GA date=200605151000)
13:56:48,597 INFO [Server] Home Dir: /home/slack/portals/jboss-portal-2.4.1
13:56:48,597 INFO [Server] Home URL: file:/home/slack/portals/jboss-portal-2.4.1/
13:56:48,598 INFO [Server] Patch URL: null
13:56:48,598 INFO [Server] Server Name: default
13:56:48,598 INFO [Server] Server Home Dir: /home/slack/portals/jboss-portal-2.4.1/server/default
13:56:48,598 INFO [Server] Server Home URL: file:/home/slack/portals/jboss-portal-2.4.1/server/default/
13:56:48,598 INFO [Server] Server Log Dir: /home/slack/portals/jboss-portal-2.4.1/server/default/log
13:56:48,599 INFO [Server] Server Temp Dir: /home/slack/portals/jboss-portal-2.4.1/server/default/tmp
13:56:48,599 INFO [Server] Root Deployment Filename: jboss-service.xml
13:56:48,908 INFO [ServerInfo] Java version: 1.5.0_12,Sun Microsystems Inc.
13:56:48,908 INFO [ServerInfo] Java VM: Java HotSpot(TM) Server VM 1.5.0_12-b04,Sun Microsystems Inc.
13:56:48,909 INFO [ServerInfo] OS-System: Linux 2.6.18-5-686,i386
13:56:49,368 INFO [Server] Core system initialized
.
.
.
.
.
13:57:39,104 INFO [Dialect] Using dialect: org.hibernate.dialect.PostgreSQLDialect
13:57:44,420 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS' to J NDI name 'java:PostgresDS'
13:57:44,747 INFO [Http11BaseProtocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080
13:57:44,839 INFO [ChannelSocket] JK: ajp13 listening on /0.0.0.0:8009
13:57:44,849 INFO [JkMain] Jk running ID=0 time=0/38 config=null
13:57:44,860 INFO [Server] JBoss (MX MicroKernel) [4.0.4.GA (build: CVSTag=JBoss_4_0_4_GA date=200605151000)] Started in 56s:259ms

Vemos que en algunas lineas del log en el arranque esta configurada la nueva conexión de base de datos para el portal jboss, para confirmar esto abrimos el browser y efectuamos el inicio de sesion:

http://localhost:8080/portal/auth/portal/default/Admin

OJO: por defecto jboss ocupa el puerto 8080, sin embargo a veces ocupamos ese mismo puerto para tomcat, lo podemos solucionar editando el archivo server.xml que se encuentra en:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy/jbossweb-tomcat55.sar$ ls
catalina.jar commons-el.jar context.xml jasper-runtime.jar naming-resources.jar servlets-default.jar tomcat55-service.jar tomcat-coyote.jar
catalina-manager.jar commons-modeler.jar jasper-compiler.jar jsf-libs ROOT.war servlets-invoker.jar tomcat-ajp.jar tomcat-http.jar
catalina-optional.jar conf jasper-compiler-jdt.jar META-INF server.xml servlets-webdav.jar tomcat-apr.jar tomcat-util.jar

modificando el puerto 8080 al 8082 por ejemplo.

bueno, ingresamos entonces al portal como admin admin, y creamos un usuario, quaker por ejemplo. luego vamos al webmin o hacemos una query a la tabla jbp_users y vemos que tenemos este usuario en esa tabla en nuestro PostgreSQL.

Saludos y suerte !!






viernes, 25 de enero de 2008

FSTAB

Hola, una de las grandes ventajas de Linux es la posibilidad de utilizar distintos tipos de sistemas de ficheros, desde los variados sistemas de Linux ( desde Ext2 a Ext3 paasndo por ReiserFS y XFS ), los sistemas de ficheros de red ( NFS o SMB ), los de Windows ( Vfat o NTFS ) e incluso los de otros tipos de Unix como por ejemplo el sistema UFS de los BSD.

Para poder trabajar con estos sistemas de ficheros es necesario tener el núcleo del sistemas preparado para ello, ya sea integrando estos sistemas de ficheros en el kernel o agregándolos como módulos.

Montar estos sistemas de ficheros puede ser algo tedioso, no es muy agradable tener que teclear mount y sus opciones cada vez que necesitamos montar un sistema, especialmente si es un sistema que utilizaremos con frecuencia. Es por ello que nos viene muy bien conocer fstab.

Fstab es un fichero que está alojado en el directorio /etc y que posee las configuraciones de los distintos sistemas de ficheros de nuestro sistema operativo, así como el lugar donde se montan y las opciones que se aplican a ellos. Configurar /etc/fstab es necesario para tener un acceso rapido a nuestros datos de Windows, así como para que dicha partición se monte automáticamente al iniciar nuestro Linux. Este artículo se dedicará a explicarnos cual es la estructura de dicho fichero y como configurarlo a nuestro gusto.

Antes que nada veremos mi /etc/fstab y explicaré una por una las columnas, su significado y su uso, para visualizarlo simplemente ejecutamos cat /etc/fstab en consola:

debian:/home/slack# cat /etc/fstab
# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
/dev/sda2 /mnt ext3 defaults,errors=remount-ro 0 1
/dev/sda3 none swap sw 0 0
/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0


La siguiente es la salida de ejecución del mismo comando anterior, pero con mas opciones para la esta explicación:

/dev/hda7 swap swap defaults 0 0
/dev/hda5 / ext3 defaults 1 1
/dev/hda2 /mnt/windows ntfs umask=0 0 0
/dev/hda6 /mnt/datos vfat user,umask=0 0 0
/dev/hdd /mnt/cdrom iso9660 noauto,user 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,umask=0,user 0 0
devpts /dev/pts devpts gid=5 0 0
proc /proc proc defaults 0 0
/dev/sda1 /mnt/usb vfat noauto,rw,umask=0,user,sync 0 0
none /sys sysfs defaults 0 0
/dev/hda3 /mnt/freebsd ufs umask=0,user,noauto 0 0
/dev/hda8 /boot ext3 defaults 1 1

Como puede apreciarse cada linea consiste en un sistema de ficheros configurado mediante 6 columnas, procedo ahora a realizar una descripción de cada una de las columnas:

Primer campo

Es el dispositivo o sistema de ficheros que se montará, normalmente sera un fichero ( en Linux todo es un fichero ) del directorio /dev. Con hda se denota el disco duro maestro IDE seguido de un número que indica el número de partición de dicho disco duro.
Para lso dispositivos USB suele usarse sda, tal como puede apreciarse en la linea 9 de mi fstab.
Hay que destacar que devpts y none se utilizan para los sistemas de ficheros que usa internamente Linux.

Segundo campo

Es el directorio en el cual se montará el sistema del primer campo. Hay que destacar que si no hemos creado ese directorio fallará el montaje de dicho sistema.

Tercer campo

Indica el tipo de sistema de ficheros. Como indicaba al principio del documento el núcleo de Linux admite multitud de sistemas de ficheros, tanto para el propio uso e instalación de nuestro sistema operativo como para sistemas auxiliares ( particiones vfat ) o sistemas de ficheros de red.
Muestro aquí una pequeña tabla con ejemplos de algunos de ellos:

EXT2 Sistema de ficheros sin registro para Linux
EXT3 Sistema de ficheros con registro para Linux
VFAT Sistema de Windows ( versión 95, 98 )
NTFS Sistema de Windows ( versión NT, 2000, XP )
NFS Sistema distribuido de Sun
ISO9660 Sistema estándar para CD-ROM
JFS Sistema de ficheros con registro de IBM
REISERFS Sistema de ficheros con registro para Linux
SWAP Espacio de intercambio para Linux
XFS Sistema de ficheros con registro de Silicon Graphics
UFS Sistema de ficheros de los Unix BSD

Los sistemas de ficheros que tiene compilado el núcleo pueden verse en el fichero /proc/filesystems.

Cuarto campo

Son opciones que se aplican a los sistemas de ficheros, haremos un recorrido por ellas por orden alfabético.

Async.
Las escrituras se hacen asíncronamente
Auto. Se monta automáticamente, o con el comando mount -a.
Defaults. Esta opción reune las siguientes: async, auto, dev, exec, nouser, rw y suid.
Dev. Significa que el dispositivo es local al sistema.
Exec. Permite la ejecución de programas.
Gid. Establece el identificador de grupo del sistema de ficheros al identificador numérico del grupo.
Noauto. No se monta automáticamente. Ideal para medios extraibles.
Nouser. El sistema de ficheros solo puede ser montado por el administrador del sistema.
Owner. El dueño del sistema de ficheros se fija al usuario que lo monta.
Ro. Modo solo lectura ( read-only ).
Rw. Modo lectura escritura ( read-write ).
Suid. Permite que se ejecuten los bits setuid, no se debe aplicar a sistemas que no administremos nosotros mismos, ya que es un riesgo potencial de intrusiones al sistema.
Sync. Las escrituras se hacen síncronamente.
Uid. Establece el identificador de usuario del sistema de ficheros montado.
Umask. Establece una máscara. Esto es util para que a este sistema pueda acceder un usuario que no tenga privilegios, por ejemplo para montar un sistema y que puedan acceder a él todos los usuarios ponemos umask=0.

Quinto campo

Puede tener valor 0 o 1. Si vale 1 el programa de copias de seguridad del sistema Dump guarda el sistema de ficheros.

Sexto campo


Lo utiliza el inspector de consistencia. Si vale 1 se comprueba la consistencia del sistema de ficheros al reiniciar el sistema operativo. Si vale 0 fsck no comprueba el sistema de ficheros.

Saludos y suerte !!

Escaneo de Servidores Web

Hola, una buena forma de asegurar un servidor web es probar a romper su seguridad. Para ello es vital utilizar una herramienta que permita sacar la mayor cantidad posible de información sobre un sitio web, una es Nikto, poco conocido pero eficiente.

Nikto es una potente aplicación que buscará la existencia de ficheros en el servidor y de posibles vulnerabilidades del mismo. La información que genera es enorme, luego ya es trabajo nuestro sacar la paja y quedarnos con lo importante.

Vamos a ver un ejemplo práctico, ejecutamos en cosola "nikto -h google.cl" y observamos la salida, que he recortado para ver solo unas cuantas lineas:

debian:/home/slack# nikto -h google.cl
---------------------------------------------------------------------------
- Nikto 1.35/1.35 - www.cirt.net
+ Target IP: 216.239.59.104
+ Target Hostname: google.cl
+ Target Port: 80
+ Start Time: Fri Jan 25 14:13:19 2008
---------------------------------------------------------------------------
- Scan is dependent on "Server" string which can be faked, use -g to override
+ Server: gws
+ Server does not respond with '404' for error messages (uses '301').
+ This may increase false-positives.
+ Not found files redirect to: http://www.google.cl/Nikto-1.35-QEstv6apsGao.htm
+ The root file (/) redirects to: http://www.google.cl/
+ All CGI directories 'found', use '-C none' to test none
+ / - Redirects to http://www.google.cl/ , Default Jrun 2 server running.
+ / - Redirects to http://www.google.cl/ , Cisco VoIP Phone deafult web server found.
+ / - Redirects to http://www.google.cl/ , Default Sybase Jaguar CTS server running.
+ / - Redirects to http://www.google.cl/ , Default Jrun 3 server running.
+ / - Redirects to http://www.google.cl/ , Default Lantronix printer found.
+ / - Redirects to http://www.google.cl/ , Default IBM Tivoli Server Administration server is running.
+ / - Redirects to http://www.google.cl/ , Default Jrun 4 server running.
+ / - Redirects to http://www.google.cl/ , Default Xerox WorkCentre server is running.
+ /admin/config.php - Redirects to http://www.google.cl/admin/config.php , PHP Config file may contain database IDs and passwords.
+ /adm/config.php - Redirects to http://www.google.cl/adm/config.php , PHP Config file may contain database IDs and passwords.
+ 20.access - Redirects to http://www.google.cl/ , Contains authorization information
+ 20.cobalt - Redirects to http://www.google.cl/ , May allow remote admin of CGI scripts.
+ 20.htaccess.old - Redirects to http://www.google.cl/ , Backup/Old copy of .htaccess - Contains authorization information
+ 20.htaccess.save - Redirects to http://www.google.cl/ , Backup/Old copy of .htaccess - Contains authorization information
+ 20.htaccess - Redirects to http://www.google.cl/ , Contains authorization information
+ 20.htaccess~ - Redirects to http://www.google.cl/ , Backup/Old copy of .htaccess - Contains authorization information
+ 20.htpasswd - Redirects to http://www.google.cl/ , Contains authorization information
+ 20.namazu.cgi - Redirects to http://www.google.cl/ , Namazu search engine found. Vulnerable to CSS attacks (fixed 2001-11-25). Attacker could write arbitrary files outside docroot (fixed 2000-01-26). CA-2000-02.
+ 20.passwd - Redirects to http://www.google.cl/ , Contains authorization information
+ 20 - Redirects to http://www.google.cl/ , Directory indexing of CGI directory should be disabled.
+ 20addbanner.cgi - Redirects to http://www.google.cl/ , This CGI may allow attackers to read any file on the system.

+ Over 20 "Moved" messages, this may be a by-product of the
+ server answering all requests with a "302" or "301" Moved message. You should
+ manually verify your results.

Es probable que en algunas distribuciones basadas en Slackware como Zenwalk o VectorLinux este paquete no funcione, para debian no existe problema, si al ingresar el comando anterior la consola nos responde con un command not found, tendremos que verificar si tenemos acceso a instalar este programa:

debian:/home/slack# nikto -h google.cl
bash: nikto: command not found

verificamos si tenemos acceso a instalar el programa desde nuestro repositorio:

debian:/home/slack# apt-cache search nikto
nikto - web server security scanner

y lo instalamos:

debian:/home/slack/programas/jboss-portal-2.4.1# apt-get install nikto
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Se instalarán los siguientes paquetes extras:
libwhisker-perl
Se instalarán los siguientes paquetes NUEVOS:
libwhisker-perl nikto
0 actualizados, 2 se instalarán, 0 para eliminar y 7 no actualizados.
Necesito descargar 249kB de archivos.
Se utilizarán 1167kB de espacio de disco adicional después de desempaquetar.
¿Desea continuar [S/n]? S
Des:1 http://debian.ubiobio.cl etch/main libwhisker-perl 1.8-1 [79,5kB]
Des:2 http://debian.ubiobio.cl etch/main nikto 1.35-1.1 [170kB]
Descargados 249kB en 11s (21,6kB/s)
Seleccionando el paquete libwhisker-perl previamente no seleccionado.
(Leyendo la base de datos ...
141813 ficheros y directorios instalados actualmente.)
Desempaquetando libwhisker-perl (de .../libwhisker-perl_1.8-1_all.deb) ...
Seleccionando el paquete nikto previamente no seleccionado.
Desempaquetando nikto (de .../nikto_1.35-1.1_all.deb) ...
Configurando libwhisker-perl (1.8-1) ...
Configurando nikto (1.35-1.1) ...

Ya instalado podemos ejecutar el escaneador apuntando a una url...

Saludos y suerte !!

martes, 18 de diciembre de 2007

Usabilidad en la Web

Hola, muchas veces cuando desarrollamos aplicaciones web, contamos con un diseñador grafico que diseñe nuestras páginas web, estilos, etc.. y nosotros solo nos encargamos del desarrollo de las demas capas(MVC, dao, etc.), sin embargo tambien a veces nos toca desarrollar el diseño de las páginas, en dreamweaver, bluefish (en linux), html, jsp o lo que sea...
Aqui tocamos un tema sumamente importante en el desarrollo de aplicaciones web, el cual nos permite que nuestras paginas sean faciles de navegar y al mismo tiempo intuitivas para los usuarios, esto se denomina Usabilidad en la web e interfaz en internet.
La usabilidad son técnicas que ayudan a los seres humanos a realizar tareas en entornos graficos de ordenador, en nuestro caso, páginas web.
Siempre en la construcción y definición de la navegación de un sitio web tenemos que recordar que el usuario debe encontrar lo que busca de manera facil y rapida, incluso los parametros que a veces visualizamos en la barra inferior del browser nos ayudan a entender la navegación de un sitio web, existen algunas reglas para una buena usabilidad en nuestros sitios, estan son:

1.- En internet es el usuario el que manda, por lo tanto debemos tener en cuenta una excelente y facil navegacion para el, esto se consigue con una buena deficinición de navegación del sitio, un buen analisis y sobre todo conocer el negocio y pensar como usuario.

2.- En internet la calidad se basa en la rapidez y fiabilidad del sitio, se toma en cuanta más que la pagina sea rapida que bonita, fiable que moderna, sencilla que compleja y sobre todo directa.

3.- Seguridad, si en el mundo real a veces desconfiamos de algunas cosas, imaginate como se siente la gente al ingresar por la web de su banco. Debemos procurar que toda la navegación y sitio funcionen como reloj para que de esta forma los usuarios puedan confiar en el.

4.- La confianza es algo que cuesta ganar y se pierde con un mal enlace, esto quiere decir que tal y como esta la competencia en internet, no puedes perder ni un solo visitante por tener un enlace mal hecho. Es mejor salir con algo sencillo e irlo complicando poco a poco (buscar en la web extreme programing y metodologias agiles), que salir con todo y ver que es lo que pasa. Versiones 1.0 son buenas mientras lo que este puesto este bien y genere confianza. Poco a poco y con el feedback de los usuarios, podras ir complicando la pagina y sistema. Pero asegura antes de arriesgar.

5.- Simplifica, reduce, optimiza, la gente no se va a aprender tu sitio por mucho que insistas, asi que por lo menos hazlo sencillo, reutiliza todos los elementos que puedas, para que de este modo los usuarios se sientan comodos y no se pierdan cada vez que necesiten encontrar algo.

6.- Pon las conclusiones al principio, el usuario se sentira mas comodo si ve las metas al principio. De esta forma no tendra que buscar lo que necesita y perdera menos tiempo en completar su tarea. Si completa su tarea en menos tiempo se sentira comodo y quizas se dedique a explorar el sitio o quizas se lo recomiende a un amigo.

7. No hagas perder el tiempo a la gente con cosas que no necesitan, cuidado con cruzar promociones, si lo haces por lo menos hazlo con cuidado. Procura que la selección de productos a cruzar sea consecuente y no lo quieras "vender todo" en todas las paginas. Cuando el usuario avance en su navegación debes dejarle mas espacio libre. Puede ocurrir que cuando este punto de comprar algo vea una oferta que le distraiga y se pierda esa venta.

8. Buenos contenidos, escribir bien para internet es todo un arte. Pero siguiendo las reglas basicas de poner las conclusiones al principio y escribir como un 25% de lo que pondrias en un papel, se puede llegar muy lejos. Leer en pantalla cuesta mucho, por lo que, en el caso de textos para internet, reduce y simplifica todo lo que puedas.

Recuerda siempre que lo facil y simple es la mejor manera de poder satisfacer a los usuarios en la web. Otros puntos importantes para revisar son:

Ubicuidad, Visibilidad, Contenido, Estética, Fidelidad.

Esto es parte de la experiencia que tengo desarrollando web.

Dejo este enlace para seguir investigando:

http://www.dcc.uchile.cl/~rbaeza/inf/reglasweb.html

Saludos y suerte !!