1 Apache TomCat 6.0.32 Documentación Servidor Apache TomCat ÍNDICE 1. Introducción....................................................................................................................... 3 2. Componentes básicos del Servidor Apache Tomcat ............................................. 3 3. Instalación y distribución del Servidor Apache Tomcat 6.0.X ............................. 3 4. Etapas genéricas de instalación de Apache Tomcat .............................................. 4 a- Caso de Instalación en Windows:............................................................................ 4 b- Caso de Instalación en Linux .................................................................................... 5 5. Términos utilizados en Apache Tomcat ..................................................................... 5 6. Iniciar y Detener el Servidor Apache Tomcat ........................................................... 6 7. Componente Servidor de Apache Tomcat................................................................. 8 8. Componente Servicio de Apache Tomcat ................................................................. 9 9. Componente Ejecutor ..................................................................................................... 9 10. Componente conector HTTP ..................................................................................... 9 11. Componente Conector AJP ..................................................................................... 10 12. Contenedores .............................................................................................................. 10 13. Aspectos de las Aplicaciones Web a desplegar en el servidor ..................... 12 a) Archivos de Librerías Compartidas....................................................................... 12 b) Descriptor de contexto de Tomcat ........................................................................ 13 c) Jerarquía de código fuente de la aplicación ....................................................... 13 d) Archivo de configuración BUILD.XML .................................................................. 14 14. Directorio de instalación de Apache Tomcat ...................................................... 14 Directorio /bin ........................................................................................................................ 14 Directorio /conf ...................................................................................................................... 15 2 Apache TomCat 6.0.32 Directorio /lib ......................................................................................................................... 16 Directorio /logs ...................................................................................................................... 16 Directorio /temp..................................................................................................................... 17 Directorio /webapps ............................................................................................................. 17 Directorio /works ................................................................................................................... 17 15. Manejo de la Seguridad en Apache TomCat ....................................................... 18 16. Políticas de Seguridad en Apache Tomcat ......................................................... 19 17. Protección de Paquetes en Apache Tomcat ....................................................... 19 18. Iniciar Apache Tomcat con SecurityManager ..................................................... 20 19. Problemas Comunes que pueden presentarse .................................................. 20 3 Apache TomCat 6.0.32 1. Introducción Apache Tomcat es un servidor de aplicaciones escrito totalmente en Java, multiplataforma y que se distribuye gratuitamente desde su sitio oficial http://apache.tomcat.com. El mismo permite albergar aplicaciones de tipo web Java y sus servicios web asociados de modo tal que los mismos puedan ser consumidos desde cualquier ubicación física, sea en forma local (localhost1) o en forma remota mediante la dirección IP del mismo. Es una aplicación que lo que hace es permitir que una estación de trabajo se pueda transformar en un servidor. También posee extensiones o plugins que permiten incrementar su funcionalidad. Por mencionar, se tiene los plugins Apache Ant2 y Apache Maven3. El mismo fue desarrollado por ASF (Apache Software Foundation), y brinda soporte a las especificaciones de JSP (Java Server Pages) y al uso de Servlets (programas Java que pueden ser ejecutados en el servidor) y posee una interface de comunicación mediante el protocolo HTTP. Además, se trata de un servidor de carácter libre (Open Source), que dispone de una configuración muy simple, mediante el uso de archivos XML. 2. Componentes básicos del Servidor Apache Tomcat Los componentes principales del servidor web son tres: Catalina: se trata del contenedor de Servlets del servidor. Implementa las especificaciones de JSP y Servlets de Java actuales, utilizando una base de datos donde almacena información sobre usuarios, contraseñas y roles. Coyote: es un conector que permite que el servidor envíe peticiones TCP mediante el uso del protocolo HTTP. Jasper: es el motor que maneja páginas JSP y realiza el mapeo de archivos JSP a código Java en Servlets. 3. Instalación y distribución del Servidor Apache Tomcat 6.0.X El servidor de aplicaciones viene distribuido como un archivo comprimido .ZIP (para el caso de Windows) o como un archivo comprimido .tar.gz (para Linux). Dicho instalador se lo descarga desde el sitio oficial de Apache. 1 Localhost: nombre que se asigna a la dirección IP de montaje local del servidor. Apache Ant: es un plugin para el servidor web Apache que permite generar scripts de configuración para los distintos recursos de las aplicaciones desarrolladas. 3 Apache Maven: es un plugin para el servidor web Apache que permite gestionar los entregables y el empaquetamiento de los componentes de las aplicaciones web, siguiendo un patrón de diseño. 2 Apache TomCat 6.0.32 4 4. Etapas genéricas de instalación de Apache Tomcat 1. 2. 3. 4. Se debe instalar el JDK, que en este caso debe respetar la versión Java 1.6. Descargar del sitio web e instalar el aplicativo Apache Tomcat. Descargar e instalar Apache Ant. Descargar e instalar CVS (Sistema de Versiones Concurrentes) a- Caso de Instalación en Windows: En este caso el servidor de Aplicaciones se debe instalar como un servicio de Windows. Dicho servicio podrá ser iniciado en forma manual o automática. Para ello, se hace uso de la herramienta de administración de servicios de Windows. Lo que hay que tener en cuenta en este caso, es que la versión a instalar del servidor cumpla con la arquitectura del procesador del equipo donde se vaya a instalar, X86 (Arquitectura de Procesadores de 32 bits, primera generación) o X64 (Arquitectura de Procesadores de 64 bits, segunda generación). También existe una distribución de dicho servidor provista por Bitnami (http://bitnami.org/) denominada Apache TomcatStack, la cual posee integrados varios componentes que facilitarían efectuar el desarrollo de aplicaciones Java web y subirla al servidor, incluyendo entre las mismas al motor de base de datos mysql y una interface gráfica escrita en PHP denominada phpmyadmin. Por otra parte también existen herramientas integradas similares a la anterior para el alojamiento de sitios web, tanto para plataformas Windows y Linux denominadas WAMP (abreviatura de Windows, Apache, MySQL y PHP) o XAMP para el caso de Linux. Esta herramienta es un framework que trae integrados el servidor de aplicaciones Apache Tomcat, el sistema gestor de base de datos MySQL y el intérprete de scripting PHP, ambos configurados y conectados al servidor web Apache Apache TomCat 6.0.32 5 de modo que los desarrolladores podrán programar aplicaciones web escritas en PHP y subirlas al servidor para su propia corrida. b- Caso de Instalación en Linux En el caso de sistemas de tipo Linux, el servidor también se instalará como un servicio. Para poder llevar a cabo la instalación en este sistema operativo, previamente se debe haber seteado la variable de entorno JAVA_HOME para que su Path apunte al directorio donde se encuentra instalado el JDK de Java. Una vez seteada dicha variable, se debe ejecutar el script de consola para Linux que se haya descargado desde el sitio. Para ello, en el directorio de instalación de Linux, se debe descomprimir el contenido del fichero empaquetado que contiene al servidor, y desde la terminal (es la consola de Linux), se debe configurar a Apache para que se ejecute como un servicio. Ello es llevado a cabo mediante los siguientes comandos de consola de Linux: cd $CATALINA_HOME/bin tar xvfz commons-daemon-native.tar.gz cd commons-daemon-1.0.x-native-src/unix ./configure make cp jsvc ../.. cd ../.. Luego se debe ingresar los siguientes comandos para terminar la configuración: cd $CATALINA_HOME ./bin/jsvc -cp ./bin/bootstrap.jar \ -outfile ./logs/catalina.out -errfile ./logs/catalina.err \ org.apache.catalina.startup.Bootstrap El archivo $CATALINA_HOME/bin/commons-daemon-1.0.x-native- src/unix/native/Tomcat5.sh es el que permite que el servidor se inicie automáticamente cuando se inicia el sistema operativo Linux, y debe hacerse referencia al mismo dentro del archivo de configuración del sistema localizado en el directorio /etc/init.d. 5. Términos utilizados en Apache Tomcat Servidor: hace referencia al contenedor que posee el servidor de aplicaciones, y es el lugar donde se alojan los sistemas web. Servicio: es un componente intermediario que vive dentro de un servidor e interactúa con un engine mediante conectores. Engine: representa el procesamiento en paralelo de un servicio específico. Como un servicio podría tener varios conectores, recibe y procesa todas las solicitudes desde dichos conectores, devolviendo la respuesta al conector por medio del cual se conecta con el cliente. Host: es una asociación entre un nombre de dirección de red, por ejemplo www.compañia.com al servidor Tomcat. Un engine podría tener múltiples hosts y el elemento host también soporta alias de redes. 6 Apache TomCat 6.0.32 Connector: maneja la configuración con el cliente. Hay varios conectores disponibles para Apache Tomcat. Se incluyen entre ellos, al conector HTTP, el conector AJP4 y también el HTTPD. Contexto: representa una aplicación web. Un host puede tener múltiples contextos, cada uno con un único Path. La interface del contexto podría ser implementada para crear contextos personalizados. 6. Iniciar y Detener el Servidor Apache Tomcat Para iniciar y detener el servidor existen dos archivos de suma importancia, los mismos son: $CATALINA_HOME/bin/startup - para iniciar o arrancar el servidor $CATALINA_HOME/bin/shutdown - para parar o detener el servidor Al iniciar el servidor se solicitará el ingreso del nombre de usuario y contraseña que haya sido configurado durante la instalación del mismo que por defecto es tomcat, tomcat. En todo caso el archivo /conf/tomcat-users.xml posee dicha información. Luego, desde el navegador web se puede acceder a la capa de front-end del servidor, que es la interface web desde donde puede accederse al mismo. Para ingresar al mismo hay que poner la url: http://localhost:8080 donde el puerto por defecto es 8080, salvo que se haya definido otro durante el proceso de instalación. Dicha información puede visualizarse en el archivo /conf/server.xml. La interface web que se abrirá tendrá la forma de: 4 AJP (Apache JServ Protocol): es un protocolo binario que permite enviar solicitudes desde un servidor web a un servidor de aplicaciones que corre detrás del servidor web. 7 Apache TomCat 6.0.32 En donde la opción Tomcat Manager es donde se puede acceder a las aplicaciones web desplegadas en el servidor. Para acceder a dicha función se debe ingresar nombre de usuario y contraseña. Donde para cada aplicación desplegada se puede observar su estado, si se encuentra en ejecución o no, la cantidad de sesiones, su contexto, nombre y también se dispone de comandos para iniciar/detener/replegar/dar de baja la aplicación en el servidor. 8 Apache TomCat 6.0.32 7. Componente Servidor de Apache Tomcat El componente servidor de Apache corresponde al contenedor de Servlets llamado Catalina. Su configuración se encuentra en el archivo /conf/server.xml. Este archivo de configuración tiene asociados varios atributos, cuyos valores determinan características de configuración respecto al despliegue del servidor. Entre la información que se muestra en dicho fichero se tiene: Información sobre las clases que se cargan. Recursos utilizados en el servidor. Características de conexión. En este tag de XML se visualiza información referente al puerto de despliegue del servidor. En este caso es el puerto 8088. Si en el equipo se tienen instaladas varias instancias del servidor Apache, para cada una se debe configurar un puerto diferente. Información sobre el host donde reside el servidor. Por otra parte, en el archivo tomcat-users.xml se muestra información referente a los datos del usuario administrador del servidor, específicamente su nombre de usuario y contraseña. Apache TomCat 6.0.32 9 En este caso el nombre de usuario y la contraseña del servidor es Tomcat. Todas las implementaciones del servidor Apache comparten los siguientes atributos en común: CLASSNAME: es el nombre de la implementación de la clase Java que se va a usar, debe implementar la interface org.apache.catalina.Server. Si no se especifica nada, entonces se va a utilizar la implementación estándar. PORT: es el puerto donde se va a escuchar el comando shutdown por TCP/IP. SHUTDOWN: es el comando que el servidor va a recibir por TCP/IP que le indica que se debe apagar el servidor. El servidor puede ser iniciado de tres maneras: Desde la línea de comandos mediante la ejecución de los scripts anteriormente mencionados. Desde una aplicación Java. En forma automática, como servicio de Windows. 8. Componente Servicio de Apache Tomcat Este componente representa la combinación de varios conectores que vinculan las engines para procesar solicitudes. Los servicios residen dentro del elemento Servidor. Sus atributos asociados son classname, que cumple la misma función que en el componente servidor y name, que especifica el nombre a mostrar del servicio. 9. Componente Ejecutor Un ejecutor establece un pool thread que puede ser compartido entre varios componentes en Tomcat. Historicamente ha habido un thread pool por cada conexión creado, pero el desarrollador puede crear el suyo propio. El ejecutor implementa la interface org.apache.catalina.Executor. Es un elemento cercano a los servicios. 10. Componente conector HTTP Este componente soporta el protocolo HTTP y habilita a Catalina para que funcione como un servidor web y le dota de habilidades para ejecutar los Servlets y páginas Apache TomCat 6.0.32 10 JSP. Una instancia particular de ese componente lo que hace es escuchar por un cierto puerto TCP por peticiones para el servidor. Los conectores se pueden configurar como una parte de un simple servicio, cada uno respondiendo a un engine asociado para procesar y generar la respuesta. Este conector brinda soporte al manejo de proxyes5 de red y al uso del protocolo de transferencia segura SSL6. 11. Componente Conector AJP Este elemento representa un componente conector que se comunica con un conector web mediante el protocolo AJP. Es usado para aquellos casos donde se desee tener una integración invisible integrando a Tomcat 6 con alguna instalación de Apache y poder manejar el contexto estático en la aplicación web soportando el procesamiento SSL. 12. Contenedores Dentro de Apache Tomcat se cuenta con varios contendores de elementos para el mismo: Contexto Engine Host Cluster Contexto: antes de hablar del elemento contexto, se debe hacer referencia a una variable utilizada por el mismo denominada $CATALINA_BASE. Dicha variable contiene el directorio base a través del cual se pueden resolver la mayoría de los paths del sistema. Si Apache Tomcat no está configurado para múltiples instancias, entonces el directorio CATALINA_BASE va a tener el valor de $CATALINA_HOME, que almacena el directorio de instalación de Tomcat 6. El Contexto representa a una aplicación web, la cual funciona con un host virtual particular. Cada aplicación web esta empaquetada en un archivo WAR, que es el formato de fichero empaquetado definido de acuerdo a la especificación Servlet del sistema. La aplicación web usada para procesar cada solicitud HTTP es seleccionada mediante Catalina, basándose en la longitud más larga posible del prefijo de la URL a través del path del contexto definido. Luego esa solicitud se la envía a un servlet que mapea y resuelve la solicitud correspondiente. El contexto de una aplicación web en particular está definida en el archivo ubicado, dentro del directorio del proyecto /WEBINF/web.xml. 5 Proxy de red: es un programa de red que se comunica con otro programa para establecer la conexión de red. Se usa para gestionar el acceso a una red determinada. 6 SSL (Secure Socket Layer): es un protocolo de red que permite efectuar la transferencia mediante sockets que encriptan la transmisión. Se utilizan en los clientes de correo electrónico para proteger la información del usuario, en este caso la contraseña. 11 Apache TomCat 6.0.32 Cada contexto que se defina para la aplicación debe tener una ruta única, ya que es el punto de acceso a la misma desde el servidor web. Engine Representa el proceso completo de procesamiento de solicitudes de máquina asociados con un servicio Catalina en particular. Recibe y procesa todas las solicitudes desde uno o más conectores y devuelve la respuesta completa al conector con el que se comunica con el cliente. Todo engine trabaja con un elemento servicio, seguido de aquellos conectores asociados con el servicio. Host El componente host representa a un host virtual, que es una asociación entre un nombre de red para el servidor, como ser www.compañia.com y el servidor particular Catalina donde se encuentra corriendo. Dicho nombre debe ser registrado en el DNS (Servicio de Nombres de Domino) que administra el dominio de internet al cual el equipo se encuentra conectado. También se pueden usar alias de nombre para asociar un mismo dominio con varios hosts virtuales. Los hosts se comunican directamente con los engines. Dentro del host se tienen los contextos, que eran las aplicaciones web y es allí donde se almacenan los datos donde se procesan. Cluster Este componente provee replicación de sesiones, replicación de atributos del contexto y el desarrollo de ficheros WAR amplios. Su implementación es muy extensible y está expuesta a una gran variedad de opciones, realizando la configuración que se desee. 12 Apache TomCat 6.0.32 13. Aspectos de las Aplicaciones Web a desplegar en el servidor Una aplicación web está definida como una jerarquía de directorios y archivos en una organización estándar. Dicha jerarquía de directorios se empaqueta en un fichero conocido como .WAR. Este formato estándar es el que se utilizará cuando se distribuya la aplicación durante su implementación. La jerarquía de más alto nivel de la aplicación es la raíz del documento. Allí se localizan los archivos HTML y páginas JSP que componen la interfaz de usuario. Cuando el desarrollador despliega la aplicación en el servidor, le asigna un path contextual a la aplicación. Ese path contextual considera /nombreAplicación. En dicho path debe estar presente el archivo index.html que será el punto de acceso principal a la aplicación. Los siguientes componentes que se encuentran presentes en la raíz del proyecto web son: Páginas HTML, JSP, etc. Todos los ficheros que componen a la interface gráfica web de la aplicación se encuentran localizados en la raíz del proyecto web. Las mismas pueden ser visibles desde el navegador web. /WEB-INF/web.xml. Es el descriptor web de la aplicación, un archivo XML que describe a los Servlets y demás componentes de la aplicación y sus parámetros asociados. /WEB-INF/clases/. Este directorio contiene todos los archivos Java que implementen las clases de la aplicación. Si las mismas están organizadas dentro de paquetes, entonces ello es reflejado de la misma manera en la estructura de directorios físico del sistema operativo. /WEB-INF/lib/. Este directorio contiene todas las librerías y drivers utilizados en la aplicación, los cuales tienen la extensión de tipo .jar. a) Archivos de Librerías Compartidas Las librerías que se utilizan dentro de Apache y que son compartidas por las distintas aplicaciones y que son visibles para todas ellas. Eso se configura en el path que se muestra dentro de $CATALINA_HOME/lib. En la instalación por defecto se incluye a las APIs de Servlet, JSP y JAXP (que es un parseador de XML). 13 Apache TomCat 6.0.32 b) Descriptor de contexto de Tomcat El archivo /META-INF/context.xml puede ser utilizado para definir opciones de configuración específicas de Tomcat, como ser data sources, loggers, administradores de sesión entre otros. Este archivo debe tener un elemento contexto. c) Jerarquía de código fuente de la aplicación Como recomendación se tiene que conviene realizar una separación dentro de la jerarquía de directorios del código fuente con aquella que contiene la aplicación desplegada. Eso conviene llevarse a cabo para facilitar la administración, tener un control más sencillo y distribuir más fácilmente la aplicación. Para realizar esta operación se tiene la herramienta Ant de Apache que permite automatizar el proceso, creando scripts para tal fin. En el nivel superior del directorio fuente del proyecto se tiene los siguientes componentes: Docs/ - en este directorio se almacena la documentación de la aplicación. Src/ - en este directorio se almacenan los ficheros de código fuente de las clases java que componen la aplicación. Web/ - aquí se ubican las páginas HTML, JSP, archivos JavaScript, hojas de estilo CSS e imágenes, que serán accesibles para los clientes. Este directorio debe ser la raíz de la aplicación web y cualquier subdirectorio suyo constituye la URL de acceso a dichos ficheros. Web/WEB-INF/ - aquí se ubican los ficheros de configuración anteriormente mencionados. Cuando se hace la compilación y despliegue de la aplicación Web, se crean los dos directorios siguientes: Build/ - que contiene la imagen de todos los ficheros compilados de la aplicación web. Dist/ - aquí se ubica el fichero .WAR que constituye el fichero de despliegue y también aquí existe el directorio /dist/lib donde se colocan todas las librerías que son requeridas por la aplicación web. La aplicación desplegada se colocará dentro del directorio webapps de Apache Tomcat. La operación de deploy copia el proyecto dentro de dicho directorio y la undeploy lo elimina de allí. Cuando el servidor web esta activo no se permite realizar eliminaciones de proyectos desplegados en el directorio webapps. Para poder hacerlo, se debe hacer un undeploy o sino detener el servidor antes de intentar eliminar el proyecto desplegado. A su vez, cada vez que se inicia el servidor, se cargan automáticamente todas aquellas aplicaciones que hayan sido desplegadas anteriormente en el mismo. 14 Apache TomCat 6.0.32 d) Archivo de configuración BUILD.XML Cuando se utiliza la herramienta Ant para administrar la compilación de los ficheros de código fuente Java, el mismo crea un archivo de compilación denominado build.xml que define los pasos de procesamiento requeridos. Este archivo se encuentra localizado en el directorio de nivel superior de la jerarquía de código fuente. 14. Directorio de instalación de Apache Tomcat El directorio donde se encuentra instalado Apache Tomcat posee los siguientes elementos: LICENCE – este archivo contiene información sobre el acuerdo de licencia que el desarrollador debe aceptar al instalar el servidor de aplicaciones en el equipo. Contiene detallado punto por punto cada característica correspondiente al mismo. NOTICE – este archivo brinda información referente a las características del producto y su origen indicando su proveedor. RELEASE-NOTES –este archivo posee información referente a la versión de apache instalada, como ser nuevas características, APIs, bugs corregidos, protocolos soportados, etc. RUNNING.txt – este fichero brinda información para el administrador del sistema sobre cómo debe efectuar el inicio, despliegue y parada del servidor, que procesos son los implicados y donde se ubican dentro de la jerarquía de directorios. Además de los ficheros mencionados anteriormente, se dispone de los siguientes directorios: Directorio /bin Dentro de la carpeta bin se encuentran todos los ficheros correspondientes a servicios que brinda soporte el servidor. También allí se cuenta con scripts y archivos por lotes de Windows utilizados para iniciar/detener el servidor, configurarlo, etc. 15 Apache TomCat 6.0.32 Dentro del directorio se cuenta con los siguientes archivos que son fundamentales para el funcionamiento del servidor: Startup.bat o startup.sh – es el archivo que permite iniciar el servidor. Cuando se lo ejecuta, el servidor se carga en el sistema operativo e inicia sus servicios, cargando todas las aplicaciones web que hayan sido desplegadas anteriormente. Shutdown.bat o shutdown.sh – es el archive que permite detener el servidor. Ejecuta comandos que detienen todos los servicios que estén en ejecución sobre el mismo y al ejecutarlo aquellas aplicaciones web que hayan sido desplegadas sobre el mismo dejan de estar accesibles para su uso. Tomcat6.exe o tomcat6w.exe – es el proceso ejecutable correspondiente al servidor. Cuando el mismo se encuentra activo, en el administrador de servicios del sistema dicho proceso se encontrará en ejecución. Catalina.bat o catalina.sh – es el proceso correspondiente al contenedor de Servlets del servidor. Service.bat – es el archivo por lotes que gestiona la configuración y despliegue del servidor como un servicio en el sistema. Setclasspath.bat – es el proceso que maneja las variables de entorno del servidor. Digest.bat – es el proceso que brinda soporte al mapeo de objetos XML a clases Java. Directorio /conf En este directorio se almacenan todos los ficheros de configuración del servidor. Entre los mismos se cuenta con: 16 Apache TomCat 6.0.32 Catalina.properties y Catalina.policy – estos ficheros poseen información sobre la configuración del componente Catalina, que es el contenedor de Servlets del sistema. Context.xml – este fichero almacena la ruta que por defecto dentro de las aplicaciones web se dispondrán sus archivos de configuración para cada aplicación en particular. Log4j.properties – este fichero almacena la configuración de la librería log para el manejo de eventos de log en el sistema. Logging.properties – este fichero almacena información asociada también al manejo de logs vinculado a su presencia dentro del servidor Apache Tomcat. Server.xml – este fichero almacena información de configuración general de despliegue del servidor en la máquina. Tomcat-users.xml – este fichero contiene información de acceso de usuarios en el servidor Apache Tomcat. Web.xml – este fichero es el descriptor de las aplicaciones web desplegadas en el servidor. Directorio /lib En este directorio se colocan todas las librerías utilizadas en el servidor y requeridas por las aplicaciones web en general. Directorio /logs En este directorio se almacenan ficheros de texto plano donde se registran todos los eventos que se presentaron al utilizar el servidor, registrados línea por línea, junto a su fecha, hora y el host en el que se produjo. 17 Apache TomCat 6.0.32 Directorio /temp Aquí se almacenan todos los ficheros temporales que son utilizados en el sistema y creados durante la operación del servidor web. Directorio /webapps En este directorio se ubican todas las aplicaciones web que han sido desplegadas en el servidor. Cuando el mismo se encuentra activo, se prohíbe el borrado de algún fichero de este directorio, ya que se debe garantizar la disponibilidad de todos los recursos en la aplicación web en este caso. Directorio /works Aquí se almacenan todos los ficheros requeridos para el despliegue de aplicaciones web en la máquina local (localhost). Todos los proyectos desplegados en el equipo se encuentran en el directorio \work\Catalina\localhost. Apache TomCat 6.0.32 18 15. Manejo de la Seguridad en Apache TomCat Las librerías de Java, Security Manager lo que hace es gestionar el acceso y la ejecución de un Applet7 desde el navegador y también prevenir que algún agente extraño ingrese código en la aplicación y acceda a los ficheros físicos del sistema de archivos del host servidor. También protege al equipo de troyanos JSP, Servlets, beans y tags asociados. Existen una serie de permisos sobre las clases que son usados para definir permisos de carga de clases en Tomcat. Hay varias clases de permisos que son parte estándar de la JDK, pero el desarrollador también puede crear sus propios permisos para el acceso a las aplicaciones web. Entre los permisos estándares que se tienen, se cuenta con: java.util.PropertyPermission – controla el acceso, lectura y escritura a las propiedades de la máquina virtual de Java. java.lang.RuntimePermission – controla el uso de funciones tales como exit() o exec() a componentes de la JRE y a paquetes de aplicaciones. java.io.FilePermission – controla el acceso de lectura, escritura y ejecución de archivos o directorios. java.net.SocketPermission – controla el uso de sockets de red. java.net.NetPermission – controla el uso de conexiones de red multicast. java.lang.reflect.ReflectPermission – controla el uso y construcción de introspección de clases. java.security.SecurityPermission – controla el acceso a métodos de seguridad. java.security.AllPermission – permite obtener el acceso a todos los permisos, como si no se estuviera utilizando SecurityManager. Para configurar los permisos solo hace falta realizar las configuraciones sobre dichos archivos, y cuando se cargan en el servidor los mismos se encuentran establecidos. Esto hace referencia a permisos estándares. Por otra parte, se tienen los permisos definidos por el usuario, para ello Tomcat utiliza una clase de manejo de permisos personalizada y denominada org.apache.naming.JndiPermission. Esta clase permite gestionar los permisos de lectura a los archivos que manejan recursos JNDI. Un “*” puede ser usado para matchear cualquier archivo de recurso JNDI con los permisos de tipo grant. De esta manera, se puede incluir dentro del archivo de políticas, la siguiente sentencia: Permisión org.apache.naming.JndiPermission “jndi://localhost/examples/*”. Esta sentencia debe ser generada dinámicamente para cada aplicación web que sea desplegada de modo de solamente permitir el acceso a recursos estáticos de la aplicación y no dar permisos de lectura de otro tipo de archivos. 7 Applet: es una aplicación Java que puede correr desde un navegador web. Apache TomCat 6.0.32 19 También Tomcat crea en forma dinámica los siguientes permisos: permission java.io.FilePermission "** your application context**", "read"; permission java.io.FilePermission "** application working directory**", "read,write"; permission java.io.FilePermission "** application working directory**/-", "read,write,delete"; En donde **your application context** equivale al directorio o archivo WAR donde la aplicación ha sido desplegada y **application working directory** es el directorio temporal provisto a la aplicación de acuerdo a la especificación de los servlets. 16. Políticas de Seguridad en Apache Tomcat El servidor de aplicaciones también cuenta con un archivo donde se encuentran escritas todas las políticas de seguridad que vienen definidas por defecto, ello se encuentra en el fichero ubicado en $CATALINA_BASE/conf/catalina.policy. El mismo contiene permisos referentes a código del sistema, código fuente del contendor de servlets Catalina, y permisos web sobre la aplicación. Sin embargo, dicho archivo puede ser editado para que el administrador del servidor pueda incorporar sus propios privilegios. Las entradas en el archivo tienen la forma de: // Example policy file entry grant [signedBy <signer>,] [codeBase <code source>] { permission <class> [<name> [, <action list>]]; }; Las entradas signedBy y codebase son opcionales. CodeBase toma la forma de una URL, de un archivo usado en las propiedades ${java.home} y ${catalina.home} para proteger los directorios contenidos en las mismas de acuerdo a los privilegios indicados dentro de la entrada. 17. Protección de Paquetes en Apache Tomcat También se puede configurar permisos de acceso a los paquetes internos de tomcat. Ello se hace editando el archivo de Propiedades por Defecto, localizado en $CATALINA_BASE/conf/catalina.properties. Luego de realizar las configuraciones correspondientes, se debe reiniciar el servidor. El archivo posee las siguientes líneas: # # List of comma-separated packages that start with or equal this string # will cause a security exception to be thrown when # passed to checkPackageAccess unless the # corresponding RuntimePermission ("accessClassInPackage."+package) has 20 Apache TomCat 6.0.32 # been granted. package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat., org.apache.jasper. # # List of comma-separated packages that start with or equal this string # will cause a security exception to be thrown when # passed to checkPackageDefinition unless the # corresponding RuntimePermission ("defineClassInPackage."+package) has # been granted. # # by default, no packages are restricted for definition, and none of # the class loaders supplied with the JDK call checkPackageDefinition. # package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote., org.apache.tomcat.,org.apache.jasper. 18. Iniciar Apache Tomcat con SecurityManager Cuando se ha configurado las políticas y privilegios de seguridad por parte del administrador del sistema, se debe reiniciar el servidor para que habilite dichas opciones. Ello se lleva a cabo mediante la siguiente línea: %CATALINA_HOME%\bin\catalina start -security $CATALINA_HOME/bin/catalina.sh start -security (Windows) (Linux) 19. Problemas Comunes que pueden presentarse 1. El primer problema que puede presentarse es el número de puerto del servidor. Cuando se lo instala, el puerto de escucha del servidor viene configurado en 8080. Pero en el caso donde se esté instalando una nueva instancia del mismo, se debe cambiar dicho número y tratar de seleccionar alguno que se encuentre disponible y no esté reservado para algún tipo de proceso. Dicha configuración se lleva a cabo en el archivo /conf/server.xml. 2. Otro problema, que se da cuando se instala el servidor sobre sistemas operativos obsoletos, como ser Windows 95,98 o ME es el mensaje de error “Out of environment space”. Eso viene dado por el uso de memoria. Para solucionarlo, se debe hacer click derecho sobre los ficheros STARTUP.BAT y SHUTDOWN.BAT y cambiar el valor de Entorno Inicial a 4096. 3. Otro problema es el mensaje “The ‘localhost’ machine isn’t found”, esto significa que el equipo se esta conectando mediante un proxy. En ese caso hay que asegurarse que la configuración del proxy no este bloqueando el acceso a localhost.