Desarrollo de Aplicaciones Web
Desarrollo de Aplicaciones Web
Desarrollo de Aplicaciones Web
APLICACIONES WEB
Desarrollo de Aplicaciones Web
José Luis Comesaña
12
ÍNDICE
1.- Aspectos generales de arquitecturas web. ........................................................................ - 2 -
1.1.- Evolución de los servicios web. ................................................................................................ - 3 -
1.2.- Tecnologías asociadas a las aplicaciones web. ......................................................................... - 4 -
1.3.- Tipos de aplicaciones web. ...................................................................................................... - 5 -
1.4.- Arquitecturas web. Modelos. .................................................................................................. - 6 -
1.5.- Plataformas web libres y propietarias. ..................................................................................... - 8 -
1.6.- Escalabilidad. ........................................................................................................................... - 9 -
Escalabilidad vertical. ............................................................................................................................................ - 9 -
Escalabilidad horizontal......................................................................................................................................... - 9 -
Cluster ..................................................................................................................................................................- 10 -
2.- Servidor web Apache. ...................................................................................................... - 11 -
2.1.- Instalación y configuración. ....................................................................................................- 11 -
2.2.- Iniciar Apache. ........................................................................................................................- 14 -
3.- Aplicaciones web y servidores de aplicaciones. ............................................................... - 15 -
3.1.- El servidor de aplicaciones Tomcat. ........................................................................................- 16 -
3.1.1.- Instalación y configuración básica. ..........................................................................................................- 17 -
3.1.2.- Iniciar Tomcat. ..........................................................................................................................................- 18 -
4.- Estructura y despliegue de una aplicación web. .............................................................. - 20 -
4.1.- Archivos WAR. ........................................................................................................................- 20 -
4.2.- Despliegue de aplicaciones con Tomcat ..................................................................................- 21 -
4.3.- Descriptor de despliegue. .......................................................................................................- 22 -
Despliegue de Aplicaciones Web Tema 1
-1-
Implantación de arquitecturas web DAW José Luis Comesaña
La arquitectura World Wide Web (WWW) de Internet provee un modelo de programación sumamen-
te poderoso y flexible. Las aplicaciones y los contenidos son presentados en formatos de datos
estándar y son localizados por aplicaciones conocidas como "web browsers", que envían requeri-
mientos de objetos a un servidor y éste responde con el dato codificado según un formato estándar.
Los estándares WWW especifican muchos de los mecanismos necesarios para construir un ambiente
de aplicación de propósito general, por ejemplo:
Modelo estándar de nombres: todos los servidores, así como el contenido de la WWW se deno-
minan según un Localizador Uniforme de Recursos (Uniform Resource Locator: URL).
Contenido: a todos los contenidos en la WWW se les especifica un determinado tipo permitien-
do de esta forma que los browsers (navegadores) los interpreten correctamente.
Formatos de contenidos estándar: todos los navegadores soportan un conjunto de formatos
estándar, por ejemplo HTML, ECMA, JavaScript, etc.
Protocolos estándar: éstos permiten que cualquier navegador pueda comunicarse con cualquier
servidor web. El más comúnmente usado en WWW es HTML (Protocolo de Transporte de Hiper-
Texto), que opera sobre el conjunto de protocolos TCP/IP.
Esta infraestructura permite a los usuarios acceder a una gran cantidad de aplicaciones y servicios de
terceros. También permite a los desarrolladores crear aplicaciones y servicios para una gran comuni-
dad de clientes.
Los aspectos generales a destacar en una arquitectura web son los siguientes:
Escalabilidad.
Separación de responsabilidades.
Portabilidad.
Utilización de componentes en los servicios de infraestructura.
Gestión de las sesiones del usuario.
Aplicación de patrones de diseño.
De forma genérica podríamos decir que la arquitectura web es un modelo compuesto de tres capas:
1. Capa de Base de Datos, donde estaría toda la documentación de la información que se pretende
administrar mediante el servicio web y emplearía una plataforma del tipo MySQL, PostgreSQL,
etc.
2. En una segunda capa estarían los servidores de aplicaciones web, ejecutando aplicaciones de
tipo Apache, Tomcat, Resin, etc.
3. En una tercera capa estarían los clientes del servicio web al que accederían mediante un nave-
gador web como Firefox, Internet Explorer, Opera, etc.
-2-
Despliegue de Aplicaciones Web Tema 1
La evolución del uso de Servicios web en las organizaciones está fuertemente ligada al desarrollo de
Internet como red prestadora de servicios. Entre los factores que han impulsado el uso de los servi-
cios web se encuentran:
El contenido se está volviendo más dinámico: Los sitios web actuales proporcionan contenidos
"instantáneos". Un Servicio web debe ser capaz de combinar contenido proveniente de fuentes
muy diferentes.
El ancho de banda es menos costoso: Actualmente un Servicio web puede entregar tipos varia-
bles de contenidos como vídeo o audio. A medida que crezca el ancho de banda, los servicios
web deben adaptarse a nuevos tipos de contenidos.
El almacenamiento es más barato: Un Servicio web debe ser capaz de manejar cantidades masi-
vas de datos, y debe poder hacerlo de forma inteligente.
El éxito de la computación extendida se está volviendo más importante: Con cientos de millones
de dispositivos como teléfonos móviles, agendas electrónicas, etc. existentes actualmente, esta-
mos llegando a un momento en el cual las computadoras están dejando de ser el dispositivo más
común en Internet. A medida que las plataformas se hacen más diversas, tecnologías como XML
se volverán más importantes. Un servicio web no puede exigir que los usuarios ejecuten, por
ejemplo, un navegador web tradicional en alguna versión de Microsoft Windows; por el contra-
rio, los servicios web deben servir a todo tipo de dispositivos, plataformas y navegadores, entre-
gando contendido sobre una amplia variedad de tipos de conexión.
Estos factores, unidos a los beneficios proporcionados por los servicios web en la organización y los
buenos productos disponibles para su desarrollo, han hecho que su utilización se extienda sin mayo-
res obstáculos.
En términos generales, cuando se empiezan a utilizar servicios web en una organización, estos se
desarrollan e implementan como servicios simples, que poco a poco se van integrando hasta llegar a
servicios web mucho más complejos.
En los orígenes del mundo web nos situábamos ante un entorno estático, con páginas en formato
HTML que raramente sufrían modificaciones o actualizaciones y en las que apenas había interacción
con el usuario.
La Web 2.0 es la transición que se ha dado desde las aplicaciones tradicionales hacia aplicaciones que
funcionan a través de la web y que están fuertemente enfocadas al usuario final. En este nuevo en-
torno existen una serie de nuevas tecnologías que, en general, tienen como objetivo:
Transformar software de escritorio hacia la web.
Separar hojas de estilo.
Potenciar el trabajo colaborativo y la utilización de redes sociales.
Dar control total a los usuarios en el manejo de su información.
-3-
Implantación de arquitecturas web DAW José Luis Comesaña
Las aplicaciones web emplean páginas dinámicas, éstas se ejecutan en un servidor web y se mues-
tran en el navegador de un equipo cliente que es el que ha realizado previamente la solicitud. Cuan-
do una página web llega al navegador, es posible que también incluya algún programa o fragmento
de código que se deba ejecutar. Ese código, normalmente en lenguaje JavaScript, lo ejecutará el
propio navegador. Es por ello que en este apartado nos centraremos en las tecnologías asociadas a
las aplicaciones web que se ejecutarán tanto del lado del servidor como del cliente, especificando lo
que corresponda en cada uno de los casos.
ASP (Active Server Pages): Las "Páginas Activas" se ejecutan del lado del servidor, de este modo
se forman los resultados que luego se mostrarán en el navegador de cada equipo cliente que ha
realizado la solicitud. Un buen ejemplo de ello son los buscadores, donde un usuario realiza una
petición de información y el servidor nos entrega un resultado a medida de nuestra petición.
Existen versiones de ASP para Unix y Linux, a pesar de que fue una tecnología desarrollada por
Microsoft para la creación dinámica de páginas web ofrecida junto a su servidor IIS.
CGI (Common Gateway Interface): La "Interface Común de Entrada" es uno de los estándares
más antiguos en Internet para trasladar información desde una página a un servidor web. Este
estándar es utilizado para bases de datos, motores de búsqueda, formularios, generadores de
email automático,
foros, comercio electrónico, rotadores y mapas de imágenes, juegos en línea, etc.
Las rutinas de CGI son habitualmente escritas en lenguajes interpretados como Perl o por lengua-
jes compilados como C.
CSS (Cascading Style Sheets): Las "Hojas de Estilo en Cascada" se usan para formatear las páginas
web; se trata de separar el contenido de un documento de su presentación. Cualquier cambio en
el estilo marcado para un elemento en la CSS afectará a todas las páginas vinculadas a esa CSS.
Java: Este es un lenguaje que trabaja en el cliente, es decir: se ejecuta en el
navegador del equipo cliente y no en el servidor. Es un lenguaje eficiente y
muy poderoso, que se caracteriza por:
Una misma aplicación puede funcionar en diversos tipos de ordenado-
res y sistemas operativos: Windows, Linux, Solaris, MacOS, etc., así co-
mo en otros dispositivos inteligentes.
Los programas Java pueden ser aplicaciones independientes (que co-
rren en una ventana propia) o "applets", que son pequeños programas interactivos que se
encuentran incrustados en una página web y pueden funcionar con cualquier tipo de nave-
gador: Explorer, Netscape, Ópera, etc.
Se trata de un lenguaje "orientado a objetos". Esto significa que los programas se construyen
a partir de módulos independientes, y que estos módulos se pueden transformar o ampliar
fácilmente. Un equipo de programadores puede partir de una aplicación existente para ex-
tenderla con nuevas funcionalidades.
Desarrollado por la empresa Sun Microsystems, pero posteriormente liberado bajo licencia
GNU GPL (La Licencia Pública General de GNU, o más conocida por su nombre en inglés GNU General Public License es una li-
cencia creada por la " Free Software Fundation" y está orientada, principalmente, a proteger la libre distribución, modificación y
uso de software. Su propósito es declarar que el software cubierto por esta licencia es software libre y protegerlo de intentos de
apropiación que restrinjan esas libertades a los usuarios. El proyecto GNU (GNU es un acrónimo recursivo para "GNU No es
con
Unix"). Comenzó en 1984 a desarrollar un sistema operativo completo con la principal propiedad de ser Software Libre),
lo cual es un software libre.
JavaScript: Lenguaje que se interpreta y se ejecuta en el cliente. Útil para realizar tareas como
mover imágenes por la pantalla, crear menús de navegación interactivos, utilizar algunos juegos,
-4-
Despliegue de Aplicaciones Web Tema 1
etc. En las páginas web suele preferirse JavaScript porque es aceptado por muchos más navega-
dores que VBScript (creado por Microsoft)
PHP (Hypertext Preprocessor): Este lenguaje es, como ASP, ejecutado en el lado del servidor.
PHP es similar a ASP y puede ser usado en circunstancias similares. Es muy eficiente, permitiendo
el acceso a bases de datos empleando servidores como MySQL (potente gestor de bases de datos relacional,
sencillo de usar e increíblemente rápido. También es uno de los motores de bases de datos más usados en Internet, la principal razón
de esto es que se distribuye bajo la licencia GNU GPL para aplicaciones no comerciales) y, por lo tanto, suele utilizarse
para crear páginas dinámicas complejas.
VBScript (Visual Basic Scripting): La respuesta de Microsoft a JavaS-
cript. VBScript es una buena herramienta para cualquier sitio destinado
a ser mostrado exclusivamente en el navegador Microsoft Internet Ex-
plorer. El código en VBScript puede, además, estar diseñado para su
ejecución en el lado del cliente o en el del servidor, la diferencia es que
un código que se ejecuta en el lado del servidor no es visible en el lado
del cliente. Éste recibe los resultados, pero no el código.
¿Podemos ver una página web sin que intervenga un servidor web?
Sí No
Podemos ver páginas web con extensión .htm, .html o .xhtml que tengamos almacenadas en nuestro equipo simplemente abriéndolas
con el navegador. En este caso la única utilidad del servidor web es enviar la página que solicitemos a nuestro equipo.
Buscadores
Organización Social e inte-
Agregadores
ligente de la información
Marcadores sociales
Organizadores de proyectos
Escritorios virtuales
Aplicaciones Híbridas
Reproductores de música
Repositorios
-5-
Implantación de arquitecturas web DAW José Luis Comesaña
Establecer una clasificación de los tipos de aplicaciones web es una tarea compleja debido a la difi-
cultad existente para poder establecer algún parámetro en función del cual establecer dicha clasifi-
cación, junto con la innumerable cantidad de aplicaciones existentes en el actual entorno web 2.0.
En función de cómo se presenta la aplicación web junto con el contenido que pretende mostrar, se
ha establecido la siguiente clasificación:
Página web Estática. Están implementadas en HTML y pueden mostrar en alguna parte de la
página objetos en movimiento tales como banners, GIF animados, vídeos, etc.
Página web Animada. Se realizan con la tecnología FLASH; ésta permite que una página web
presente el contenido con ciertos efectos animados continuados. El uso de esta tecnología per-
mite diseños más vanguardistas, modernos y creativos.
Página web Dinámica. Existen muchos lenguajes de programación que son la base para la mayor-
ía de páginas web dinámicas. Los que destacamos aquí son los lenguajes PHP y ASP. Estos lengua-
jes permiten una perfecta estructuración del contenido. Por una parte crearíamos la estructura
de las páginas web y por otra, almacenaríamos el contenido en determinados archivos. A partir
de ahí, crearíamos el código de llamada, que insertaría el contenido en la propia página web es-
tructurada. Este es el principio básico que siguen los lenguajes de programación. A partir de aquí
se desarrollan aplicaciones para poder gestionar el contenido a través de un panel de control.
Portal. Es un sitio web que en su página principal permite el acceso a múltiples secciones que,
por lo general, son foros, chats, cuentas de correo, buscador, acceso registrado para obtener
ciertas ventajas, las últimas noticias de actualidad, etc.
Tienda virtual o comercio electrónico. Sitio web que publica los productos de una tienda en In-
ternet. Permite la compra on-line a través de tarjeta de crédito, domiciliación bancaria o transfe-
rencia bancaria en general. Ofrece al administrador un panel de gestión para poder subir los pro-
ductos, actualizarlos, eliminarlos, etc.
Página web con "Gestor de Contenidos". Se trata de un sitio web cuyo contenido se actualiza a
través de un panel de gestión por parte del administrador del sitio. Este panel de gestión suele
ser muy intuitivo y fácil de usar. En aquellas páginas web que requieran una actualización cons-
tante, se suele incorporar este panel de gestión para que la web pueda controlarse día a día por
parte del cliente.
Se puede establecer que la arquitectura de un sitio web comprende los sistemas de organización y
estructuración de los contenidos junto con los sistemas de recuperación de información y navegación
-6-
Despliegue de Aplicaciones Web Tema 1
que provea el sitio web, con el objetivo de servir de ayuda a los usuarios a encontrar y manejar la
información.
Centraremos el estudio de los modelos de arquitectura web relacionados, en función de cómo im-
plementan cada una de las capas establecidas en una aplicación web:
1. Capa de presentación es la encargada de la navegabilidad, validación de los datos de entrada,
formateo de los datos de salida, presentación de la web, etc.; se trata de la capa que se presenta
al usuario.
2. Capa de negocio es la que recibe las peticiones del usuario y desde donde se le envían las res-
puestas; en esta capa se verifican que las reglas establecidas se cumplen.
3. Capa de acceso a datos es la formada por determinados gestores de datos que se encargan de
almacenar, estructurar y recuperar los datos solicitados por la capa de negocio.
La evolución experimentada por los medios informáticos en los últimos años ha convivido con otra
evolución paralela, la evolución de la arquitectura de las aplicaciones web, que permite aprovechar
las nuevas características que éstas ofrecen. De esta forma, el modelo arquitectónico de las aplica-
ciones de Internet ha sufrido dos grandes saltos, con algún paso intermedio, desde la aparición de los
primeros portales web. Los distintos modelos de aplicación sobre los que se ha ido desarrollando,
según diversos autores, se podrían clasificar del siguiente modo:
Modelo 1
En este caso las aplicaciones se diseñan en un modelo web CGI, basadas en la ejecución de pro-
cesos externos al servidor web, cuya salida por pantalla era el HTML que el navegador recibía en
respuesta a su petición. Presentación, negocio y acceso a datos se confundían en un mismo
script perl (Lenguaje de programación diseñado por Larrry Wall en 1987. Perl toma características del lenguaje C, del lenguaje in-
terpretado shell (sh), awk, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación).
Modelo 1.5
Aplicado a la tecnología java (Lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a princi-
pios de los años 90, aunque a finales de 2006 liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL), se da con
la aparición de las JSP y los servlets (Objetos que se ejecutan dentro del contexto de un contenedor de "servlets", por
ejemplo Tomcat y amplían su funcionalidad. La palabra servlet deriva de otra anterior, applet, que se refería a pequeños programas
que se ejecutan en el contexto de un navegador web. Por contraposición, un servlet es un programa que se ejecuta en un servidor. El
uso más común de los servlets es generar páginas web de forma dinámica a partir de los parámetros de la petición que envíe el na-
En este modelo, las responsabilidades de presentación recaen en las páginas JSP,
vegador web).
mientras que los beans (Abreviatura científica del botánico Willian Jackson Bean (18631947). Un bean es un componente
software que tiene la particularidad de ser reutilizable y así evitar la tediosa tarea de programar los distintos componentes uno a
uno) incrustadosen las mismas son los responsables del modelo de negocio y acceso a datos.
Modelo 2
Como evolución del modelo anterior, con la incorporación del patrón MVC en este tipo de apli-
caciones, se aprecia la incorporación de un elemento controlador de la navegación de la aplica-
ción. El modelo de negocio queda encapsulado en los javabeans (Modelo de componentes creado por Sun
Microsystems para la construcción de aplicaciones en Java; se usan para encapsular varios objetos en un único objeto (bean), para
hacer uso de un solo objeto en lugar de varios más simples. La especificación de JavaBeans los define como "componentes de softwa-
que se incrustan en las pági-
re reutilizables que se puedan manipular visualmente en una herramienta de construcción")
nas JSP.
Modelo 2X
Aparecen con el objetivo de dar respuesta a la necesidad, cada vez más habitual, de desarrollar
aplicaciones multicanal, es decir, aplicaciones web que pueden ser atacadas desde distintos ti-
pos de clientes remotos. Así, una aplicación web multicanal podrá ejecutarse desde una PDA,
desde un terminal de telefonía móvil, o desde cualquier navegador HTML estándar. El medio pa-
ra lograr publicar la misma aplicación para distintos dispositivos es emplear plantillas XSL para
transformar los datos XML.
Esta web está pensada como un curso en español de Java básico. Pretende tener una inter-
acción con los lectores, de forma que se puedan resolver las dudas que surjan.
http://java-spain.com/bienvenido-java-spaincom
-7-
Implantación de arquitecturas web DAW José Luis Comesaña
Una plataforma web es el entorno de desarrollo de software empleado para diseñar y ejecutar un sitio
web. En términos generales, una plataforma web consta de cuatro componentes básicos:
1. El sistema operativo, bajo el cual opera el equipo donde se hospedan las páginas web y que
representa la base misma del funcionamiento del computador. En ocasiones limita la elección
de otros componentes.
2. El servidor web es el software que maneja las peticiones desde equipos remotos a través de la
Internet. En el caso de páginas estáticas, el servidor web simplemente provee el archivo solicita-
do, el cual se muestra en el navegador. En el caso de sitios dinámicos, el servidor web se encarga
de pasar las solicitudes a otros programas que puedan gestionarlas adecuadamente.
3. El gestor de bases de datos se encarga de almacenar sistemáticamente un conjunto de regis-
tros de datos relacionados para ser usados posteriormente.
4. Un lenguaje de programación interpretado que controla las aplicaciones de software que
corren en el sitio web.
Diferentes combinaciones de los cuatro componentes señalados, basadas en las distintas opciones
de software disponibles en el mercado, dan lugar a numerosas plataformas web, aunque, sin duda,
hay dos que sobresalen del resto por su popularidad y difusión: LAMP y WISA.
La plataforma LAMP trabaja enteramente con componentes de software libre y no está sujeta a
restricciones propietarias. El nombre LAMP surge de las iniciales de los componentes de software
que la integran:
Linux: Sistema operativo.
Apache: Servidor web.
MySQL: Gestor de bases de datos.
PHP: Lenguaje interpretado PHP, aunque a veces se sustituye por Perl o Python.
La plataforma WISA está basada en tecnologías desarrolladas por la compañía Microsoft; se trata,
por lo tanto, de software propietario. La componen los siguientes elementos:
Windows: Sistema operativo.
Internet Information Services: servidor web.
SQL Server: gestor de bases de datos.
ASP o ASP.NET: como lenguaje para scripting del lado del servidor.
Existen muchas otras plataformas que trabajan con distintos sistemas operativos (Unix, MacOS, Sola-
ris), servidores web (incluyendo algunos que se han cobrado relativa popularidad como Lighttpd
yLiteSpeed), bases de datos (Postgre SQL) y lenguajes de programación.
-8-
Despliegue de Aplicaciones Web Tema 1
1.6.- Escalabilidad.
Las aplicaciones web se ejecu-
tan en un entorno donde el
número de clientes que solici-
tan el servicio puede variar en
gran medida en función del
momento. Es por ello que hay
una característica de esencial
importancia como es la escala-
bilidad, al que Juan ha dedicado
un apartado de su wiki para
documentar esta característica.
Escalabilidad vertical.
Habitualmente, la separación lógica en capas se implementa de tal forma que se permita una separa-
ción física de las mismas. Interponiendo elementos conectores que actúen de middlewares es posi-
ble distribuir la aplicación de forma vertical (una máquina por cada capa del sistema), e incluso si
esto no fuera suficiente, distribuyendo los elementos de una misma capa entre distintas máquinas
servidoras.
Escalabilidad horizontal.
Se trata de clonar el sistema en otra máquina de características similares y balancear la carga de tra-
bajo mediante un dispositivo externo. El balanceador de carga puede ser:
Balanceador Software: Por ejemplo, habitualmente encontramos un servidor web apache jun-
to con el módulo mod_jk, que permite la redirección de las peticiones http que a tal efecto sean
configuradas entre las distintas máquinas que forman la granja de servidores. Este tipo de balan-
ceadores examinan el paquete http e identifican la sesión del usuario, guardando registro de cuál
de las máquinas de la granja se está encargando de servir a dicha sesión. Este aspecto es impor-
tante, dado que nos permite trabajar (de cara al diseño de la aplicación) apoyándonos en el obje-
to sesión propio del usuario y almacenando información relativa a la sesión del mismo, puesto
que tenemos la garantía de que todas las peticiones de una misma sesión http van a ser redirec-
cionadas hacia la misma máquina.
-9-
Implantación de arquitecturas web DAW José Luis Comesaña
Cluster
Con la aparición de los servidores de aplicaciones en cluster se abre una nueva capacidad de escala-
bilidad que, dependiendo de cómo se aplique, podría clasificarse como vertical u horizontal. Un clus-
ter de servidores de aplicaciones permite el despliegue de una aplicación web corriente, de forma
que su carga de trabajo vaya a ser distribuida entre la granja de servidores que forman el cluster, de
modo transparente al usuario y al administrador. El cluster, mediante el mecanismo de replicación
de sesión, garantiza que sea cual sea la máquina que sirva la petición http, tendrá acceso a la sesión
del usuario (objeto HttpSession en java). Este tipo de sistemas, debido precisamente a la replicación
de sesión, suele presentar problemas de rendimiento.
- 10 -
Despliegue de Aplicaciones Web Tema 1
Uno de los servidores web más populares del mercado y el más utilizado actualmente es Apache, de
código abierto y gratuito, disponible para Windows y GNU/Linux, entre otros.
El servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software
Foundation. La licencia de software, bajo la cual el software de la fundación Apache es distribuido, es
una parte distintiva de la historia de Apache HTTP Server y de la comunidad de código abierto.
Esta web sirve como manual de referencia, guía de usuario, tutoriales prácticos, etc., sobre
el servidor web Apache. Se trata de la web oficial de Apache Software Foundation.
http://httpd.apache.org/docs/2.0/es/
- 11 -
Implantación de arquitecturas web DAW José Luis Comesaña
Debido a que pretendemos montar una plataforma LAMP, por sus ventajas derivadas de las carac-
terísticas del software libre, instalaremos también los siguientes componentes: MySQL y PHP.
# apt-get install php5 mysql-client mysql-admin mysql-query-browser phpmyadmin
Una vez instalado, para verificar si funciona, podemos hacerlo desde un navegador, escribiendo en la
barra de direcciones :
http://localhost ó http://127.0.0.1
o bien, si accedemos desde otro equipo de la red a la dirección IP de esta máquina, deberíamos ob-
tener una página con el mensaje "It Works!", confirmando así su correcto funcionamiento.
Otro método de operar es descargar el código fuente de la aplicación desde la web del proyecto Apa-
che; luego descomprimir, compilar e instalar; realizar el proceso empleando los siguientes comandos:
cd /usr/local/src
wget http://apache.rediris.es//httpd/httpd-2.2.19.tar.gz
tar xvzf httpd-2.2.19.tar.gz
cd /usr/local/src/httpd-2.2.19
./configure --prefix=/usr/local/apache --enable-module=most --enable-mods-shared=most
make
make install
Por defecto, Apache sirve las páginas web que están en la carpeta " /var/www/ "; si nos situamos en
esa carpeta, encontramos un archivo " index.html " que es el que contiene el "It Works!". En esta car-
peta podemos crear nuevas carpetas en donde ubicaremos nuevas páginas web que deseamos ser-
vir, todas ellas accesibles a través del puerto 80.
Si la única pretensión es servir una página web, podemos integrar su contendido aquí. En caso que se
pretenda servir más páginas web, es más recomendable la utilización de los Hosts Virtuales; para ello
accedemos a la carpeta " /etc/apache2/sites-enabled ", donde hay un fichero llamado " 000-default ",
que nos va a servir de ejemplo para la creación de hosts virtuales, los cuales van a permitir servir
varias web desde una sola dirección IP utilizando para cada una un puerto distinto.
- 12 -
Despliegue de Aplicaciones Web Tema 1
En vídeo práctico se explica cómo instalar y configurar un servidor web Apache en una
máquina virtual con el sistema operativo Ubuntu:
http://www.youtube.com/watch?feature=player_embedded&v=p1kDRqd_JHg
Resumen del vídeo:
Se parte de un sistema operativo Ubuntu con la herramienta Webmin previamente instala-
da. Webmin es una herramienta de configuración de sistemas accesible vía web para Open-
Solaris, GNU/Linux y otros sistemas Unix. Con él se pueden configurar aspectos internos de
muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de confi-
guración, apagado del equipo, etcétera, así como modificar y controlar muchas aplicaciones
libres, como el servidor web Apache, PHP, MySQL, entre otros.
Una vez copiada la página a la carpeta anterior, se para el servicio correspondiente a Apache
y se vuelve a arrancar, se comprueba el funcionamiento correcto del servidor introduciendo
en el navegador la URL: http://127.0.0.1
Otra parte del vídeo demuestra cómo crear un nuevo Virtual Host y que escuche por el puer-
to 81, para ello es necesario configurar el archivo /etc/apache2/ports.conf para indicar al
servidor que escuche por dicho puerto
- 13 -
Implantación de arquitecturas web DAW José Luis Comesaña
Si todo está correcto debería devolver un mensaje del tipo " Syntax Ok "
usr/local/apache/bin/apachectl start y el servidor debería estar arrancado, con lo cual, si en un
navegador introducimos la URL: http://localhost veríamos la página de bienvenida de Apache.
Si el puerto especificado en la directiva Listen del fichero de configuración es el que viene por defec-
to, es decir, el puerto 80 (o cualquier otro puerto por debajo del 1024), entonces es necesario tener
privilegios de usuario root (superusuario) para iniciar Apache, de modo que pueda establecerse una
conexión a través de esos puertos privilegiados. Una vez que el servidor Apache se ha iniciado y ha
completado algunas tareas preliminares, tales como abrir sus ficheros log, lanzará varios procesos,
procesos hijo, que hacen el trabajo de escuchar y atender las peticiones de los clientes. El proceso
principal, httpd, continúa ejecutándose como root, pero los procesos hijo se ejecutan con menores
privilegios de usuario.
El demonio httpd se debería invocar empleando el script de control apachectl , que es el que se en-
carga de fijar variables de entorno y pasa al demonio (httpd) cualquier opción que se le pase cómo
argumento por línea de comandos.
El script apachectl es capaz de interpretar los argumentos start , restart , y stop y traducirlos en las
señales apropiadas para httpd .
Si en cualquier momento deseásemos parar, reiniciar o arrancar el servidor, podríamos emplear los
siguientes comandos respectivamente:
# /etc/init.d/apache2 stop
# /etc/init.d/apache2 restart
# /etc/init.d/apache2 start
- 14 -
Despliegue de Aplicaciones Web Tema 1
Se define una aplicación web como una aplicación informática que se ejecuta en un entorno web, de
forma que se trata de una aplicación cliente-servidor junto con un protocolo de comunicación pre-
viamente establecido:
Cliente: navegador.
Servidor: servidor web
Comunicación: protocolo HTTP
Un servidor de aplicaciones también es una máquina en una red de computadores que ejecuta de-
terminadas aplicaciones, gestionando la mayor parte de las funciones de acceso a los datos de la
aplicación.
Otra de las ventajas es la integridad de datos y código ya que, al estar centralizada en una o un pe-
queño número de máquinas servidoras, las actualizaciones están garantizadas para todos los usua-
rios.
El término servidor de aplicaciones se aplica a todas las plataformas. Dicho término se utiliza para
referirse a los servidores de aplicaciones basadas en web, como el control de las plataformas de co-
mercio electrónico integrado, sistemas de gestión de contenido de sitios web y asistentes o construc-
tores de sitios de Internet.
Uno de los ejemplos destacados es el de Sun Microsystems, la plataforma J2EE. Los servidores de
aplicaciones Java se basan en la Plataforma Java TM 2 Enterprise Edition (J2EE TM). J2EE utiliza un mo-
delo de este tipo y en general, incluye un nivel Cliente, un nivel Medio, y un EIS. El servidor de tipo
Cliente puede contener una o más aplicaciones o navegadores. La Plataforma J2EE es del Nivel Medio
y consiste en un servidor web y un servidor EJB. (Estos servidores son también llamados "contenedo-
res".) También podría haber subniveles adicionales en el nivel intermedio. El nivel del SistemaEnter-
prise Information System (EIS, o "Sistema de Información Empresarial") contiene las aplicaciones
existentes, archivos y bases de datos.
Esta web detalla 120 aplicaciones disponibles gratuitamente vía web en donde se especifica
la función de cada una de ellas.
http://especial.wetpaint.com/page/120+soluciones+gratis+web+2.0
- 15 -
Implantación de arquitecturas web DAW José Luis Comesaña
Tomcat es el servidor web (incluye el servidor Apache) y de aplicaciones del proyecto Yakarta, con lo
cual, gestiona las solicitudes y respuestas http y, además, es servidor de aplicaciones o contenedor
de Servlets y JSP.
Tomcat puede utilizarse como un contenedor solitario (principalmente para desarrollo y depuración)
o como plugin para un servidor web existente (actualmente soporta los servidores Apache, IIS). Esto
significa que siempre que despleguemos Tomcat tendremos que decidir cómo usarlo y, si seleccio-
namos las opciones 2 o 3, también necesitaremos instalar un adaptador de servidor web.
Las funciones del Servidor Apache y las funciones del servidor Tomcat, ¿son
equivalentes?
Sí No
Básicamente, el servidor Apache es únicamente un servidor web, mientras que el servidor Tomcat es un servidor de aplicaciones.
- 16 -
Despliegue de Aplicaciones Web Tema 1
Empezamos buscando el paquete de Java que nos pueda interesar. Con el siguiente comando ob-
tendríamos la lista del entorno Java, debido a que Debian proporciona varias implementaciones,
cada uno de estos paquetes tiene un entorno de desarrollo (JDK) y un tiempo de ejecución conocido
(JRE o Java Virtual Machines, JVM):
aptitude search "?provides(java-runtime)"
Instalamos el siguiente paquete por ser el que más se adapta a nuestras necesidades:
apt-get install default-jre
Una vez instalado el paquete anterior, es necesario crear una variable de entorno para indicar en
dónde se ha instalado, y añadir a la variable PATH el directorio en donde se encuentran los archivos
binarios para que puedan ser invocados desde cualquier parte; para ello, añadimos en nuestro caso
las siguientes líneas al archivo /etc/profile :
JAVA_HOME=/usr/lib/jvm/java-6-openjdk/jre/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME
Llegado este punto descargamos Tomcat, para ello abrimos en un navegador la URL:
http://apache.rediris.es/tomcat/tomcat-6/, una vez allí comprobaremos cuál es la última versión
estable de Tomcat y, desde la carpeta "bin", copiamos el link de descarga al apache-tomcat-
X.XX.X.tar.gz . En nuestro caso el link sería: http://apache.rediris.es/tomcat/tomcat-
6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz con lo cual podemos emplear el siguiente comando para
descargarlo:
# wget http://apache.rediris.es/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz
En Tomcat, la gestión del servicio se realiza a través del script incluido llamado catalina, al que le
podemos proporcionar los parámetros "start" y "stop", con lo que arrancaríamos o pararíamos el
servicio manualmente.
Para comprobar que nuestro servidor está ya escuchando, introducimos en un navegador la URL
http://127.0.0.1:8080 , y éste debería mostrar la página de inicio de Tomcat.
- 17 -
Implantación de arquitecturas web DAW José Luis Comesaña
Tomcat va a estar escuchando en el puerto 8080 y va a tener su propio directorio de trabajo. La mi-
sión de apache2 va a ser interceptar todas
las peticiones en el puerto 80 y derivar las
que considere necesarias a Tomcat; de este
modo observamos la ventaja de la escalabi-
lidad, ya que apache, al funcionar como
proxy, puede tener una batería de tomcats a
los que balancear las conexiones, haciendo
que, si nuestras necesidades crecen, nues-
tras máquinas puedan ampliarse en número
siendo completamente transparente para los usuarios.
Apache por defecto busca los ficheros en /var/www , Tomcat trabaja sobre la carpeta
/usr/local/tomcat/webapps/ROOT . La petición de una url se puede gestionar, parte por apache y parte
por Tomcat, por lo que vamos a cambiar la carpeta por defecto de trabajo para unificarlo. Para ello
editamos el fichero /usr/local/tomcat/conf/server.xml
#nano /usr/local/tomcat/conf/server.xml
Cargaremos los módulos siguientes para poder conseguir que Apache funcione como proxy:
# a2enmod proxy
# a2enmod proxy_ajp
- 18 -
Despliegue de Aplicaciones Web Tema 1
# a2enmod proxy_balancer
# /etc/init.d/apache2 restart
ajp es un protocolo de comunicación interno y muy rápido que usa conexiones TCP persistentes. Es
este protocolo el que vamos a utilizar para comunicar apache2 con Tomcat, aunque podría ser utili-
zado http, indicando que pregunte en el 8080. El puerto de trabajo por defecto para Tomcat es el
8009, aunque este puede ser variado desde /usr/local/tomcat/conf/server.xml
Modificamos el fichero de configuración del virtualhost que se pretenda utilizar, empleando el esta-
blecido por defecto.
# nano /etc/apache2/sites-enabled/000-default
- 19 -
Implantación de arquitecturas web DAW José Luis Comesaña
Una aplicación web está compuesta de una serie de servlets, páginas jsp, ficheros html, ficheros de
imágenes, ficheros de sonidos, texto, clases, etc.; de forma que todos estos recursos se pueden em-
paquetar y ejecutar en varios contenedores distintos.
Un servlets es una aplicación java encargada de realizar un servicio específico dentro de un servidor
web. La especificación Servlet 2.2 define la estructura de directorios para los ficheros de una aplica-
ción web. El directorio raíz debería tener el nombre de la aplicación y define la raíz de documentos
para la aplicación web. Todos los ficheros debajo de esta raíz pueden servirse al cliente excepto
aquellos ficheros que están bajo los directorios especiales META-INF y WEB-INF en el directorio raíz.
Todos los ficheros privados, al igual que los ficheros class de los servlets, deberían almacenarse bajo
el directorio WEB-INF.
Durante la etapa de desarrollo de una aplicación web se emplea la estructura de directorios, a pesar
de que luego en la etapa de producción, toda la estructura de la aplicación se empaqueta en un ar-
chivo .war
El código necesario para ejecutar correctamente una aplicación web se encuentra distribuido en una
estructura de directorios, agrupándose ficheros según su funcionalidad. Un ejemplo de la estructura
de carpetas de una aplicación web puede ser el siguiente:
/index.jsp
/WebContent/jsp/welcome.jsp
/WebContent/css/estilo.css
/WebContent/js/utils.js
/WebContent/img/welcome.jpg
/WEB-INF/web.xml
/WEB-INF/struts-config.xml
/WEB-INF/lib/struts.jar
/WEB-INF/src/com/empresa/proyecto/action/welcomeAction.java
/WEB-INF/classess/com/empresa/proyecto/action/welcomeAction.class
De forma genérica podríamos decir que una aplicación web se estructura en tres capas:
1. Navegador web.
2. Tecnología web dinámica (PHP, Java Servlets, ASP, etc.)
3. Base de datos encargada de almacenar de forma permanente y actualizada la informa-
ción que la aplicación web necesita.
- 20 -
Despliegue de Aplicaciones Web Tema 1
Aportan como ventaja, la simplificación del despliegue de aplicaciones web, debido a que su instala-
ción es sencilla y solamente es necesario un fichero para cada servidor en un cluster, además de in-
crementar la seguridad ya que no permite el acceso entre aplicaciones web distintas.
Su estructura es la siguiente:
/ : En la carpeta raíz del proyecto se almacenan elementos empleados en los sitios web, tipo do-
cumentos html, CSS y los elementos JSP (*.html *.jsp *.css).
/WEB-INF/ : Aquí se encuentran los elementos de configuración del archivo .WAR como pueden
ser: la página de inicio, la ubicación de los servlets, parámetros adicionales para otros componen-
tes. El más importante de éstos es el archivo web.xml .
/WEB-INF/classes/ : Contiene las clases Java empleadas en el archivo .WAR y, normalmente, en
esta carpeta se encuentran los servlets.
/WEB-INF/lib/ : Contiene los archivos JAR utilizados por la aplicación y que normalmente son las
clases empleadas para conectarse con la base de datos o las empleadas por librerías de JSP.
Para generar archivos .WAR se pueden emplear diversas herramientas desde entorno IDE "Integrated
Development Environment". Por ejemplo, encontramos: NetBeans y Eclipse, ambos Open-Source y
también Jbuilder de Borland, Jdeveloper de Oracle; otro modo de construir archivos war es mediante
Ant. Se trata de una herramienta Open-Source que facilita la construcción de aplicaciones en Java.
No es considerado un IDE pero para los que conocen el entorno Linux, es considerado el make de
Java.
Un archivo .WAR
Es un archivo comprimido que se puede generar con cualquier tipo de compresor, por
ejemplo winzip, winrar, tar, etc.
Es una aplicación web formada únicamente por archivos .html
Es un archivo en el cual se empaqueta en una sola unidad, aplicaciones web
completas.
Es un archivo que engloba el protocolo de comunicación de las aplicaciones web
generadas con Java.
Su nombre procede de Web Application Archive (Archivo de Aplicación Web); permiten empaquetar en una sola unidad aplicaciones web
de Java completas.
- 21 -
Implantación de arquitecturas web DAW José Luis Comesaña
La carpeta www contiene, a su vez, una carpeta con el nombre y ruta del proyecto que contiene los
ficheros que forman la interfaz (html, js, css, etc.). La carpeta bin contiene las clases de java de la
aplicación.
Cualquier aplicación web tiene que aportar un descriptor de despliegue situado en WEB-INF/web.xml ;
en el caso concreto de Tomcat el descriptor <TOMCAT_HOME>/conf/web.xml es un descriptor por defecto
que se ejecuta siempre antes del descriptor de la aplicación y, solamente, debería contener informa-
ción general y no específica de la aplicación.
- 22 -
Despliegue de Aplicaciones Web Tema 1
Situadas entre las etiquetas <web-app> y /<web-app> estarían los descriptores de despliegue de serv-
lets, los cuales deben contener las siguientes etiquetas en el siguiente orden:
<servlet>
<servlet-name>nombre</servlet-name>
<servlet-class>package.nombre.MiClass</servlet-class>
</servlet>
Para probar el servlet, una vez arrancado el servidor Tomcat, abrimos un navegador web, en el cual
escribiríamos una URL con el siguiente formato:
http://{address}:{port}/{servletName}
por ejemplo:
http://localhost:8080/Servlet_de_prueba
Llegado hasta este punto, puedes realizar la siguiente SOPA DE LETRAS en la que podrás comprobar
tus conocimientos sobre esta unidad de trabajo:
No hay secretos para el éxito. Éste se alcanza preparándose, trabajando arduamente y aprendiendo
del fracaso.
Colin Powell (1937-..)
- 23 -
TEMA 2
Contenido
1.- Funcionamiento de un servidor Web. ............................................................................................... 2
1.1.- Servicio de ficheros estáticos. ..................................................................................................................3
1.2.- Contenido dinámico. ...............................................................................................................................4
1.3.- Protocolo HTTP y HTTPS. .........................................................................................................................5
1.4.- Tipos MIME. ............................................................................................................................................6
1.4.1.- Configurar el servidor para enviar los tipos MIME correctos. .................................................................................. 8
2.- Hosts virtuales. Creación, configuración y utilización. .................................................................... 10
2.1.- Virtualhosts basados en nombre ...........................................................................................................11
2.2.- Virtualhosts basados en IP .....................................................................................................................12
2.3.- Virtualhosts basados en varios servidores principales ...........................................................................13
3.- Módulos. ......................................................................................................................................... 14
3.1.- Operaciones sobre módulos. .................................................................................................................14
4.- Acceso a carpetas seguras............................................................................................................... 16
4.1.- Certificados digitales, AC y PKI. ..............................................................................................................17
4.2.- Módulo ssl para apache. ........................................................................................................................18
4.3.- Crear un servidor virtual seguro en Apache (I). ......................................................................................18
4.3.1.- Crear un servidor virtual seguro en Apache (II). ...................................................................................................... 19
4.3.2.- Crear un servidor virtual seguro en Apache (III). ..................................................................................................... 20
4.4.- Comprobar el acceso seguro al servidor. ...............................................................................................21
5.- Autenticación y control de acceso. ................................................................................................. 22
5.1.- Autenticar usuarios en apache mediante LDAP. ....................................................................................23
6.- Monitorización del acceso: Archivos de registro (logs). .................................................................. 25
6.1.- Directivas para archivos de registro. ......................................................................................................26
6.2.- Rotación de los archivos de registro (I). .................................................................................................26
6.2.1.- Rotación de los archivos de registro (II). .................................................................................................................. 27
7.- Despliegue de aplicaciones sobre servidores Web.......................................................................... 30
Anexo I - /etc/apache/sites-available/default ...................................................................................... 32
Anexo II - /etc/mime.types................................................................................................................... 33
Anexo III - /etc/apache2/sites-available/default-ssl............................................................................. 44
Anexo IV - openssl_autofirmado.txt ..................................................................................................... 47
Anexo V - Instalación y configuración de OpenLDAP ............................................................................ 48
Instalación de OpenLDAP ..............................................................................................................................48
Configuración inicial de OpenLDAP ................................................................................................................48
Asistente de configuración de slapd ..............................................................................................................48
Pregunta sobre la eliminación de la base de datos ........................................................................................48
Utilización LDAP versión 2 .............................................................................................................................48
Arranque y parada manual del servidor LDAP .................................................................................................................... 48
Anexo VI - Instalación y configuración del servidor OpenLDAP en Debian 6 ........................................ 49
Anexo VII.- Despliegue aplicación Opencart. ........................................................................................ 51
Configuración y administración de servidores web Tema 2
Configuración y administración de
servidores Web.
Caso práctico
A la empresa BK Programación le ha surgido un nuevo proyecto: una empresa con varias sucursales
quiere montar una aplicación web por sucursal.
Ada, la directora, considera que para afrontar este proyecto y atender así la demanda ofrecida, deben
configurar un nuevo equipo servidor. Para tal fin se reúne con María:
-Hola María -dijo Ada-, nos han ofrecido un nuevo proyecto relacionado con servicios web, pienso que
podemos afrontarlo, pero quería saber tu opinión: ¿con la infraestructura que tenemos ahora ves
necesario el montaje de otro equipo servidor dedicado a este proyecto o con lo que tenemos nos
arreglamos?
-Pienso -dijo María- que tal como estamos ahora, sí o sí, independientemente de los recursos que
consuma este nuevo proyecto necesitamos la configuración de otro equipo servidor. Además
debemos configurar dos entornos: el de pruebas y el de producción. ¿Para cuándo sería el proyecto?
-El proyecto debemos entregarlo con fecha final dentro de tres meses.
-Entonces, creo que si todo sigue su cauce normal no tendremos ningún tipo de problema para la
ejecución del proyecto. ¿Qué recursos humanos habías pensado y dispones para destinar al
proyecto?
-Ahora disponemos de todo el personal de la empresa y cuento contigo y con Juan para que os
coordinéis las funciones de este proyecto.
-Pues por mí, no veo objeción al mismo.
-Bien -asintió Ada-, entonces no se hable más, tendremos que configurar otro equipo servidor y
aceptamos el proyecto.
Así, la empresa BK Programación envió un presupuesto a la empresa del proyecto, ésta lo aprobó y
comenzó el trabajo.
Para afrontar el nuevo proyecto al que se enfrenta BK Programación se acuerda en una reunión en la
que asistieron: Ada, María y Juan, quien sería destinado al nuevo proyecto y las funciones a realizar
en el mismo. Así, en dicha reunión se determinó que María sería la encargada del montaje,
configuración y administración del nuevo equipo servidor y Juan el encargado de coordinar con el
resto del personal la creación y funcionamiento de las aplicaciones web del proyecto.
María, entonces, se puso manos a la obra y determinó el siguiente escenario de trabajo para el
equipo servidor de este proyecto:
Sistema Operativo: Debian GNU/Linux 6.0
Servidor Web: Apache (apache2)
Configuración de Red:
Servidor Web: 192.168.200.250
Cliente de pruebas (desde donde se lanza el navegador): 192.168.200.100
"Se debe hacer todo tan sencillo como sea posible, pero no más sencillo."
Albert Einstein
Hay que tener en cuenta que en el escenario las IP empleadas son IP privadas, sin existencia en
Internet, por lo cual siempre que se haga referencia a las mismas a través de nombre de dominios,
deberá existir un servidor DNS que las resuelva en local o bien en su defecto deberán existir las
entradas correspondientes en el fichero del sistema local /etc/hosts .
-1-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
¿Alguna vez te has parado a pensar qué existe detrás de una página web?¿Por qué al escribir un
nombre en un navegador puedes visionar una página web?¿Por qué no tienes acceso a determinadas
páginas?¿De qué modo puedes impedir el acceso a determinados sitios de una página: por
directorio, por usuario? ¿Cómo se puede establecer una comunicación segura en una transición
bancaria? ...
Hoy en día utilizamos Internet como una herramienta común: para el trabajo, para el ocio... Pero sin
duda el elemento fundamental que usamos no es otro que el navegador, gracias al cual podemos
sacar partido a todo lo que se encuentra en Internet: comprar entradas para el cine, acceder a
nuestra cuenta bancaria, averiguar el tiempo que hará el fin de semana... pero nada de esto tendría
sentido si detrás de cada página web a la que accedemos no existiera un servidor web, el cual
permite que la página esté accesible 24x7 (24 horas al día y 7 días a la semana, es decir, siempre).
Detrás de cada página web debe existir un servidor web que ofrezca esa
página, bien a los internautas, a los trabajadores de una empresa -por
tratarse de una página web interna, de la empresa, no accesible a
Internet-, o a todo aquel que disponga de una conexión de red con la cual
pueda acceder a la página.
Pero ¿un servidor web pueda alojar varias páginas web o solamente una? Es más, ¿puede alojar
varios sitios (Conjunto de páginas web), dominios de Internet (Nombre por el cual se reconoce a un grupo de dispositivos o
equipos conectados a la red. Éstes pueden ser nombres locales, no existentes en Internet, pero son mayoritariamente utilizados para su uso
en Internet, por ejemplo: debian.org)
o solamente uno, esto es, permite hosts virtuales (Dominios independientes que se
pueden alojar en un mismo servidor web)? Pues,
un servidor web puede alojar varias páginas, sitios, dominios de
Internet, pero hay que tener en cuenta que la elección del servidor web será muy importante para la
configuración y administración de uno o múltiples sitios, ya que: ¿puede el servidor web ser modular
-fácilmente se le pueden añadir o quitar características-?, o por la contra si queremos añadirle una
funcionalidad que no posea en la instalación base debemos desinstalarlo e instalarlo de nuevo, por
ejemplo: hasta ahora el servidor web solamente ofrecía páginas estáticas pero queremos ofrecer
también páginas web dinámicas, qué hacemos: modular o nueva instalación.
-2-
Diseño de Aplicaciones Web Tema 2
También tenemos que pensar que todo puede crecer y lo que ahora era un servidor web que ofrecía
x número de páginas necesitamos que ofrezca x*y, con lo cual tenemos que prever la escalabilidad
del servidor web, y también la estabilidad: ¿cómo se comporta ante mútiples conexiones
simultáneas?
De nada servirá tener instalado un servidor web sin saber cómo se va a comportar ofreciendo el
servicio, con lo cual será muy importante previamente y durante el funcionamiento del servidor
establecer unas pruebas de funcionamiento del mismo y registrar lo acontecido.
Por todo lo anteriormente comentado veremos cómo configurar y administrar el servidor Apache
(apache2), ya que soporta: páginas web estáticas, dinámicas, hosts virtuales, seguridad mediante
cifrado, autenticación y control de acceso, modularización y monitorización de archivos de registro.
Todas aquellas páginas web que durante el tiempo no cambian su contenido no necesariamente son
estáticas. Una página estática puede modificarse, actualizando su contenido y seguir siendo estática,
¿entonces? Entonces debemos diferenciar cuando accedemos a una página web entre código
ejecutable en el lado del servidor y en el lado del cliente -equipo que solicita la página mediante el
cliente web (navegador)-. Si al acceder a una página web no es necesaria la intervención de código en
el lado del servidor -por ejemplo código PHP- o en el lado del cliente -por ejemplo javascript-
entonces entenderemos que la página es estática, si por el contrario es necesaria la intervención en
el lado del servidor y/o en el lado del cliente entenderemos que la página es dinámica.
Ofrecer páginas estáticas es simple, puesto que solamente se necesita que el
servidor web disponga de soporte html/xhtml/css o incluso solamente
html/xhtml. En cuanto a configuración y administración del servidor es el caso
más simple: solamente se necesita un soporte mínimo base de instalación del servidor Apache, esto
es, no se necesita por ejemplo soporte PHP. En cuanto a rendimiento del servidor, sigue siendo el
caso más beneficioso: no necesita de ejecución de código en el lado del servidor para visionar la
página y tampoco necesita ejecución de código en el lado del cliente, lo que significa menos coste de
CPU y memoria en el servidor y en el cliente, y por lo tanto una mayor rapidez en el acceso a la
información de la página.
Para poder ofrecer páginas estáticas mediante el servidor Apache simplemente copias la página en la
ruta correspondiente donde quieres que se visione la página. Así por ejemplo cuando se instala
Apache en un GNU/Linux Debian 6 se crean una serie de rutas en el equipo servidor similar a la
estructura siguiente.
Rutas de interés en la instalación de Apache (apache2)
Rutas de interés en la instalación de Apache (apache2) en un GNU/Linux Debian
/etc/apache2/
/etc/apache2/sites-available/
├── apache2.conf
├── default
├── conf.d
└── default-ssl
├── envvars
├── httpd.conf
/var/www/
├── magic
└── index.html
├── mods-available
├── mods-enabled
/etc/apache2/mods-available/mime.conf
├── ports.conf
├── sites-available
/etc/apache2/apache2.conf
└── sites-enabled
-3-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
En la instalación de Apache se crea una página web en /var/www/index.html referenciada a través del
archivo default ( /etc/apache/sites-available/default ), éste contiene la configuración por defecto,
generada en la instalación de Apache, para esa página. Si solamente quieres servir una página web la
forma más fácil de hacerlo sería sustituyendo la página index.html , referenciada en default , por la
página que quieres servir, por ejemplo empresa.html . Puedes comprobarlo siguiendo el
procedimiento:
1. Abres el navegador en la página por defecto creada en la instalación de Apache: index.html .
2. Sustituyes los archivos en el servidor. Ten en cuenta que la página a servir debe siempre poseer
el nombre index.html .
3. Pulsas F5 en el navegador para actualizar la página y la página que verás será la tuya.
Si lo que quieres es servir otra página, por ejemplo empresa.html , simplemente no le cambies como
antes el nombre, deja el que posee la página. Ahora podrás ver dos páginas en el servidor: la página
index.html y la página empresa.html . Si lo que quieres es servir más páginas pues, como antes,
simplemente vas subiendo al servidor las páginas e incluso podrías organizarlas en carpetas.
Imagínate que accedes a una página web y dependiendo si posees una cuenta de usuario u otra el
contenido es distinto, o que presionas en una imagen de la página y se produce un efecto en la
misma, o que el contenido cambia dependiendo del navegador. De cualquier forma la página ha sido
modificada mediante una interacción con el usuario y/o el navegador, por lo tanto nos encontramos
con una página dinámica.
Como bien puedes pensar, una página dinámica, necesita más recursos del servidor web que una
página estática, ya que consume más tiempo de CPU y más memoria que una página estática.
Además la configuración y administración del servidor web será más compleja: cuántos más módulos
tengamos que soportar, más tendremos que configurar y actualizar. Esto también tendrá una gran
repercusión en la seguridad del servidor web: cuántos más módulos más posibilidades de problemas
de seguridad, así si la página web dinámica necesita, para ser ofrecida, de ejecución en el servidor
debemos controlar que es lo que se ejecuta.
Algunos módulos con los que trabaja el servidor web Apache para poder soportar páginas dinámicas
son: mod_actions , mod_cgi , mod_cgid , mod_ext_filter , mod_include , mod_ldap , mod_perl , mod_php5 ,
mod_python .
-4-
Diseño de Aplicaciones Web Tema 2
Abres el navegador y solicitas una página a un servidor web: ¿cuál de las siguientes
acciones indica que la página solicitada no es dinámica?
La página tiene un panel de control, al cual accedes mediante tu usuario y tu contraseña, los
cuales nunca cambias. La página entonces establece comunicación con una base de datos y
te permite el acceso a tu perfil, distinto del perfil del administrador de la página.
Al pasar el puntero por encima de una imagen, ésta se redimensiona y al salir vuelve al
tamaño original.
Cuando visitas la página con distintos navegadores aparece un comentario de alerta
indicando el navegador con el cual estás accediendo a la página.
La página solicitada es un manual sobre el Servidor Apache, y está totalmente escrita en
código HTML y CSS.
Aquellas páginas cuyo contenido no depende da la interacción del usuario, del navegador o un sistema gestor de bases de datos son
páginas estáticas.
El protocolo HTTPS permite que la información viaje de forma segura entre el cliente y el servidor,
por la contra el protocolo HTTP envía la información en texto claro, esto es, cualquiera que accediese
a la información transferida entre el cliente y el servidor puede ver el contenido exacto y textual de
la información.
Para asegurar la información, el protocolo HTTPS requiere de certificados y siempre y cuando sean
validados, la información será transferida cifrada. Pero cifrar la información requiere un tiempo de
computación, por lo que será perjudicado el rendimiento del servidor web. Así, ¿es necesario que
toda, absolutamente toda, la información sea transferida entre el cliente y servidor de forma cifrada?
A lo mejor solamente es necesario que sea cifrada la autenticación a dicha información, por eso en
algunas páginas web puede que el servidor esté configurado para que en todo el dominio esté
cifrada su información o simplemente el intento de acceso a la misma.
Un servidor web, como Apache, puede emitir certificados, pero puede que en algún navegador sea
interpretado como peligroso, esto suele ser debido a que los navegadores poseen en su
configuración una lista de Entidades Certificadoras que verifican, autentican y dan validez a los
certificados. ¿Tú, confiarías en un DNI que no fuese certificado por una entidad de confianza como el
Ministerio del Interior? Pues, lo mismo le pasa a los navegadores, solamente confían en quien
confían. Eso no quiere decir que no puedes crear tus certificados en un servidor web, de hecho
muchas empresas lo hacen, sobre todo para sitios internos o externos en los que solamente puede
acceder personal autorizado por la propia empresa. Ahora si, si utilizas certificados mediante Apache
en un sitio visible a través de Internet y accesible por cualquier usuario, o bien eres una empresa o
entidad en la que de por si confía el usuario o la imagen de la empresa o entidad quedará muy mal
parada, ya que lo más probable es que el usuario no aceptará la comunicación, por visionar en el
navegador un aviso de problema de seguridad.
-5-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
El protocolo HTTPS utiliza cifrado sobre SSL/TLS (protocolos criptográficos que proporcionan comunicaciones seguras por
una red, comúnmente Internet) que proporcionan autenticación y privacidad. Entonces, si necesitas que la
información viaje cifrada debes emplear el protocolo HTTPS, en caso contrario el protocolo HTTP.
Hay que dejar claro que la utilización del protocolo HTTPS no excluye ni impide el protocolo HTTP, los
dos pueden convivir en un mismo dominio.
Bien, pero, ¿cómo funcionan? En el protocolo HHTP cuando escribes una dirección URL en el
navegador, por ejemplo http://www.debian.org/index.es.html , antes de ver la página en el
navegador existe todo un juego de protocolos, sin profundizar en todos ellos básicamente lo que
ocurre es lo siguiente: se traduce el dominio DNS (sistema de nomenclatura jerárquica para computadoras, servicios o
cualquier recurso conectado a Internet o a una red privada, por ejemplo: apache.org determina un dominio org (organización) y un
subdominio que identifica en este caso la máquina o conjunto de máquinas de nombre apache)
por una IP, una vez obtenida la
IP se busca en ella si un servidor web aloja la página solicitada en el puerto 80 (número utilizado en las
comunicaciones cliente/servidor, en transmisiones TCP o UDP comprendido entre 1 y 65535, que indica por donde tiene lugar la conexión
con un servidor. Están estandarizados, esto es, un servidor suele estar activo siempre por definición en un puerto determinado, pero éste
puede que sea modificado en la configuración del servidor. Por ejemplo un servidor web espera en el puerto TCP 80) , puerto TCP (es
uno de los protocolos fundamentales en Internet. Garantiza que los datos serán entregados en su destino sin errores y una vez recogidos
ponerlos en el mismo orden en que se transmitieron)
asignado por defecto al protocolo HTTP. Si el servidor web
aloja la página ésta será transferida a tu navegador. Sin embargo cuando escribes en el navegador
una dirección URL con llamada al protocolo HTTPS, el procedimiento es similar al anterior pero un
poco más complejo, así se traduce el dominio DNS por una IP, con la IP se busca el servidor web que
aloja la página solicitada en el puerto 443, puerto TCP asignado por defecto al protocolo HTTPS, pero
ahora antes de transferir la página a tu navegador se inicia una negociación SSL, en la que entre otras
cosas el servidor envía su certificado -el navegador aunque es poco habitual también puede enviar el
suyo-. Si el certificado es firmado por un Entidad Certificadora de confianza se acepta el certificado y
se cifra la comunicación con él, transfiriendo así la página web de forma cifrada.
Puedes hacer que un servidor web para una determinada página espere los protocolos HHTP y HTPS
en puertos TCP distintos del 80 y 443 respectivamente. Eso sí, cuando visites la página web a
mayores en la dirección URL debes especificar el puerto TCP, por ejemplo:
http://www.tupagina.local:8080 , de esta forma el servidor web espera la petición de la página
www.tupagina.local en el puerto 8080; del mismo modo en la dirección URL:
https://www.tupagina.local:4333 espera la petición de la página www.tupagina.local en el puerto
4333. Como ves, puedes configurar los puertos, pero ten en cuenta que cualquiera que quisiera
acceder a esas páginas debería saber el puerto TCP de la solicitud. Entonces, quiere decir que
¿aunque no escribas el puerto TCP en las direcciones URL estas se interpretan en el puerto 80 y 443
para el protocolo HTTP y HTTPS respectivamente? Pues si, así es. Es lo mismo escribir
http://www.tupagina.local:80 que http://www.tupagina.local y es lo mismo escribir
https://www.tupagina.local:443 que https://www.tupagina.local
¿Cómo se transmite un vídeo por Internet, con qué codificación?¿Cómo sabe un navegador que al
seguir un enlace de vídeo el programa que debe utilizar para reproducirlo?
-6-
Diseño de Aplicaciones Web Tema 2
RFC2045 http://tools.ietf.org/html/rfc2045
RFC 2046 http://tools.ietf.org/html/rfc2046
RFC 2047 http://tools.ietf.org/html/rfc2047
RFC 4288 http://tools.ietf.org/html/rfc4288
RFC4289 http://tools.ietf.org/html/rfc4289
RFC2077 http://tools.ietf.org/html/rfc2077
Cuando un navegador intenta abrir un archivo el estándar MIME le permite saber con qué tipo de
archivo está trabajando para que el programa asociado pueda abrirlo correctamente. Si el archivo no
tiene un tipo MIME especificado el programa asociado puede suponer el tipo de archivo mediante la
extensión del mismo, por ejemplo: un archivo con extensión .txt supone contener un archivo de
texto.
Bien, pero ¿cómo lo hace?
El navegador solicita la página web y el servidor antes de transferirla confirma que la petición
requerida existe y el tipo de datos que contiene. Esto último, mediante referencia al tipo MIME al
que corresponde. Este diálogo, oculto al usuario, es parte de las cabeceras HTTP (Son el lenguaje que utilizan
el cliente(navegador web) y el servidor web para comunicarse entre sí. Se puede considerar cada cabecera como un mensaje aparte en el
sentido de la comunicación entre el cliente y el servidor. Primero hay unas cuantas preguntas (cabeceras de solicitud), las cuales son
respondidas (cabeceras de respuesta)), protocolo que se sigue en la web.
En ese diálogo, en las cabeceras respuestas del servidor existe el campo Content-Type , donde el
servidor avisa del tipo MIME de la página. Con esta información, el navegador sabe cómo debe
presentar los datos que recibe. Por ejemplo cuando visitas http://www.debian.org/index.es.html
puedes ver como respuesta en la cabecera del servidor el campo Content-Type: text/html ,
indicando que el contenido de la página web es tipo texto/html:
HTTP/1.1 200 OK
Date: Fri, 13 May 2011 18:11:36 GMT
Server: Apache
Last-Modified: Fri, 13 May 2011 16:22:52 GMT
Etag: "3a9b-4a32ab7a76f00"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 14 May 2011 18:11:36 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 4864
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
Content-Language: es
Cada identificador de tipo MIME consta de dos partes. La primera parte indica la categoría general a
la que pertenece el archivo como, por ejemplo, "text". La segunda parte del identificador detalla el
tipo de archivo específico como, por ejemplo, "html". Un identificador de tipo MIME "text/html",
por ejemplo, indica que el archivo es una página web estándar.
Los tipos MIME pueden indicarse en tres lugares distintos: el servidor web, la propia página web y el
navegador.
El servidor debe estar capacitado y habilitado para manejar diversos tipos MIME.
En el código de la página web se referencia tipos MIME constantemente en etiquetas link, script,
object, form, meta, así por ejemplo:
El enlace a un archivo hoja de estilo CSS:
<link href="./miarchivo.css" rel="stylesheet" type="text/css">
El enlace a un archivo código javascript:
<script language="JavaScript" type="text/javascript" src="scripts/mijavascript.js">
-7-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Con las etiquetas meta podemos hacer que la página participe en el diálogo servidor-cliente,
especificando datos MIME:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
El navegador del cliente también participa, además de estar capacitado para interpretar el
concreto tipo MIME que el servidor le envía, también puede, en el diálogo previo al envío de
datos, informar que tipos MIME puede aceptar la cabecera http_accept, así por ejemplo una
cabecera http_accept tipo de un navegador sería:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
En un servidor web podemos especificar el tipo MIME por defecto para aquellos archivos que el
servidor no pueda identificar automáticamente como pertenecientes a un tipo concreto, esto es,
para aquellos los cuales no se resuelven según su extensión.
Ejemplos:
DefaultType text/plain : Esto significa que cuando el navegador web solicita y recibe ese archivo
como respuesta, desplegará el contenido como un archivo de texto.
DefaultType text/html : Desplegará el contenido como un archivo HTML.
ForceType image/gif : Desplegará el contenido como un archivo de imagen gif.
ForceType video/mp4 : Desplegará el contenido como un archivo de vídeo mp4.
-8-
Diseño de Aplicaciones Web Tema 2
Abres el navegador y solicitas una página web que contiene un vídeo con la extensión .flv
a un servidor web Apache: ¿cuáles de las siguientes afirmaciones son correctas teniendo
en cuenta que el vídeo puede reproducirse y visualizarse sin problemas?
El servidor web no identifica el tipo MIME pero la extensión .flv es reconocida por el
navegador, es por esto que el navegador asocia el programa correspondiente al vídeo y se
reproduce sin problemas.
El archivo no es reconocido por el servidor web, por lo que el servidor web envía al
navegador otro tipo MIME, compatible con el esperado y el vídeo se reproduce sin
problemas.
Si la extensión .flv no es reconocida por el navegador ni por el servidor web es debido a
que el tipo MIME es reconocido por cómo está programada la página web.
El servidor web no identifica el tipo MIME pero como el servidor web reconoce la extensión
.flv modifica la programación de la página web incorporando el código necesario para la
reprodución del vídeo.
El archivo se reproduce porque el tipo MIME viene especificado por el código programado en la página web o porque programa asociado
supone el tipo de archivo mediante su extensión.
-9-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Anteriormente hemos visto como poder alojar múltiples páginas web en el servidor web Apache,
pero todas pertenecientes al mismo sitio/dominio, es decir, todas pertenecientes a empresa.com,
entonces, ¿no se puede alojar páginas de distintos dominios en el mismo servidor web? La respuesta
es que si, si se puede, ¿cómo?, mediante la configuración de hostsvirtuales o virtualhosts. Éstos
básicamente lo que hacen es permitir que un mismo servidor web pueda alojar múltiples dominios,
así configurando hosts virtuales podemos alojar:empresa1.com , empresa2.com, ..., empresaN.com
en el mismo servidor web. Cada empresa tendrá su virtualhost único e independiente de las demás.
Existen tres tipos de virtualhost: basados en nombre, basados en IP y basados en varios servidores
principales.
Si no tienes configurado un servidor DNS con las entradas de dominio necesarias, puedes generar
estas entradas modificando el archivo /etc/hosts , añadiéndolas al final del mismo:
- 10 -
Diseño de Aplicaciones Web Tema 2
#IP nombre-dominio
192.168.200.250 empresa1.com www.empresa1.com
192.168.200.250 empresa2.com www.empresa2.com
Cada campo de cada entrada puede ir separado por espacios o por tabulados.
Estas entradas solamente serán efectivas en el equipo en el que se modifique el archivo /etc/hosts .
Así debes modificar el archivo /etc/hosts en cada equipo que quieres que se resuelvan esas
entradas.
Para hacer que el servidor acepte conexiones en dos direcciones IP y puertos diferentes,usa:
Listen 192.168.200.250:80
Listen 192.168.200.251:8080
- 11 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Este método no aporta ventajas sobre el anterior, es más, aún puede ser más difícil de mantener si
las IP del servidor web se modifican con cierta frecuencia.
¿Cómo lo haces? Sigues el mismo procedimiento usado para los virtualhost basado en nombre,
únicamente se diferencia en los ficheros a crear para los virtualhost, así:
1. En la configuración de Apache2 existe un directorio /etc/apache2/sites-available donde se
definen los virtualhost, cada virtualhost en un fichero de texto de configuración distinto, así crea
los dos ficheros siguientes en la ruta /etc/apache2/sites-available .
2. Fichero configuración virtualhost: empresa3
<VirtualHost IP1_Servidor_Web:80>
DocumentRoot /var/www/empresa3/
ServerName 192.168.200.250
</VirtualHost>
3. Fichero configuración virtualhost: empresa4
<VirtualHost IP2_Servidor_Web:80>
DocumentRoot /var/www/empresa4/
ServerName 192.168.200.251
</VirtualHost>
Para hacer que el servidor acepte conexiones en dos direcciones IP y puertos diferentes, usa:
- 12 -
Diseño de Aplicaciones Web Tema 2
<VirtualHost IP2_Servidor_Web:80>
DocumentRoot /var/www/empresa4/
ServerName www.empresa4.com.
ServerAlias empresa4.com empresa4.es www.empresa4.es
</VirtualHost>
DocumentRoot /var/www/empresa3/ :Definición de la ruta donde está alojada la página web en el
servidor, en este caso: /var/www/empresa3/ mediante la directiva DocumentRoot .
ServerName www.empresa3.com : Definición del nombre DNS que buscará la página alojada en la
ruta anterior del servidor mediante la directiva ServerName . Es el nombre que escribes en el
navegador para visitar la página.
ServerAlias empresa3.com : La directiva ServerAlias permite definir otros nombres DNS para la
misma página.
</VirtualHost> : Fin de la etiqueta VirtualHost: fin de la definición de este virtualhost para la
empresa3.
"Cuando me preguntan cuándo estará listo un programa, contesto: depende de cuánto trabaje usted
en ello."
Richard Stallman
Este método es el más complejo de todos, solo tiene sentido cuando quieras tener varios archivos de
configuración apache2.conf independientes organizando cada uno sus propios hostsvirtuales, en
otro caso, mejor emplear alguno de los dos métodos anteriores.
XAMPP es una forma fácil de instalar y usar el servidor web Apache con
MySQL, PHP y Perl. XAMPP, basta con descargarlo, extraerlo y comenzar.
En este momento hay cuatro versiones de XAMPP, para: Linux, Windows, Mac OS X y Solaris.
http://www.apachefriends.org/es/xampp.html
Te proponemos los siguientes enlaces con interesantísimos vídeos sobre la instalación y uso
de XAMPP en Windows.
http://informatica.iessanclemente.net/screencast/xampp/
- 13 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
3.- Módulos.
Caso práctico
Está bien -pensó María-. Manos a la obra. Debo montar un nuevo servidor web
Apache y necesito... veamos:
Que varias aplicaciones web atiendan en el mismo dominio, tal que:
sucursal-zonaX.empresa-proyecto.com , www.sucursal-zonaX.empresa-proyecto.com
Un único panel de control de usuarios, en la URL www.empresa-proyecto.panel-
de-control.com ,
También soporte SSL para cifrado.
Soporte para páginas dinámicas mediante PHP.
Y soporte para control de usuarios LDAP.
Uhm..., ya lo tengo claro. Tengo que montar Apache con varios módulos, así primero instalaré
Apache, luego verificaré que módulos vienen instalados por defecto, si me conviene dejarlos
instalados o no, igual tengo que desinstalar alguno y tendré que investigar cuales son los módulos
nuevos a instalar.
Muy bien, pues lo dicho: ¡Manos a la obra!
a2ensite es un comando (en Debian y derivados) para habilitar configuraciones de ''sitios web'' en
Apache2. Los ficheros de configuración de los ''sitios web'' disponibles (normalmente son
configuraciones de hosts virtuales) están en /etc/apache2/sites-available/ y al habilitarlos se crea
un enlace simbólico desde /etc/apache2/sites-enabled/
- 14 -
Diseño de Aplicaciones Web Tema 2
Los módulos de Apache puedes instalarlos, desinstalarlos, habilitarlos o
deshabilitarlos, así, puedes tener un módulo instalado pero no habilitado. Esto
quiere decir que aunque instales módulos hasta que los habilites no funcionarán.
Para habilitar un módulo Apache, en Debian, también puedes ejecutar el comando a2enmod sin
parámetros. La ejecución de esté comando ofrecerá una lista de módulos a habilitar, escribes el
módulo en cuestión y el módulo se habilitará. Del mismo modo para deshabilitar un módulo Apache,
en Debian, puedes ejecutar el comando a2dismod sin parámetros. La ejecución de esté comando
ofrecerá una lista de módulos a deshabilitar, escribes el módulo en cuestión y el módulo se
deshabilitará.
Una vez habilitado o deshabilitado los módulos Apache sólo reconocerá estos cambios cuando
recargues su configuración, con lo cual debes ejecutar el comando: /etc/init.d/apache2 restart
Si no dispones de los comandos a2enmod y a2dismod puedes habilitar y deshabilitar módulos Apache
creando los enlaces simbólicos correspondientes desde /etc/apache2/mods-enabled/ hasta
/etc/apache2/mods-available/ , por ejemplo si quisieras habilitar el módulo ssl:
1. Te sitúas en el directorio /etc/apache2/mods-available.
cd /etc/apache2/mods-available
2. Verificas que el módulo aparece en esta ruta y por lo tanto está instalado
ls ssl.*
Este comando debe listar dos ficheros: ssl.conf (la configuración genérica del módulo) y ssl.load
(la librería que contiene el módulo a cargar)
3. Creas el enlace simbólico para habilitar el módulo:
ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
Estos comandos crean los enlaces /etc/apache2/mods-enabled/ssl.conf y /etc/apache2/mods-
enabled/ssl.load que apuntan a los ficheros /etc/apache2/mods-available/ssl.conf y
/etc/apache/mods-available/ssl.load respectivamente.
4. Recargas la configuración de Apache:
/etc/init.d/apache2 restart
5. El módulo ssl ya está habilitado.
Y si quisieras deshabilitarlo, simplemente eliminas en /etc/apache2/mods-enabled los enlaces
simbólicos creados, así si quisieras deshabilitar el módulo ssl ejecutarías el siguiente comando:
rm -f /etc/apache2/mods-enabled/ssl.*
Por último, no te olvides recargar la configuración de Apache: /etc/init.d/apache2 restart
- 15 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
¿Todas las páginas web que están alojadas en un sitio deben ser accesibles por cualquier usuario?
¿Todas las accesibles deben enviar la información sin cifrar, en texto claro? ¿Es necesario que todo el
trasiego de información navegador-servidor viaje cifrado?
Existe la posibilidad de asegurar la información sensible que viaja entre el navegador y el servidor,
pero esto repercutirá en un mayor consumo de recursos del servidor, puesto que asegurar la
información implica en que ésta debe ser cifrada, lo que significa computación algorítmica.
El cifrado al que nos referimos es el cifrado de clave pública o asimétrico: clave pública (kpub) y
clave privada (kpriv). La kpub interesa publicarla para que llegue a ser conocida por cualquiera, la
kpriv no interesa que nadie la posea, solo el propietario de la misma. Ambas son necesarias para que
la comunicación sea posible, una sin la otra no tiene sentido, así una información cifrada mediante la
kpub solamente puede ser descifrada mediante la kpriv y una información cifrada mediante la kpriv
solo puede ser descifrada mediante la kpub.
http://www.criptored.upm.es/intypedia/video.php?id=criptografia-asimetrica&lang=es
Como ves, A envía la información cifrada mediante la kpubB y B la descifra mediante su clave
privada(kprivB), por lo que se garantiza la confidencialidad de la información. Pero, ¿estás seguro
- 16 -
Diseño de Aplicaciones Web Tema 2
que B es quién dice que es? ¿Es quién debe ser? ¿Cómo garantizas la autenticidad de B? Pues ya que
supones que B es quien dice ser mediante un certificado digital, debes confiar en ese certificado, así
¿quién emite certificados digitales de confianza? Igual que el DNI es emitido por un entidad
certificadora de confianza, el Ministerio del Interior, en Internet existen autoridades de
certificación(CA ó AC) que aseguran la autenticidad del certificado digital, y así la autenticidad de B,
como: VeriSign y Thawte. Pero, como ya hemos comentado el Servidor Web Apache permite ser CA,
por lo que tienes la posibilidad de crear tus propios certificados digitales, ahora bien, ¿el navegador
web(A) confiará en estos certificados? Pues, en principio no, por lo que los navegadores avisarán que
la página a la cuál intentas acceder en el servidor web representa un peligro de seguridad, ya que no
existe en su lista de autoridades certificadoras de confianza. En determinados casos, por imagen,
puede ser un problema, pero si la empresa posee una entidad de importancia reconocida o el sitio es
privado y no público en Internet o sabes el riesgo que corres puedes aceptar la comunicación y el
flujo de información viajará cifrado.
La idea consiste en que los dos extremos de una comunicación, por ejemplo cliente (navegador
web) y servidor (servidor web Apache) puedan confiar directamente entre sí, si ambos tienen
relación con una tercera parte, que da fe de la fiabilidad de los dos, aunque en la práctica te suele
interesar solamente la fiabilidad del servidor, para saber que te conectas con el servidor que
quieres y no con otro servidor -supuestamente cuando tú te conectas con el navegador al servidor
eres tú y no otra persona la que establece la conexión-. Así la necesidad de una Tercera Parte
Confiable (TPC ó TTP, Trusted Third Party) es fundamental en cualquier entorno de clave pública. La
forma en que esa tercera parte avalará que el certificado es de fiar es mediante su firma digital sobre
el certificado. Por tanto, podremos confiar en cualquier certificado digital firmado por una tercera
parte en la que confiamos. La TPCque se encarga de la firma digital de los certificados de los usuarios
de un entorno de clave pública se conoce con el nombre de Autoridad de Certificación (AC).
Algunos de los servicios ofrecidos por una ICP (PKI) son los siguientes:
Registro de claves: emisión de un nuevo certificado para una clave pública.
Revocación de certificados: cancelación de un certificado previamente emitido.
Selección de claves: publicación de la clave pública de los usuarios.
Evaluación de la confianza: determinación sobre si un certificado es válido y qué operaciones
están permitidas para dicho certificado.
Recuperación de claves: posibilidad de recuperar las claves de un usuario.
- 17 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Todos los días los bancos efectúan transferencias bancarias, así como
también aceptan conexiones a sus páginas web para ofrecer su servicio
online. ¿Qué pasaría si cualquiera pudiese interceptar una comunicación
bancaria de ese tipo? ¿Sería interesante cifrar la información efectuada
antes y durante la conexión bancaria?
El método de cifrado SSL/TLS utiliza un método de cifrado de clave pública (cifrado asimétrico) para
la autenticación del servidor.
El módulo ssl es quien permite cifrar la información entre navegador y servidor web. En la instalación
por defecto éste módulo no viene activado, así que debes ejecutar el siguiente comando para poder
activarlo: a2enmod ssl
Este módulo proporciona SSL v2/v3 y TLS v1 para el Servidor Apache HTTP; y se basa en Open SSL
(Paquete de herramientas de administración y bibliotecas relacionadas con la criptografía, que suministran funciones criptográficas, entre
otros, a navegadores web para acceso seguro a sitios mediante el protocolo HTTPS) para proporcionar el motor de la
criptografía.
- 18 -
Diseño de Aplicaciones Web Tema 2
donde,
SSLEngine on : Activa o desactiva SSL
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem : Certificado digital del propio servidor
Apache
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key : Clave privada del servidor Apache.
Esas líneas lo que quieren decir es que Apache permite conexiones SSL y posee un certificado digital
autofirmado por sí mismo -ya que Apache actúa como entidad certificadora-.
¿Pero...? Como eres AC puedes firmar certificados e incluso puedes generar también tu propio
certificado autofirmado similar al que viene por defecto en Apache.
Hay que tener en cuenta que la negociación SSL es dependiente totalmente de la IP, no del nombre
del sitio web, así no puedes servir distintos certificados en una misma IP.
En una distribución Debian 6 el procedimiento para generar un certificado digital sería el siguiente:
1. Instalación del paquete openssl
apt-get install openssl
2. Crear un certificado autofirmado para el servidor web.
mkdir /etc/apache2/tus-ssl/
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/tus-ssl/apache.pem
Cuando se solicite el nombre del servidor HTTP indicar el nombre DNS que corresponda a la
IP del certificado, por ejemplo: autofirmado.ssl.empresa-proyecto.com
- 19 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Puedes ver la ejecución del los dos comandos que se utilizan en el anexo
openssl_autofirmado.txt
Este comando pedirá algunos datos: nombre de empresa, país, contraseña... La contraseña,
puedes omitirla, pero por seguridad es conveniente crearla para utilizarla cuando firmes un
certificado SSL .
3. Autofirma el certificado. Puedes hacerlo porque eres una AC, de tal forma que el primer
certificado que firmas es el de tu propia AC.
openssl x509 -in tupaginaweb.csr -out tupaginaweb.crt -req -signkey tupaginaweb.key -days 3650
El campo days 3650 significa que el certificado de tu AC tardará 10 años en caducar.
4. Editar la configuración SSL por defecto en el archivo /etc/apache2/sites-available/default-
ssl para indicar el certificado del servidor y su respectiva clave privada asignando los
siguientes valores a los parámetros :
SSLEngine on
SSLCertificateFile /etc/apache2/tus-ssl/tupaginaweb.crt
SSLCertificateKeyFile /etc/apache2/tus-ssl/tupaginaweb.key
5. Asegúrate que el fichero /etc/apache2/ports.conf incluya el valor Listen 443
- 20 -
Diseño de Aplicaciones Web Tema 2
6. Habilita el módulo ssl y la configuración SSL por defecto.
a2enmod ssl
a2ensite default-ssl
/etc/init.d/apache2 restart
- 21 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Cuando nos autenticamos en una web suele transferirse la información de autenticación a una base
de datos, que puede existir en la misma máquina que el servidor web o en otra totalmente diferente.
Suelen emplearse bases de datos SQL o LDAP para la autenticación de usuarios, siendo OpenLDAP
(http://www.openldap.org/) una de las alternativas más empleadas.
Puedes visitar el enlace de wikipedia AAA (Autenticación, Autorización y Registro. Conjunto de herramientas,
procedimientos y protocolos que garantizan un tratamiento coherente de las tareas de autenticación, autorización y registro de actividad
de las entidades que tienen acceso a un sistema de información ) donde encontrarás más información referente a
la autenticación:
http://es.wikipedia.org/wiki/Protocolo_AAA
HTTP proporciona un método de autenticación básico de usuarios: basic. Este método ante una
petición del cliente (navegador web) al servidor cuando se solicita una URL mostrará un diálogo
pidiendo usuario y contraseña. Una vez autenticado el usuario, el cliente volverá a hacer la petición
al servidor pero ahora enviando el usuario y contraseña, en texto claro (sin cifrar) proporcionados en
el diálogo. Es recomendable entonces si empleas este método que lo hagas combinado con conexión
SSL (HTTPS).
En la autenticación HTTP Basic es muy típico utilizar archivos .htaccess en los directorios que
queremos controlar el acceso. Puedes encontrar un ejemplo sobre basic con https en el archivo
virtualhost-ssl-basic :
<IfModule mod_ssl.c>
#<VirtualHost _default_:443>
<VirtualHost 192.168.200.250:443>
ServerAdmin web-autenticacion@empresa-proyecto.com
ServerName web-con-autenticacion-basic.empresa-proyecto.com
DocumentRoot /var/www/web-con-autenticacion-basic
<Directory /var/www/web-con-autentitacion-basic/>
AllowOverride AuthConfig
- 22 -
Diseño de Aplicaciones Web Tema 2
Options Indexes FollowSymLinks MultiViews
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error-web-autenticacion-basic.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access-web-autenticacion-basic.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/tus-ssl/tupaginaweb.crt
SSLCertificateKeyFile /etc/apache2/tus-ssl/tupaginaweb.key
</VirtualHost>
</IfModule>
Para usar archivos .htaccess, necesitas tener una configuración en el servidor que permita poner
directivas de autenticación en estos archivos, mediante la directiva AllowOverride , así:
AllowOverride AuthConfig
En este anexo se encuentra cómo instalar y configurar un servidor OpenLDAP pero también
deberías visitar la siguiente web
http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m6/instalacin_y_configu
racin_de_openldap.html
Para una instalación de OpenLDAP en Debian 6 visita el enlace al siguiente documento:
Instalación y configuración del servidor OpenLDAP en Debian 6
En el siguiente enlace encontrarás más información sobre la autenticación LDAP para el
servidor web Apache mediante el módulo authnz_ldap .
http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html
Para el buen funcionamiento de lo expuesto a continuación se asume que tanto Apache2 como
OpenLDAP están instalados y configurados:
1. Habilita el soporte LDAP para Apache2:
a2enmod authnz_ldap
/etc/init.d/apache2 restart
2. Configura el virtualhost autenticacion-ldap-apache como sigue:
- 23 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
<VirtualHost *:80>
DocumentRoot /var/www/autenticacion-ldap
ServerName www.empresa-proyecto.panel-de-control.com
ServerAlias www.autenticacion-ldap.empresa-proyecto.com
<Directory /var/www/autenticacion-ldap>
AllowOverride All
</Directory>
ErrorLog /var/log/apache2/error-autenticacion-ldap.log
LogLevel warn
CustomLog /var/log/apache2/access-autenticacion-ldap.log combined
</VirtualHost>
La directiva AllowOverride All es necesaria para habilitar ficheros .htaccess
3. Crea el fichero /var/www/autenticacion-ldap/.htaccess que permite configurar la
autenticación ldap para el virtualhost anterior:
AuthName "Autenticacion por LDAP"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPUrl ldap://127.0.0.1/ou=usuarios,dc=proyecto,dc=com?uid
Require ldap-user user1LDAP
La directiva Require ldap-user admin permite la autenticación al usuario user1LDAP , todos los
demás usuarios tienen el acceso denegado.
4. Accede a la URL: www.empresa-proyecto.panel-de-control.com ó www.autenticacion-
ldap.empresa-proyecto.com
- 24 -
Diseño de Aplicaciones Web Tema 2
Apache permite mediante diversas directivas crear archivos de registro que guardarán la información
correspondiente a las conexiones con el servidor. Esta información es guardada en formato CLF
(Common Logon Format) por defecto. Ésta es una especificación utilizada por los servidores web
para hacer que el análisis de registro entre servidores sea mucho más sencillo, de tal forma que
independientemente del servidor web utilizado podamos emplear el mismo método de análisis de
registro, ya sea mediante lectura, mediante programas ejecutables (scripts) o mediante programas
propios de análisis de registro.
En un archivo de registro en formato CLF cada línea identifica una solicitud al servidor web. Esta línea
contiene varios campos separados con espacios. Cada campo sin valor es identificado con un guión (-
). Los campos empleados en una configuración por defecto de Apache2 son los definidos en la
siguiente tabla:
Ejemplo log Apache en formato CLF
192.168.200.100 - - [05/May/2011:17:19:18 +0200] "GET /index.html HTTP/1.1" 200 20
Campos
Definición Ejemplo
(especificadores)
Identifica el equipo cliente que solicita la
host (%h) 192.168.200.100
información en el navegador.
Información del cliente cuando la máquina de éste
ident (%l) ejecuta identd y la directiva IdentityCheck está
activada.
authuser ( %u)
Nombre de usuario en caso que la URL solicitada
requiera autenticación HTTP.
Fecha y hora en el que se produce la solicitud al
date ( %t) servidor. Va encerrado entre corchetes. Este campo [05/May/2011:17:19:18
tiene su propio formato: +0200]
[dia/mes/año:hora:minuto:segundo zona]
Petición del cliente, esto es, la página web que está
request (%r) solicitando. En el ejemplo: /index.html , esto es, /index.html
dentro de la raíz del dominio que se visite la página
status ( %s ó Identifica el código de estado HTTP de tres dígitos
%>s) 200
que se devuelve al cliente.
Sin tener en cuenta las cabeceras HTTP el número
Bytes (%b) 20
de bytes devueltos al cliente.
Cada campo tiene su especificador, el cual se emplea en las directivas de Apache para indicar que
campo queremos registrar.
- 25 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
LogFormat Directiva que define el formato del archivo de registro asignado con la directiva
TransferLog
ErrorLog
Directiva que permite registrar todos los errores que encuentre Apache. Permite
guardar la información en un archivo de registro o bien en syslog
Directiva similar a la directiva TransferLog , pero con la particularidad que permite
CustomLog personalizar el formato de registro empleando los especificadores anteriormente
vistos.
CookieLog
Directiva que define el nombre del archivo de registro donde registrar información
sobre cookies
Directiva LogFormat
LogFormat nombre_fichero_archivo_registro [opcional_alias] [opcional_alias] permite
Sintaxis definir un logformat con un nombre de tal forma que cuando hacemos referencia al
nombre lo hacemos al logformat vinculado.
Uso LogFormat logs/acceso_a_empresa1.log
Directiva ErrorLog
Sintaxis ErrorLog nombre_fichero_archivo_registro
Directiva CustomLog
CustomLog nombre_fichero_archivo_registro|
Sintaxis tubería_para_enviar_al_programa_la_información de_registro
[variable_de_entorno_opcional]
Uso CustomLog logs/acceso_a_empresa1.log
Directiva CookieLog
Sintaxis CookieLog nombre_fichero_archivo_registro
- 26 -
Diseño de Aplicaciones Web Tema 2
en el servidor, así es conveniente rotar los archivos de registro, esto es, hay que depurarlos,
comprimirlos y guardarlos. Básicamente tienes dos opciones para rotar tus registros: rotatelogs un
programa proporcionado por Apache, o logrotate , una utilidad presente en la mayoría de los
sistemas GNU/Linux.
No debes olvidar que la información recopilada en los ficheros log se debe conservar al menos
durante 1 año por eventuales necesidades legales, de este modo,
además de rotarlos se opta habitualmente por comprimir logs .
Uso de rotatelogs
CustomLog "|ruta_rotatelogs ruta_log_a_rotar numero_segundos|tamaño_máximoMB" alias_logformat
Ejemplos
Rotar el archivo de registro access.log cada 24horas
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/access.log 86400" common
Rotar el archivo de registro access.log cada vez que alcanza un tamaño de 5 megabytes
CustomLog "|/usr/sbin/rotatelogs /var/logs/apache2/access.log 5M" common
Rotar el archivo de registro error.log cada vez que alcanza un tamaño de 5 megabytes y el archivo
se guardará con el sufijo de formato : YYYY-mm-dd-HH_MM_SS (Año-Mes-Día-
Hora_Minutos_Segundos)
ErrorLog "|/usr/sbin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" common
Los ficheros rotados por intervalo de tiempo, lo harán siempre y cuando en el intervalo de tiempo
definido existan nuevos datos.
Por defecto, si no se define formato mediante ningún modificador % para guardar los archivos de
registro, el sufijo nnnnnnnnnn (10 cifras) se agrega automáticamente y es el tiempo en segundos
traspasados desde las 24 horas (medianoche).
El alias logformat es muy interesante, porque permite definir un grupo de modificadores en una
palabra, de tal forma que incorporando esa palabra en la directiva log correspondiente estás
activando todo un grupo de modificadores. En Apache existen predefinidos en el archivo
/etc/apache2/apache2.conf los alias logformat : vhost_combined , combined , common , referer y agent ,
que puedes ver a continuación
Alias predefinidos
Alias logformat predefinidos en /etc/apache2/apache2.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
- 27 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
/etc/logrotate.conf : Define los parámetros globales, esto es, los parámetros por defecto de
logrotate. Te mostramos un fichero de este tipo:
# ejecutar "man logrotate" para más información
/var/log/btmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
Uso de logrotate
Comprobar la correcta configuración de la rotación de un log
/usr/sbin/logrotate -d /etc/logrotate.d/apache2
Forzar la ejecución de logrotate
/usr/sbin/logrotate-f /etc/logrotate.conf
/etc/cron.daily/logrotate : Fichero tipo para ejecutar logrotate diariamente en el cron
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
Ejemplo para añadir al archivo crontab del sistema (crontab -e)
# Rotar logs de apache con logrotate a las 3 am
- 28 -
Diseño de Aplicaciones Web Tema 2
El rotado de logs descrito anteriormente lo podemos aplicar a cualquier otra herramienta del
sistema. Es conveniente que le des una visita al manual de logrotate: man logrotate .
Rellena los huecos con la palabra: a2ensite available 443 enabled a2enmod 80
Servidores web
En apache2 utilizas el comando para habilitar módulos a2enmod
El puerto TCP suele identificar a HTTPS 443
En apache2 utilizas el comando para habilitar sitios a2ensite
En apache2 el directorio mods- contiene los módulos habilitados enabled
En apache2 el directorio mods- contiene los módulos posibles available
El puerto TCP suele identificar a HTTP 80
- 29 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Normalmente las aplicaciones sobre servidores web necesitan de los siguientes elementos para su
correcto funcionamiento: soporte php y soporte sql .
El servidor web puede tener soporte php, pero el soporte sql debe ser ofrecido por otro servidor al
que pueda acceder el servidor web. Este servidor con soporte sql puede estar configurado en el
mismo equipo que el servidor web o en otro.
En este documento se supone que tienes funcionando el siguiente entorno básico: Apache, MySQL y
PHP. En Debian 6, instalado Apache, puedes lograrlo con el comando:
En los siguientes enlaces encontrarás demos de las aplicaciones para tienda virtual: OpenCart,
Magento, osCommerce.
http://www.opencart.com/index.php?route=demonstration/demonstration
http://demo.magentocommerce.com/
http://demo.oscommerce.com/
- 30 -
Diseño de Aplicaciones Web Tema 2
- 31 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Anexo I - /etc/apache/sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
- 32 -
Diseño de Aplicaciones Web Tema 2
Anexo II - /etc/mime.types
###############################################################################
#
# MIME-TYPES and the extensions that represent them
#
# This file is part of the "mime-support" package. Please send email (not a
# bug report) to mime-support@packages.debian.org if you would like new types
# and/or extensions to be added.
#
# The reason that all types are managed by the mime-support package instead
# allowing individual packages to install types in much the same way as they
# add entries in to the mailcap file is so these types can be referenced by
# other programs (such as a web server) even if the specific support package
# for that type is not installed.
#
# Users can add their own types if they wish by creating a ".mime.types"
# file in their home directory. Definitions included there will take
# precedence over those listed here.
#
# Note: Compression schemes like "gzip", "bzip", and "compress" are not
# actually "mime-types". They are "encodings" and hence must _not_ have
# entries in this file to map their extensions. The "mime-type" of an
# encoded file refers to the type of data that has been encoded, not the
# type of encoding.
#
###############################################################################
application/activemessage
application/andrew-inset ez
application/annodex anx
application/applefile
application/atom+xml atom
application/atomcat+xml atomcat
application/atomserv+xml atomsrv
application/atomicmail
application/batch-SMTP
application/beep+xml
application/bbolin lin
application/cals-1840
application/cap cap pcap
application/commonground
application/cu-seeme cu
application/cybercash
application/davmount+xml davmount
application/dca-rft
application/dec-dx
application/docbook+xml
application/dsptype tsp
application/dvcs
application/ecmascript es
application/edi-consent
application/edi-x12
application/edifact
application/eshop
application/font-tdpfr
application/futuresplash spl
application/ghostview
application/hta hta
application/http
application/hyperstudio
application/iges
application/index
application/index.cmd
application/index.obj
application/index.response
application/index.vnd
application/iotp
application/ipp
application/isup
application/java-archive jar
application/java-serialized-object ser
application/java-vm class
application/javascript js
application/m3g m3g
application/mac-binhex40 hqx
- 33 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
application/mac-compactpro cpt
application/macwriteii
application/marc
application/mathematica nb nbp
application/ms-tnef
application/msaccess mdb
application/msword doc dot
application/mxf mxf
application/news-message-id
application/news-transmission
application/ocsp-request
application/ocsp-response
application/octet-stream bin
application/oda oda
application/ogg ogx
application/parityfec
application/pdf pdf
application/pgp-encrypted
application/pgp-keys key
application/pgp-signature pgp
application/pics-rules prf
application/pkcs10
application/pkcs7-mime
application/pkcs7-signature
application/pkix-cert
application/pkix-crl
application/pkixcmp
application/postscript ps ai eps epsi epsf eps2 eps3
application/prs.alvestrand.titrax-sheet
application/prs.cww
application/prs.nprend
application/qsig
application/rar rar
application/rdf+xml rdf
application/remote-printing
application/riscos
application/rss+xml rss
application/rtf rtf
application/sdp
application/set-payment
application/set-payment-initiation
application/set-registration
application/set-registration-initiation
application/sgml
application/sgml-open-catalog
application/sieve
application/slate
application/smil smi smil
application/timestamp-query
application/timestamp-reply
application/vemmi
application/whoispp-query
application/whoispp-response
application/wita
application/x400-bp
application/xhtml+xml xhtml xht
application/xml xml xsl xsd
application/xml-dtd
application/xml-external-parsed-entity
application/xspf+xml xspf
application/zip zip
application/vnd.3M.Post-it-Notes
application/vnd.accpac.simply.aso
application/vnd.accpac.simply.imp
application/vnd.acucobol
application/vnd.aether.imp
application/vnd.android.package-archive apk
application/vnd.anser-web-certificate-issue-initiation
application/vnd.anser-web-funds-transfer-initiation
application/vnd.audiograph
application/vnd.bmi
application/vnd.businessobjects
application/vnd.canon-cpdl
application/vnd.canon-lips
application/vnd.cinderella cdy
application/vnd.claymore
application/vnd.commerce-battelle
- 34 -
Diseño de Aplicaciones Web Tema 2
application/vnd.commonspace
application/vnd.comsocaller
application/vnd.contact.cmsg
application/vnd.cosmocaller
application/vnd.ctc-posml
application/vnd.cups-postscript
application/vnd.cups-raster
application/vnd.cups-raw
application/vnd.cybank
application/vnd.dna
application/vnd.dpgraph
application/vnd.dxr
application/vnd.ecdis-update
application/vnd.ecowin.chart
application/vnd.ecowin.filerequest
application/vnd.ecowin.fileupdate
application/vnd.ecowin.series
application/vnd.ecowin.seriesrequest
application/vnd.ecowin.seriesupdate
application/vnd.enliven
application/vnd.epson.esf
application/vnd.epson.msf
application/vnd.epson.quickanime
application/vnd.epson.salt
application/vnd.epson.ssf
application/vnd.ericsson.quickcall
application/vnd.eudora.data
application/vnd.fdf
application/vnd.ffsns
application/vnd.flographit
application/vnd.framemaker
application/vnd.fsc.weblaunch
application/vnd.fujitsu.oasys
application/vnd.fujitsu.oasys2
application/vnd.fujitsu.oasys3
application/vnd.fujitsu.oasysgp
application/vnd.fujitsu.oasysprs
application/vnd.fujixerox.ddd
application/vnd.fujixerox.docuworks
application/vnd.fujixerox.docuworks.binder
application/vnd.fut-misnet
application/vnd.google-earth.kml+xml kml
application/vnd.google-earth.kmz kmz
application/vnd.grafeq
application/vnd.groove-account
application/vnd.groove-identity-message
application/vnd.groove-injector
application/vnd.groove-tool-message
application/vnd.groove-tool-template
application/vnd.groove-vcard
application/vnd.hhe.lesson-player
application/vnd.hp-HPGL
application/vnd.hp-PCL
application/vnd.hp-PCLXL
application/vnd.hp-hpid
application/vnd.hp-hps
application/vnd.httphone
application/vnd.hzn-3d-crossword
application/vnd.ibm.MiniPay
application/vnd.ibm.afplinedata
application/vnd.ibm.modcap
application/vnd.informix-visionary
application/vnd.intercon.formnet
application/vnd.intertrust.digibox
application/vnd.intertrust.nncp
application/vnd.intu.qbo
application/vnd.intu.qfx
application/vnd.irepository.package+xml
application/vnd.is-xpr
application/vnd.japannet-directory-service
application/vnd.japannet-jpnstore-wakeup
application/vnd.japannet-payment-wakeup
application/vnd.japannet-registration
application/vnd.japannet-registration-wakeup
application/vnd.japannet-setstore-wakeup
application/vnd.japannet-verification
application/vnd.japannet-verification-wakeup
application/vnd.koan
- 35 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
application/vnd.lotus-1-2-3
application/vnd.lotus-approach
application/vnd.lotus-freelance
application/vnd.lotus-notes
application/vnd.lotus-organizer
application/vnd.lotus-screencam
application/vnd.lotus-wordpro
application/vnd.mcd
application/vnd.mediastation.cdkey
application/vnd.meridian-slingshot
application/vnd.mif
application/vnd.minisoft-hp3000-save
application/vnd.mitsubishi.misty-guard.trustweb
application/vnd.mobius.daf
application/vnd.mobius.dis
application/vnd.mobius.msl
application/vnd.mobius.plc
application/vnd.mobius.txf
application/vnd.motorola.flexsuite
application/vnd.motorola.flexsuite.adsi
application/vnd.motorola.flexsuite.fis
application/vnd.motorola.flexsuite.gotap
application/vnd.motorola.flexsuite.kmr
application/vnd.motorola.flexsuite.ttc
application/vnd.motorola.flexsuite.wem
application/vnd.mozilla.xul+xml xul
application/vnd.ms-artgalry
application/vnd.ms-asf
application/vnd.ms-excel xls xlb xlt
application/vnd.ms-lrm
application/vnd.ms-pki.seccat cat
application/vnd.ms-pki.stl stl
application/vnd.ms-powerpoint ppt pps
application/vnd.ms-project
application/vnd.ms-tnef
application/vnd.ms-works
application/vnd.mseq
application/vnd.msign
application/vnd.music-niff
application/vnd.musician
application/vnd.netfpx
application/vnd.noblenet-directory
application/vnd.noblenet-sealer
application/vnd.noblenet-web
application/vnd.novadigm.EDM
application/vnd.novadigm.EDX
application/vnd.novadigm.EXT
application/vnd.oasis.opendocument.chart odc
application/vnd.oasis.opendocument.database odb
application/vnd.oasis.opendocument.formula odf
application/vnd.oasis.opendocument.graphics odg
application/vnd.oasis.opendocument.graphics-template otg
application/vnd.oasis.opendocument.image odi
application/vnd.oasis.opendocument.presentation odp
application/vnd.oasis.opendocument.presentation-template otp
application/vnd.oasis.opendocument.spreadsheet ods
application/vnd.oasis.opendocument.spreadsheet-template ots
application/vnd.oasis.opendocument.text odt
application/vnd.oasis.opendocument.text-master odm
application/vnd.oasis.opendocument.text-template ott
application/vnd.oasis.opendocument.text-web oth
application/vnd.osa.netdeploy
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
application/vnd.openxmlformats-officedocument.presentationml.template potx
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
application/vnd.palm
application/vnd.pg.format
application/vnd.pg.osasli
application/vnd.powerbuilder6
application/vnd.powerbuilder6-s
application/vnd.powerbuilder7
application/vnd.powerbuilder7-s
application/vnd.powerbuilder75
- 36 -
Diseño de Aplicaciones Web Tema 2
application/vnd.powerbuilder75-s
application/vnd.previewsystems.box
application/vnd.publishare-delta-tree
application/vnd.pvi.ptid1
application/vnd.pwg-xhtml-print+xml
application/vnd.rapid
application/vnd.rim.cod cod
application/vnd.s3sms
application/vnd.seemail
application/vnd.shana.informed.formdata
application/vnd.shana.informed.formtemplate
application/vnd.shana.informed.interchange
application/vnd.shana.informed.package
application/vnd.smaf mmf
application/vnd.sss-cod
application/vnd.sss-dtf
application/vnd.sss-ntf
application/vnd.stardivision.calc sdc
application/vnd.stardivision.chart sds
application/vnd.stardivision.draw sda
application/vnd.stardivision.impress sdd
application/vnd.stardivision.math sdf
application/vnd.stardivision.writer sdw
application/vnd.stardivision.writer-global sgl
application/vnd.street-stream
application/vnd.sun.xml.calc sxc
application/vnd.sun.xml.calc.template stc
application/vnd.sun.xml.draw sxd
application/vnd.sun.xml.draw.template std
application/vnd.sun.xml.impress sxi
application/vnd.sun.xml.impress.template sti
application/vnd.sun.xml.math sxm
application/vnd.sun.xml.writer sxw
application/vnd.sun.xml.writer.global sxg
application/vnd.sun.xml.writer.template stw
application/vnd.svd
application/vnd.swiftview-ics
application/vnd.symbian.install sis
application/vnd.triscape.mxs
application/vnd.trueapp
application/vnd.truedoc
application/vnd.tve-trigger
application/vnd.ufdl
application/vnd.uplanet.alert
application/vnd.uplanet.alert-wbxml
application/vnd.uplanet.bearer-choice
application/vnd.uplanet.bearer-choice-wbxml
application/vnd.uplanet.cacheop
application/vnd.uplanet.cacheop-wbxml
application/vnd.uplanet.channel
application/vnd.uplanet.channel-wbxml
application/vnd.uplanet.list
application/vnd.uplanet.list-wbxml
application/vnd.uplanet.listcmd
application/vnd.uplanet.listcmd-wbxml
application/vnd.uplanet.signal
application/vnd.vcx
application/vnd.vectorworks
application/vnd.vidsoft.vidconference
application/vnd.visio vsd
application/vnd.vividence.scriptfile
application/vnd.wap.sic
application/vnd.wap.slc
application/vnd.wap.wbxml wbxml
application/vnd.wap.wmlc wmlc
application/vnd.wap.wmlscriptc wmlsc
application/vnd.webturbo
application/vnd.wordperfect wpd
application/vnd.wordperfect5.1 wp5
application/vnd.wrq-hp3000-labelled
application/vnd.wt.stf
application/vnd.xara
application/vnd.xfdl
application/vnd.yellowriver-custom-menu
application/x-123 wk
application/x-7z-compressed 7z
application/x-abiword abw
application/x-apple-diskimage dmg
- 37 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
application/x-bcpio bcpio
application/x-bittorrent torrent
application/x-cab cab
application/x-cbr cbr
application/x-cbz cbz
application/x-cdf cdf cda
application/x-cdlink vcd
application/x-chess-pgn pgn
application/x-core
application/x-cpio cpio
application/x-csh csh
application/x-debian-package deb udeb
application/x-director dcr dir dxr
application/x-dms dms
application/x-doom wad
application/x-dvi dvi
application/x-httpd-eruby rhtml
application/x-executable
application/x-font pfa pfb gsf pcf pcf.Z
application/x-freemind mm
application/x-futuresplash spl
application/x-gnumeric gnumeric
application/x-go-sgf sgf
application/x-graphing-calculator gcf
application/x-gtar gtar tgz taz
application/x-hdf hdf
application/x-httpd-php phtml pht php
application/x-httpd-php-source phps
application/x-httpd-php3 php3
application/x-httpd-php3-preprocessed php3p
application/x-httpd-php4 php4
application/x-httpd-php5 php5
application/x-ica ica
application/x-info info
application/x-internet-signup ins isp
application/x-iphone iii
application/x-iso9660-image iso
application/x-jam jam
application/x-java-applet
application/x-java-bean
application/x-java-jnlp-file jnlp
application/x-jmol jmz
application/x-kchart chrt
application/x-kdelnk
application/x-killustrator kil
application/x-koan skp skd skt skm
application/x-kpresenter kpr kpt
application/x-kspread ksp
application/x-kword kwd kwt
application/x-latex latex
application/x-lha lha
application/x-lyx lyx
application/x-lzh lzh
application/x-lzx lzx
application/x-maker frm maker frame fm fb book fbdoc
application/x-mif mif
application/x-ms-wmd wmd
application/x-ms-wmz wmz
application/x-msdos-program com exe bat dll
application/x-msi msi
application/x-netcdf nc
application/x-ns-proxy-autoconfig pac dat
application/x-nwc nwc
application/x-object o
application/x-oz-application oza
application/x-pkcs7-certreqresp p7r
application/x-pkcs7-crl crl
application/x-python-code pyc pyo
application/x-qgis qgs shp shx
application/x-quicktimeplayer qtl
application/x-redhat-package-manager rpm
application/x-ruby rb
application/x-rx
application/x-sh sh
application/x-shar shar
application/x-shellscript
application/x-shockwave-flash swf swfl
- 38 -
Diseño de Aplicaciones Web Tema 2
application/x-silverlight scr
application/x-stuffit sit sitx
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar tar
application/x-tcl tcl
application/x-tex-gf gf
application/x-tex-pk pk
application/x-texinfo texinfo texi
application/x-trash ~ % bak old sik
application/x-troff t tr roff
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/x-videolan
application/x-wais-source src
application/x-wingz wz
application/x-x509-ca-cert crt
application/x-xcf xcf
application/x-xfig fig
application/x-xpinstall xpi
audio/32kadpcm
audio/3gpp
audio/amr amr
audio/amr-wb awb
audio/amr amr
audio/amr-wb awb
audio/annodex axa
audio/basic au snd
audio/flac flac
audio/g.722.1
audio/l16
audio/midi mid midi kar
audio/mp4a-latm
audio/mpa-robust
audio/mpeg mpga mpega mp2 mp3 m4a
audio/mpegurl m3u
audio/ogg oga ogg spx
audio/parityfec
audio/prs.sid sid
audio/telephone-event
audio/tone
audio/vnd.cisco.nse
audio/vnd.cns.anp1
audio/vnd.cns.inf1
audio/vnd.digital-winds
audio/vnd.everad.plj
audio/vnd.lucent.voice
audio/vnd.nortel.vbk
audio/vnd.nuera.ecelp4800
audio/vnd.nuera.ecelp7470
audio/vnd.nuera.ecelp9600
audio/vnd.octel.sbc
audio/vnd.qcelp
audio/vnd.rhetorex.32kadpcm
audio/vnd.vmx.cvsd
audio/x-aiff aif aiff aifc
audio/x-gsm gsm
audio/x-mpegurl m3u
audio/x-ms-wma wma
audio/x-ms-wax wax
audio/x-pn-realaudio-plugin
audio/x-pn-realaudio ra rm ram
audio/x-realaudio ra
audio/x-scpls pls
audio/x-sd2 sd2
audio/x-wav wav
chemical/x-alchemy alc
chemical/x-cache cac cache
chemical/x-cache-csf csf
chemical/x-cactvs-binary cbin cascii ctab
chemical/x-cdx cdx
chemical/x-cerius cer
chemical/x-chem3d c3d
chemical/x-chemdraw chm
- 39 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
chemical/x-cif cif
chemical/x-cmdf cmdf
chemical/x-cml cml
chemical/x-compass cpa
chemical/x-crossfire bsd
chemical/x-csml csml csm
chemical/x-ctx ctx
chemical/x-cxf cxf cef
#chemical/x-daylight-smiles smi
chemical/x-embl-dl-nucleotide emb embl
chemical/x-galactic-spc spc
chemical/x-gamess-input inp gam gamin
chemical/x-gaussian-checkpoint fch fchk
chemical/x-gaussian-cube cub
chemical/x-gaussian-input gau gjc gjf
chemical/x-gaussian-log gal
chemical/x-gcg8-sequence gcg
chemical/x-genbank gen
chemical/x-hin hin
chemical/x-isostar istr ist
chemical/x-jcamp-dx jdx dx
chemical/x-kinemage kin
chemical/x-macmolecule mcm
chemical/x-macromodel-input mmd mmod
chemical/x-mdl-molfile mol
chemical/x-mdl-rdfile rd
chemical/x-mdl-rxnfile rxn
chemical/x-mdl-sdfile sd sdf
chemical/x-mdl-tgf tgf
#chemical/x-mif mif
chemical/x-mmcif mcif
chemical/x-mol2 mol2
chemical/x-molconn-Z b
chemical/x-mopac-graph gpt
chemical/x-mopac-input mop mopcrt mpc zmt
chemical/x-mopac-out moo
chemical/x-mopac-vib mvb
chemical/x-ncbi-asn1 asn
chemical/x-ncbi-asn1-ascii prt ent
chemical/x-ncbi-asn1-binary val aso
chemical/x-ncbi-asn1-spec asn
chemical/x-pdb pdb ent
chemical/x-rosdal ros
chemical/x-swissprot sw
chemical/x-vamas-iso14976 vms
chemical/x-vmd vmd
chemical/x-xtel xtel
chemical/x-xyz xyz
image/cgm
image/g3fax
image/gif gif
image/ief ief
image/jpeg jpeg jpg jpe
image/naplps
image/pcx pcx
image/png png
image/prs.btif
image/prs.pti
image/svg+xml svg svgz
image/tiff tiff tif
image/vnd.cns.inf2
image/vnd.djvu djvu djv
image/vnd.dwg
image/vnd.dxf
image/vnd.fastbidsheet
image/vnd.fpx
image/vnd.fst
image/vnd.fujixerox.edmics-mmr
image/vnd.fujixerox.edmics-rlc
image/vnd.mix
image/vnd.net-fpx
image/vnd.svf
image/vnd.wap.wbmp wbmp
image/vnd.xiff
image/x-canon-cr2 cr2
image/x-canon-crw crw
- 40 -
Diseño de Aplicaciones Web Tema 2
image/x-cmu-raster ras
image/x-coreldraw cdr
image/x-coreldrawpattern pat
image/x-coreldrawtemplate cdt
image/x-corelphotopaint cpt
image/x-epson-erf erf
image/x-icon ico
image/x-jg art
image/x-jng jng
image/x-ms-bmp bmp
image/x-nikon-nef nef
image/x-olympus-orf orf
image/x-photoshop psd
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
inode/chardevice
inode/blockdevice
inode/directory-locked
inode/directory
inode/fifo
inode/socket
message/delivery-status
message/disposition-notification
message/external-body
message/http
message/s-http
message/news
message/partial
message/rfc822 eml
multipart/alternative
multipart/appledouble
multipart/byteranges
multipart/digest
multipart/encrypted
multipart/form-data
multipart/header-set
multipart/mixed
multipart/parallel
multipart/related
multipart/report
multipart/signed
multipart/voice-message
text/cache-manifest manifest
text/calendar ics icz
text/css css
text/csv csv
text/directory
text/english
text/enriched
text/h323 323
text/html html htm shtml
text/iuls uls
text/mathml mml
text/parityfec
- 41 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
video/3gpp 3gp
video/annodex axv
video/dl dl
video/dv dif dv
video/fli fli
video/gl gl
video/mpeg mpeg mpg mpe
video/mp4 mp4
video/quicktime qt mov
video/mp4v-es
video/ogg ogv
video/parityfec
video/pointer
video/vnd.fvt
video/vnd.motorola.video
video/vnd.motorola.videop
video/vnd.mpegurl mxu
video/vnd.mts
video/vnd.nokia.interleaved-multimedia
video/vnd.vivo
- 42 -
Diseño de Aplicaciones Web Tema 2
video/x-flv flv
video/x-la-asf lsf lsx
video/x-mng mng
video/x-ms-asf asf asx
video/x-ms-wm wm
video/x-ms-wmv wmv
video/x-ms-wmx wmx
video/x-ms-wvx wvx
video/x-msvideo avi
video/x-sgi-movie movie
video/x-matroska mpv mkv
x-conference/x-cooltalk ice
x-epoc/x-sisx-app sisx
x-world/x-vrml vrm vrml wrl
- 43 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
- 44 -
Diseño de Aplicaciones Web Tema 2
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/apache2/ssl.crl/
#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
- 45 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
</VirtualHost>
</IfModule>
- 46 -
Diseño de Aplicaciones Web Tema 2
Anexo IV - openssl_autofirmado.txt
/etc/apache2/tus-ssl# openssl req -new -nodes -keyout tupaginaweb.key -out tupaginaweb.csr
Generating a 1024 bit RSA private key
......................................++++++
.++++++
writing new private key to 'tupaginaweb.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:autofirmado.ssl.empresa-proyecto.com
Email Address []:
- 47 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Instalación de OpenLDAP
El servidor OpenLDAP está disponible en el paquete slapd por tanto, lo instalaremos utilizando apt-
get. También nos conviene instalar el paquete ldap-utils que contiene utilidades adicionales:
// Instalación del servidor LDAP
sudo apt-get install slapd ldap-utils
El servidor LDAP, al igual que todos los servicios en Debian, dispone de un script de arranque y
parada en la carpeta /etc/init.d.
// Arrancar o reiniciar el servidor LDAP
sudo /etc/init.d/slapd restart
- 48 -
Diseño de Aplicaciones Web Tema 2
3) Verifica que el servidor OpenLDAP está activo, por defecto, en el puerto TCP 389
root@debian-servidor-fp:~# netstat -natp | grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1775/slapd
tcp6 0 0 :::389 :::* LISTEN 1775/slapd
4) Configura el servidor OpenLDAP. Los valores utilizados los puedes ver a continuación del
comando
root@debian-servidor-fp:~# dpkg-reconfigure slapd
Omit OpenLDAP config ? No
Domain name : proyecto.com
organisation name : proyecto.com
admin password : admin
admin password : admin
database module to use : HDB
delete database when purging the package ? No
Move the previous database ? Si
Allow LDAPv2 ? No
- 49 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
9) Instala los paquetes necesarios para que Apache funcione con LDAP
root@debian-servidor-fp:~# apt-get install libapache2-mod-vhost-ldap
12) Crea la estructura básica del dominio LDAP mediante la ejecucion de un fichero basica.ldif
root@debian-servidor-fp:~# nano basica.ldif
# Objetos raiz del dominio
dn: dc=proyecto,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: proyecto.com
dc: proyecto
description: Raiz de dominio
# Usuarios
dn: ou=usuarios,dc=proyecto,dc=com
objectClass: organizationalUnit
ou: usuarios
# Grupos
dn: ou=grupos,dc=proyecto,dc=com
objectClass: organizationalUnit
ou: grupos
13) Añadiendo un usuario a LDAP de nombre pruebas y contraseña: 123456 mediante el archivo
usuario.ldif:
root@debian-servidor-fp:~# cat usuario.ldif
# Usuario
dn: uid=pruebas,ou=usuarios,dc=proyecto,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: pruebas
sn: daw02
givenName: Pruebas
cn: Pruebas daw02
displayName: Pruebas DAW02
uidNumber: 10000
gidNumber: 10000
userPassword: 123456
gecos: Pruebas DAW02
loginShell: /bin/bash
homeDirectory: /home/pruebas
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: pruebas.daw02@proyecto.com
initials: PD
- 50 -
Diseño de Aplicaciones Web Tema 2
- 51 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
' opencart ' es la contraseña requerida para iniciar sesión como el usuario
' db_user_opencart ' en MySQL
Tercero, para activar los nuevos cambios ejecuta:
/usr/bin/mysql -h127.0.0.1 -uroot -p -e "flush privileges;"
Alternativamente puedes usar, si lo posees, tu panel de control Web o bien phpMyAdmin para
crear la base de datos ' db_opencart ' y el usuario ' db_user_opencart '
5. Visita la página principal de tu Opencart, por ejemplo: http://www.tienda-virtual.empresa-
proyecto.com/
6. Sigue las instrucciones que aparecen en pantalla.
7. Una vez acabada la instalación borra la carpeta install .
8. Puedes ya visitar tu tienda online en: http://www.tienda-virtual.empresa-proyecto.com/ y tu
panel de administración en: http://www.tienda-virtual.empresa-proyecto.com/admin/
- 52 -
TEMA 3
Contenido
1.- Protección del servidor de aplicaciones. ........................................................................................... 2
2.- Despliegue de aplicaciones en Tomcat. ............................................................................................ 4
2.1.- Creación de una aplicación web. .............................................................................................................5
2.2.- Despliegue de una aplicación web. ..........................................................................................................6
2.3.- Implementar el registro de acceso...........................................................................................................7
2.4.- Sesiones persistentes. .............................................................................................................................8
2.5.- Configurar Tomcat en cluster. .................................................................................................................9
3.- El servidor de aplicaciones JBoss. .................................................................................................... 11
3.1.- Instalación y configuración básica. ........................................................................................................12
3.2.- Despliegue de aplicaciones empresariales. ............................................................................................13
3.3.- Estructura de carpetas de una aplicación empresarial. Archivo EAR. .....................................................15
4.- Construcción y despliegue automático con Ant. ............................................................................. 16
4.1.- Instalación y configuración de Ant. ........................................................................................................17
4.2.- El archivo build.xml. ..............................................................................................................................18
4.3.- El objetivo .jar. ......................................................................................................................................19
4.4.- Despliegue de un archivo WAR. .............................................................................................................20
5.- El gestor de aplicaciones Web de Tomcat. ...................................................................................... 23
5.1.- Configuración del gestor. .......................................................................................................................23
5.2.- Conexión al gestor de aplicaciones web de Tomcat de forma remota. ...................................................24
5.3.- Incluir tareas Ant en Tomcat. .................................................................................................................25
Configuración y administración de servidores de aplicaciones Tema 3
Configuración y administración de
servidores de aplicaciones.
Caso práctico
En la empresa BK programación, Ada, junto con sus empleados Juan y María se ha reunido para
evaluar la posibilidad de configurar uno o dos servidores de aplicaciones para instalar en ellos demos,
o versiones beta (también denominado "betatest", indica un periodo en el que un software está técnicamente acabado, lo
cual significa que no se le añadirán de momento más funciones, y presumiblemente será lo suficientemente estable para
trabajar con normalidad. En contraste, la versión alfa, versión anterior a la beta, es más inestable y no está completa), de las
aplicaciones que desarrollan, de esta manera los clientes, o potenciales clientes, podrían probar los
productos de BK programación antes de adquirirlos.
Como resultado de dicha reunión han concluido que, previo paso a la instalación y puesta en
funcionamiento de servidores de aplicaciones, sería muy importante evaluar muchos parámetros que
afectarían al correcto funcionamiento de los servidores, además de las necesidades de los mismos.
Entre los parámetros a evaluar cabe destacar los siguientes:
Seguridad de los servidores de aplicaciones: medidas de seguridad a aplicar para evitar posibles
ataques o intrusiones.
Dimensionamiento del servidor donde se estudian las necesidades físicas del equipo servidor.
Tipo de servidor a instalar, características específicas del software de servidor seleccionado
(Tomcat, Jboss, etc.).
Despliegue de aplicaciones en el servidor donde habría que establecer qué herramientas se
deberían utilizar.
Administración de las conexiones remotas a los servidores.
Escalabilidad de los servidores, a tener en cuenta en función del número de conexiones
simultáneas que se pueden establecer.
Herramientas de automatización de tareas en el servidor (Ant, etc.).
Debido a la cantidad de parámetros que hay que administrar para poner en correcto funcionamiento
los servidores de aplicaciones, Ada ha decidido que sus empleados se documenten de todos y cada
uno de ellos y, si cabe, la posibilidad realizar algún curso de formación sobre la administración de
servidores de aplicaciones.
-1-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Un servidor de aplicaciones es, usualmente, un software que proporciona una serie de servicios de
aplicación a un número indeterminado de computadoras cliente que acceden a dichos servicios vía
web; las principales ventajas de este tipo de tecnología es la centralización y disminución de la
complejidad en el desarrollo de aplicaciones, sin embargo las aplicaciones web están así más
expuestas a ataques.
Hoy en día existen aplicaciones web para casi todo y que tienen acceso a información muy valiosa
como, por ejemplo, números de tarjetas de crédito, cuentas bancarias, historiales médicos,
información personal, etc. Con lo cual, representan un objetivo interesante al que atacar; estos
ataques se pueden clasificar en base a tres niveles:
Ataques a la computadora del usuario (cliente).
Ataques al servidor.
Ataques al flujo de información que se transmite entre cliente y servidor.
En cada uno de los niveles anteriores es necesario garantizar una seguridad mínima para conseguir la
seguridad de todo el proceso. A nivel de usuario éstos deben contar con navegadores y plataformas
seguras, libres de virus; a nivel del servidor hay que garantizar que los datos no sean modificados sin
autorización (integridad) y que sólo sea distribuida a las personas autorizadas (control de acceso) y,
en lo que se refiere al tránsito de la información, ésta no debe ser leída (confidencialidad),
modificada o destruida por terceros, al mismo tiempo que hay que garantizar un canal de
comunicación fiable que no se interrumpa con relativa facilidad.
Para conseguir aplicaciones web seguras hay que establecer mecanismos que garanticen:
Autenticación: permite identificar, en todo momento, quién es el usuario que está accediendo.
Para conseguirlo existen varios métodos:
Autenticación básica: solicitud de usuario y clave.
Autenticación con certificados.
HTTP DIGEST AUTH (HTTP Autenticación de texto implícita).
HTTP NTLM AUTH (HTTP Autentication Microsoft NT Lan Manager).
Autorización: permite, una vez autenticado, determinar a qué datos y módulos de la aplicación
puede acceder el usuario.
Validación de entradas, ya que se puede manipular el código de validación del lado del cliente.
Inyección de comandos SQL: técnica para explotar aplicaciones web que no validan la
información suministrada por el cliente para generar consultas SQL peligrosas.
Para conseguir aplicaciones web seguras hay que utilizar una serie de mecanismos y herramientas
entre las cuales destacamos:
Deshabilitación de servicios y cuentas no utilizadas.
Actualización del sistema operativo y aplicaciones (parches (Cuando se aplica asociado a software, se trata de
un conjunto de ficheros adicionales al software original de una herramienta o programa informático. Normalmente sirven para
solucionar alguna posible carencia, vulnerabilidad, o defecto de funcionamiento)).
Fortaleza en las contraseñas.
Utilización de Firewalls.
Back-ups periódicas.
-2-
Configuración y administración de servidores de aplicaciones Tema 3
Análisis periódico de logs (registro oficial de eventos durante un rango de tiempo en particular. Para los profesionales en
seguridad informática es usado para registrar datos o información sobre quién, qué, cuándo, dónde y por qué un evento ocurre para
un dispositivo en particular o aplicación).
Verificación periódica de servicios activos.
Cifrado del tráfico.
Establecimiento de políticas de seguridad.
Esta web surge con el objetivo de concienciar y ayudar a la gente para aumentar la seguridad
en la red, en ella aparece, de forma actualizada, amenazas, ataques, recomendaciones de
seguridad, etc.
http://www.seguridadenlared.org/
-3-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Una aplicación web puede ser desplegada empleando uno de los siguientes métodos:
Por medio de archivos WAR .
Editando los archivos web.xml y server.xml , este método es el que se pasa a tratar a
continuación.
Los directorios que forman una aplicación compilada suelen ser: www , bin , src , tomcat , gwt-cache .
La carpeta www contiene a su vez una carpeta, con el nombre y ruta del proyecto, que contiene los
ficheros que forman la interfaz (HTML, js, css...). La carpeta bin contiene las clases de java de la
aplicación.
-4-
Configuración y administración de servidores de aplicaciones Tema 3
6. Copiar el contenido de la carpeta bin de la aplicación en el subdirectorio WEB-INF/classes del
Tomcat.
7. Crear en WEB-INF un fichero de texto llamado web.xml , con las rutas de los servlets utilizados en
la aplicación.
8. Ya puede accederse a la aplicación en el servidor, el modo de hacerlo es poniendo en el
navegador la ruta del fichero HTML de entrada, que estará ubicado en la carpeta de la aplicación
en Tomcat.
Vamos a partir de una máquina con el sistema operativo Debian 6.0.1 en la cual tenemos el servidor
Tomcat corriendo para mostrar el proceso creación y despliegue de aplicaciones. Debido a que
pretendemos montar una plataforma LAMP , por sus ventajas derivadas de las características del
software libre, instalaremos también los siguientes componentes: MySql y PHP .
Recordemos, en primer lugar destacar que, para instalar cualquier versión de Tomcat es necesario
tener instalado JDK (Kit de desarrollo de Java), ya que el objetivo es que las peticiones a Apache se
redirijan a Tomcat empleando un conector proporcionado por Java en este caso.
El servidor de aplicaciones Tomcat cuenta con una serie de ejemplos, tanto de servlets como de JSP,
que sirven de ayuda para aprender a realizar las tareas creación y despliegue de aplicaciones web.
Es muy interesante crear dos variables de entorno: JAVA_HOME que indique la ubicación de los archivos
binarios de Java y CATALINA_HOME que apunta a la ubicación de los scripts (archivo de órdenes o archivo de
procesamiento por lotes, es un programa usualmente simple, que por lo regular se almacena en un archivo de texto plano) de Tomcat,
para ello podemos añadir el siguiente código al archivo /etc/profile .
CATALINA_HOME=/usr/local/apache-Tomcat-6.0.32/
JAVA_HOME=/usr/lib/jvm/java-6-openjdk/jre/
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME
export PATH JAVA_HOME CATALINA_HOME
El lenguaje Javascript se ejecuta del lado del cliente, es un lenguaje interpretado de scripting que no
permite acceder a información local del cliente ni puede conectarse a otros equipos de red.
En primer lugar crearemos una carpeta con el nombre que nos interese para
identificar la aplicación, en este ejemplo hemos optado por Aplic_Web una
estructura como la de la siguiente imagen:
La aplicación que pretendemos desarrollar contiene un archivo al que llamaremos index.jsp muy
sencillo con el siguiente contenido:
<html>
<head><title>C.F. DESARROLLO DE APLICACIONES WEB</title>
<script language="Javascript">
function popup(){
alert("U.T. 3: CONFIGURACION Y ADMINISTRACION DE SERVIDORES DE APLICACIONES");
}
</script>
-5-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
</head>
<body>
<h1 align=center>DESPLIEGUE DE APLICACIONES WEB</h1>
<div align=center>
<form>
<input type="button" value="UNIDAD 3" onclick="popup()">
</form>
</div>
</body>
</html>
para acabar, solamente nos quedaría hacer una copia de la carpeta de nuestra aplicación en
$CATALINA_HOME/webapps y si, posteriormente desde un navegador, accedemos en local a
http://127.0.0.1:8080/Aplic_Web tendríamos la aplicación funcionando.
Los WARs simplemente son archivos Java de una aplicación web con una extensión diferente para
diferenciarlos de los comunmente usados JARs.
Antes de la especificación Servlet 2.2, era bastante diferente desplegar servlets entre diferentes
contenedores de servlets, anteriormente también llamados motores servlet. La especificación 2.2
estandarizó el despliegue entre contenedores, llevando así la portabilidad del código Java un paso
más allá.
El método más sencillo para desplegar una aplicación, que sobre todo se utiliza durante la etapa de
desarrollo de la misma, es el realizado en el punto anterior, es decir, copiar la carpeta
correspondiente a nuestra aplicación en la carpeta $CATALINA_HOME/webapps , teniendo en cuenta que
la variable $CATALINA_HOME es la ruta de los scripts que emplea Tomcat.
Siguendo con la aplicación desarrollada en el punto anterior ( Aplic_Web ), vamos a crear un fichero
descriptor del despliegue web.xml que es el encargado de describir las características de despliegue
de la aplicación.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
Una vez consideramos terminada nuestra aplicación web podremos generar el archivo .WAR
perteneciente a la aplicación, para ello podemos aplicar los siguentes comandos:
-6-
Configuración y administración de servidores de aplicaciones Tema 3
#javac -d WEB-INF/classes *.java este comando tiene como finalidad la compilación de las clases
Java de nuestra aplicación.
#jar cvf Aplic_Web.war WEB-INF para crear el archivo .WAR .
Para conseguir obtener y poder configurar los registros de acceso a un servidor de aplicaciones
Tomcat, como es nuestro caso, empezaremos hablando de las válvulas de registro de acceso de
Tomcat, ya que será el método que emplearemos.
Las válvulas del Tomcat son una tecnología introducida a partir de Tomcat 4 que permite asociar una
instancia de una clase Java a un contenedor " Catalina ". Esta configuración permite que la clase
asociada actúe como un pre-procesador de las peticiones. Estas clases se llaman válvulas, y deben
implementar la interfaz " org.apache.catalina.Valve " interface o extender de la clase
" org.apache.catalina.valves.ValveBase ". Las válvulas son propias de Tomcat y no pueden ser usadas
en otros contenedores de servlet.
-7-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Request Dumper : es una herramienta de depuración que escribe en el log el detalle de cada
petición realizada.
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
Cualquier acceso a localhost:8080 tendrá asociado una serie de entradas en los logs.
Single Sign On : cuando queremos que los usuarios puedan identificarse en cualquier aplicación
de nuestro virtual host, y que su identidad sea reconocida por cualquier aplicación que esté en
ese host.
<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
Podemos implementar los ejemplos anteriores en $CATALINA_HOME/conf/server.xml , de este
modo dichos cambios afectarán a cualquier aplicación desplegada en el servidor.
Las sesiones activas por parte de clientes a aplicaciones web alojadas en servidores web Tomcat, por
defecto, están configuradas para mantenerse en caso de posibles pérdidas de conexión con el
servidor o posibles reinicios del mismo; a pesar de todo ello es posible establecer un control mayor
sobre dichas sesiones.
Por lo que respecta a las sesiones inactivas (pero todavía no caducadas) es posible configurarlas de
forma que se almacenen en disco liberando, como consecuencia de ello, los recursos de memoria
asociados. Al parar Tomcat las sesiones activas se vuelcan a disco de manera que, al volver a
arrancarlo, se podrán restaurar.
Las sesiones con un tiempo de vida que supere un límite se copian automáticamente a disco por
seguridad para evitar posibles bloqueos de sesión.
Para configurar las sesiones persistentes tendremos que gestionar el elemento <Manager> como un
subelemento de <Context> de foma que podemos actuar a dos niveles en función de si pretendemos
que la configuración establecida se aplique a todas las aplicaciones del servidor o a una aplicación
concreta.
Si configuramos las sesiones persistentes de forma global tenemos que manipular el archivo
/conf/context.xml , mientras que si queremos configurar las sesiones a nivel local a una aplicación
web determinada tendríamos que adaptar el archivo <CATALINA_HOME>/conf/context.xml
correspondiente a la aplicación.
Un ejemplo de configuración podría ser el siguiente (se emplean comentarios para explicar cada uno
de los parámetros):
<Context>
<!-- classname especifica la clase del servidor que implementa el gestor, es recomendable
utilizar el org.apache.catalina.session.PersistentManager -->
<Manager className="org.apache.catalina.session.PersistentManager">
<!--saveOnRestart=true para indicar que se guarden todas las sesiones al reiniciar el
servidor -->
saveOnRestart="true"
-8-
Configuración y administración de servidores de aplicaciones Tema 3
<!--maxActiveSession cuando se supera el límite aquí establecido se comienzan a enviar a
disco las nuevas sesiones. Se establece un valor -1 para indicar ilimitadas sesiones-->
maxActiveSession="3"
<!--minIdleSwap establece el número mínimo de segundos que transcurren antes de que una
sesión pueda copiarse al disco duro -->
minIdleSwap="0"
<!--maxIdleSwap indica el número máximo de segundos que transcurren antes de que una
sesión pueda copiarse al disco duro -->
maxIdleSwap="60"
<!--maxIdleBackup para indicar el número de segundos desde que una sesión estuvo activa
por última vez hasta que se envíe al disco. La sesión no es eliminada de memoria. Permite
restauración de la sesión en caso de caída del servidor. -->
maxIdleBackup="5">
<!--Store indica cómo y donde almacenar la sesión, están disponibles las siguientes
implementaciones: org.apache.catalina.session.FileStore y
org.apache.catalina.session.JDBCStore -->
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
</Context>
Las soluciones de clustering típicas ofrecen un paradigma de servidor que consiste en ofrecer un
sistema basado en ejecución distribuida, a pesar de que existe limitación respecto a la escalabilidad,
podemos observar el esquema de Jakarta Tomcat server engine works.
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
El conector del servidor de cluster recibe la petición desde los clientes, y el procesador del servidor
de cluster encapsula las peticiones en los objetos " RequestEntry " y los escribe en JavaSpace . El
-9-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
conector del Worker del cluster toma dichas peticiones y el procesador del worker del cluster
resuelve las peticiones.
Para establecer una configuración de cluster en Tomcat podremos seguir los siguientes pasos:
Todos los atributos de sesion deben implementar java.io.Serializable .
Descomentar el elemento Cluster en server.xml .
Descomentar Valve ( ReplicationValve ) en server.xml
Si las múltiples instancias de Tomcat están en la misma máquina el parámetro tcpListenPort
tiene que ser único para cada una de las instancias.
Establecer en el archivo web.xml el elemento <distributable/> o bien definirlo de forma <Context
distributable="true"/> .
El atributo jvmRoutes tiene que estar definido en el " Engine " <Engine name="Catalina"
jvmRoute="nodeX"> estableciendo su valor al nombre de la instancia en el cluster.
Sincronizar la hora de todos los nodos con un servicio NTP .
Configurar el parámetro loadbalancer en modo " sticky session ".
Esta web documenta los pasos a seguir para montar un cluster horizontal formado por dos
servidores con una instancia de Tomcat corriendo en cada uno de ellos.
http://es.wikibooks.org/wiki/Cluster_Tomcat_HOWTO
- 10 -
Configuración y administración de servidores de aplicaciones Tema 3
Mientras el Tomcat es un Servlet Container , JBoss es un Application Server, que soporta funciones
de J2EE, las más importantes son los EJB's y el clustering. Tomcat por sí solo simplemente sirve para
JSP's y servlets.
Uno de los rasgos más importantes de JBoss es su apoyo a la implementación "en caliente". Lo que
significa es que implementar un nuevo EJB es tan simple como copiar el archivo correspondiente en
el directorio correspondiente. Si esto se hace mientras el bean ya está cargado, JBOSS lo descarga
automáticamente, y entonces carga la nueva versión.
JBoss está compuesto por dos partes: un " Servlet Engine " y un " EJB Engine ", dentro del " Servlet
Engine " se ejecutan exclusivamente las clásicas aplicaciones de un servidor (JSP's y Servlets),
mientras el " EJB Engine ( Container )" es reservado para aplicaciones desarrolladas alrededor de EJB's
o Enterpise Java Bean's.
El creador de la primera versión de JBoss fué Marc Fleury quién fundó una empresa de servicios
llamada JBoss Inc., adquirida en 2006 por Red Hat.
- 11 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Por ejemplo, el juego de los Sims online utiliza JBoss así como otros juegos multiusuario.
Vamos a partir de una máquina Debian 6.0.1 Squeeze, en la que realizaremos el proceso de
instalación y cónfiguración básica del servidor JBoss y que vamos a estructurar en los siguientes
pasos:
1. Descarga e instalación de Java Development Kit (JDK): En primer lugar, destacar que, para
instalar cualquier versión de JBoss, es necesario tener instalado JDK (Kit de desarrollo de Java),
ya que se trata de un servidor de aplicaciones basado e implementado al 100 % en Java, como se
ha dicho anteriormente, y puede ser ejecutado en cualquier sistema en el que se encuentre
operativo un JDK en su versión 1.5 o superior. Empezamos buscando el paquete de Java que
nos puede interesar. Con el siguiente comando obtendríamos la lista del entorno Java debido
a que Debian proporciona varias implementaciones, cada uno de estos paquetes tiene un
entorno de desarrollo (JDK) y un tiempo de ejecución conocido (JRE o Java Virtual Machines
JVM):
#aptitude search "?provides(java-runtime)"
2. Luego realizamos la instalación de esos paquetes empleando el comando siguiente, ello no
supondrá ningún tipo de complicación ya que se encuentran accesibles desde el repositorio
que tenemos por defecto:
#apt-get install default-jre openjdk-6-jdk
Para instalar la versión JDK de Sun (ahora ya de Oracle) en Debian 6 (Squeeze) tenemos que
agregar un repositorio, para ello editamos el archivo sources.list mediante el siguiente
comando:
#nano /etc/apt/sources.list y agregamos la siguiente línea:
deb http://ftp.ch.debian.org/debian/ squeeze main non-free
guardamos el archivo y, a continuación, ejecutamos el comando: #aptitude update ó #apt-get
update y, una vez se realice la actualización, instalaremos los siguientes paquetes Java de Sun
mediante el siguiente comando:
#aptitude install sun-java6-jre sun-java6-jdk
y, una vez instalado, lo seleccionamos mediante:
#update-alternatives –config java
que mostrará las opciones disponibles y seleccionaremos el número de opción que contiene la
máquina virtual de Java de Sun/Oracle.
3. Descarga e instalación de JBoss Application Server 6.0: Se pueden descargar las distintas
versiones del servidor JBoss del siguiente enlace, en este caso hemos decidido descargar el
paquete jboss-as-distribution-6.0.0.Final.zip.
http://www.jboss.org/jbossas/downloads/
Para proceder a su instalación simplemente nos situamos en la carpeta donde deseemos
instalarlo, en nuestro caso lo haremos en " /usr/local/jboss/ " y, una vez allí, descomprimimos
el paquete mediante:
#unzip jboss-as-distribution-6.0.0.Final.zip
4. Crear el usuario de JBoss que posee y dirige JBoss: Es recomendable ejecutar JBoss con una
cuenta de usuario no root, con privilegios mínimos. Para ello crearemos un grupo JBoss y un
- 12 -
Configuración y administración de servidores de aplicaciones Tema 3
usuario llamado JBoss al que pondremos contraseña y agregaremos al grupo creado; podemos
hacerlo del siguiente modo:
#groupadd jboss
#useradd -s /bin/bash -g jboss jboss
#passwd jboss
#usermod -d /usr/local/jboss/jboss-6.0.0.Final/ jboss
5. Establecer las variables de entorno JAVA_HOME y JBOSS_HOME : Estas variables son interesantes
para indicar las rutas donde se ha instalado Java y JBoss. Estás rutas serán empleadas en los
archivos de configuración de dichas aplicaciones, para ello simplemente agregamos, en nuestro
caso, el siguiente contenido al archivo /etc/profile :
JAVA_HOME=/usr/lib/jvm/java-6-sun/jre
JBOSS_HOME=/usr/local/jboss/jboss-6.0.0.Final
PATH=$PATH:$JAVA_HOME/bin:$JBOSS_HOME/bin
export PATH JAVA_HOME JBOSS_HOME
posteriormente ejecutaríamos #source /etc/profile para que el sistema recoja el contenido de
las variables creadas sin necesidad de reiniciar el equipo.
6. Crear un script para automatizar Jboss con los parámetros/funcionalidades
"start/stop/restart" y configurar JBoss para que se ejecute como un servicio: Existe un script
llamado " jboss_init_redhat.sh " en la carpeta $JBOSS_HOME/bin que nos va a servir para crear el
script que administre el servidor de JBoss; para ello copiamos dicho script a /etc/init.d y lo
renombramos a jboss #cp $JBOSS_HOME/bin/jboss_init_redhat.sh /etc/init.d/jboss luego
editamos el fichero copiado, en donde tenemos que reemplazar las siguientes líneas
adaptándolas a nuestra configuración, en nuestro caso:
JBOSS_HOME=${JBOSS_HOME:-"/usr/local/jboss/jboss-6.0.0.Final"}
JAVAPTH=${JAVAPTH:-"/usr/java/jdk1.6.0_24"}
y añadir la línea JBOSS_HOST="0.0.0.0" permitiendo así acceder a JBoss desde cualquier IP.
7. Acceder a la consola de administración de JBoss: Asegurarse que JBoss se ha iniciado y de que
conseguimos acceder a la consola JBoss desde las siguientes direcciones: http://ip_equipo:8080
y también http://localhost:8080 si se accede desde el propio servidor.
8. Cambiar la contraseña de administrador de JBoss:
Editamos para tal fin el archivo " /usr/local/jboss-
6.0.0.Final/server/default/conf/props/jmx-console-
users.properties " en donde introducimos la
contraseña que decidamos a continuación de admin= .
- 13 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Las soluciones de JBoss Enterprise Middleware se distribuyen vía las "JBoss Subscription", que
incluyen el software certificado y actualizaciones, herramientas de gestión, políticas de
mantenimiento a largo plazo y un soporte técnico líder en la industria. Las suscripciones están
disponibles tanto para uso en producción como para desarrollo.
Las plataformas JBoss Enterprise, que se detallan a continuación, integran múltiples proyectos y
componentes, los más populares de la comunidad JBoss.org en distribuciones certificadas, estables y
seguras, con una única vía de parches y actualizaciones.
JBoss Enterprise Application Platform.
Diseñada para construir, desplegar y albergar servicios, y aplicaciones Java.
Integra el servidor de aplicaciones JBoss AS en cluster, un sistema de mapeo y persistencia
O/R y, además, un potente framework para la construcción de aplicaciones de nueva
generación Web 2.0.
JBoss Enterprise Web Platform.
Para aplicaciones web en Java y aplicaciones ricas basadas en Internet (RIA).
JBoss Enterprise Web Server.
Una única solución empresarial basada en open source para servidores web basados en
tecnología Apache y Tomcat.
JBoss Enterprise Portal Platform.
Diseñado para construir y desplegar portales para la interacción de usuario SOA y la
presentación personalizada.
Integra un framework de portal, funcionalidades CMS con workflow y JBoss Enterprise
Application Platfrom.
JBoss Enterprise SOA Platform.
Integra aplicaciones y orquesta servicios para automatizar procesos de negocio en una
arquitectura orientada a servicios.
Se construye sobre un bus de servicios e integra un motor de reglas, automatización de
proceso de negocio y JBoss Enterprise Application Platform.
JBoss Enterprise BRMS.
Un sistema basado en open source empresarial para administrar reglas de negocio que
facilita el desarrollo, el acceso y la gestión de los cambios de políticas y reglas de negocio.
JBoss Enterprise Data Services Platform.
Acaba con la desconexión entre los diversos orígenes de datos empresariales que existen y
los innovadores formatos de datos que requieren los nuevos proyectos, aplicaciones y
arquitecturas.
La estructura de una aplicación web en su forma más sencilla, debe contener la siguiente estructura
de directorios:
META-INF/
manifest.mf
WEB-INF/
classes/
src/
lib/
web.xml
conteniendo la carpeta META-INF , en aplicaciones .jar , el archivo manifest.mf , que contiene la lista
de contenidos de la aplicación, y que son generados al momento de crearla. El directorio WEB-INF
contiene todos los archivos necesarios para ejecutar la aplicación, y estructura su contenido en las
carpetas classes que contiene las clases compiladas para la aplicación, lib con las librerías
necesarias para la aplicación y src, con el código fuente de la aplicación.
Una vez que la aplicación JEE está correctamente construida, se realiza el empaquetado con el
comando:
- 14 -
Configuración y administración de servidores de aplicaciones Tema 3
#jar cvf nombre_aplicacion.jar carpetas/ficheros_a_empaquetar
Una vez tenemos la aplicación .jar para desplegarla, únicamente la copiamos a la carpeta
" $JBOSS_HOME/server/default/deploy " y el propio JBoss nos dará un mensaje similar a deploy,
ctxPath = / nombre_aplicacion , lo que quiere decir que la aplicación ha sido desplegada
correctamente; esto se conoce como despliegue en caliente.
Una aplicación empresarial Java EE (archivo .EAR ) es un conjunto de módulos, siendo un módulo una
aplicación web completa (empaquetada en un archivo .war ) o conjunto de objetos distribuidos EJBs
(empaquetados en un archivo .jar ).
Podemos resumir que la estructura del archivo EAR es:
/*.war : Archivos war.
/*.jar : Archivos (ejb) jar.
/META-INF/application.xml : Descriptor de despliegue del módulo EAR , en donde se dan de alta y
se declaran el nombre y descripción de la aplicación que se despliega, y los diferentes módulos
web y EJB que forman la aplicación.
Vamos a suponer una estructura lo más sencilla posible para una aplicación
web como la siguiente, y que es la que constituye el archivo
" aplicacion.war ":
donde observamos una página estática " index.html " y un descriptor del despliegue " web.xml ", a
partir de esta estructura pretendemos construir nuestro propio archivo EAR que contendrá un solo
archivo WAR con una página HTML estática.
Una vez situados en la carpeta " aplicacion ", mediante el comando #jar cvf aplicacion.war *
generaremos el archivo .WAR correspondiente a la aplicación; podremos comprobar que se trata de
un formato similar a los archivos .zip probando a abrirlo con un programa compresor.
Para construir el archivo .EAR , como mínimo, tendremos que crear un descriptor de despliegue al
que llamaremos " aplicacion.xml ", para ello creamos una carpeta llamada
" temporal " en donde situamos el archivo " aplicacion.war "; en la misma
ruta creamos una carpeta llamada " META-INF " donde vamos a crear el
descriptor; quedando la estructura del siguiente modo:
Nos situamos dentro de la carpeta " temporal " y creamos el archivo .ear mediante el comando:
#jar cvf aplicacion.ear *
- 15 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
ANT (siglas de "Another Neat Tool", en español "Otra Herramienta Pura", que en inglés significan
"hormiga") fue creado por James Duncan Davidson mientras realizaba la transformación del proyecto
Solar de Sun Microsystems en código abierto (concretamente la implementación del motor
JSP/Servlet de Sun, que luego se llamaría Jakarta Tomcat).
Apache Ant es una herramienta usada en programación para la realización de tareas mecánicas y
repetitivas, normalmente se centra en la fase de compilación y construcción (build). Es similar al
" make " empleado en Linux, pero desarrollado en Java; posee la ventaja de no depender de los
comandos shell de cada sistema operativo, ya que se basa en archivos de configuración XML y clases
Java, siendo idónea como solución multi-plataforma.
Trabajar sin Ant implica una compilación manual de todos los ficheros .java (sin un control de los
que han sido modificados y de los que no) incluir los classpath relativos adecuados, tener los
ficheros .class mezclados con el código fuente...; sin embargo con Ant, en el fondo, no estás más
que automatizando tareas, para que, al final, con un solo comando, puedas compilar desde cero tu
proyecto, ejecutar pruebas unitarias, generar la documentación, empaquetar el programa…
- 16 -
Configuración y administración de servidores de aplicaciones Tema 3
aplicaciones web
Ensamblado = construcción + despliegue
Similar a la herramienta make de linux
Se ocupa de:
Compilación
¿Para qué sirve? Generación de documentación
Empaquetamiento
Ejecución…
Automatiza tareas, para que al final con un solo comando:
Puedas compilar desde cero tu proyecto,
ejecutar pruebas unitarias,
Ventajas generar la documentación,
empaquetar el programa…
No depende de los comandos Shell de cada sistema operativo, ya que se basa
en archivos XML y clases Java, siendo idónea como sulución multi-plataforma.
Funciona a partir de un script de ensamblado en formato XML llamado
build.xml, definido en base a proyecto, targets y tasks
Proyecto
Uno por archivo y contiene targets
¿Cómo funciona? Target
Con un nombre y dependencias hacia otros targets
Contiene un conjunto de tasks
Tasks
Operaciones básicas (javac, java, jar, etc)
En esta página podemos encontrar toda la información que nos pueda interesar para
comenzar a trabajar con la herramienta Ant.
http://ant.apache.org/
recordemos que, como requisito para la instalación de Ant, es imprescindible una versión JDK 1.4 ó
superior.
Posteriormente procederemos a la descargar del paquete binario de Ant, que podemos descargarlo
de la siguiente forma:
#wget http://ant.apache.org/bindownload.cgi/apache-ant-1.8.2-bin.tar.gz
luego movemos la carpeta " apache-ant-1.8.2 " creada a " /usr/local ".
- 17 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
PATH=$PATH:$ANT_HOME/bin
y luego, para que el sistema recoja los cambios realizados, empleamos el comando: #source
/etc/profile .
Para comprobar que ant se ha instalado correctamente desde una consola de shell ejecutamos el
comando siguiente: #ant y deberíamos obtener un mensaje similar a:
Buildfile: build.xml does not exist!
Build failed
con lo que la herramienta ant estaría correctamente instalada y configurada para desempeñar su
función en nuestra máquina.
En el siguiente vídeo podemos ver que se muestra cómo realizar la instalación del paquete
Ant en un equipo con sistema operativo Microsoft Windows 7.
http://www.youtube.com/watch?feature=player_embedded&v=bcY4ZF1jt4o
La primera parte del vídeo nos explica cómo descargar el paquete Ant desde su web de
descarga, en dicha página podemos observar varios formatos y revisiones para el paquete
Ant y, en nuestro caso, se selecciona el .zip y se realiza la descarga del mismo.
Luego se extrae el archivo .zip descargado en la carpeta que nos interese, en este caso
"c:\kwit\apache-ant-1.8.2", en donde vemos la estructura de carpetas que Ant contiene,
entre otras, bin, docs, etc, lib...
Una vez instalado el paquete se pasa a configurar las variables de entorno de la aplicación;
para ello se accede a "Panel de control, configuraciones avanzadas y variables de entorno",
se selecciona la variable PATH y se actualiza su valor con la ruta donde se ha instalado Ant
seguido de \bin, es decir, para este caso concreto sería: "c:\kwit\apache-ant-1.8.2\bin" y,
por último, se abre un intérprete de comandos empleando el comando cmd y, mediante la
orden ant -version se comprueba que la instalación ha sido correcta y que queda la
aplicación operativa.
- 18 -
Configuración y administración de servidores de aplicaciones Tema 3
Pasamos a ver un simple ejemplo de archivo build.xml :
<?xml version="1.0"?>
<target name="compilar">
<javac srcdir="${fuente}" destdir="${destino}" />
</target>
</project>
Este sencillo fichero requiere poca explicación, simplemente declaramos el proyecto indicando, la
acción a realizar por defecto ( default="compilar" ), e indicamos que el directorio base es el actual
( basedir="." ).
Después indicamos en sendas etiquetas property los directorios de origen y de destino ( property
name="fuente" value="." y property name="destino" value="classes" ).
Por último declaramos un target llamado compilar, que es el que hemos declarado como por
defecto.
En este objetivo tenemos una única tarea, la de compilación javac , a la que por medio de los
atributos srcdir y destdir le indicamos los directorios fuente y destino, que recogemos de las
propiedades anteriormente declaradas con ${fuente} y ${destino} .
Lo único que nos queda es compilar nuestro código, así que, simplemente, estando situados en el
directorio donde tenemos nuestro build.xml , desde una ventana de MS-DOS o terminal GNU/Linux,
podemos hacer:
#[PATH_TO_ANT]ant
Esto funciona así porque hemos declarado compilar como el objetivo por defecto, aunque podría ser
otro así que por regla general pondríamos:
#[PATH_TO_ANT]ant nombre_objetivo
Ant se basa en ficheros XML, normalmente configuramos el trabajo a hacer con nuestra aplicación en
un fichero llamado build.xml .
Ant, al igual que otras herramientas de construcción, se basa en el concepto de objetivos o targets
cuya definición engloba tanto las dependencias previas como los pasos a seguir para conseguirlo.
Vamos a comenzar definiendo un objetivo de preparación llamado init que será el encargado de
crear un directorio classes donde guardaremos los ficheros " .class " resultantes de la compilación y
el directorio build para el .jar final. Para ello basta incluir dentro de <project> las siguientes líneas:
<target name="init">
<mkdir dir="classes" />
<mkdir dir="build" />
</target>
Como podemos ver los objetivos se delimitan con etiquetas <target> y un nombre. Dentro de ellos se
enumeran los pasos que se han de seguir para alcanzar el objetivo, en este caso ha de crear
directorios.
- 19 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
init:
[mkdir] Created dir: /home/profesor/proyecto/classes
[mkdir] Created dir: /home/profeosr/proyecto/build
BUILD SUCCESSFUL
Total time: 0 seconds
Es hora de compilar nuestro proyecto, vamos a definir el objetivo compile . Ahora bien, la compilación
depende de la creación del directorio " classes "que se realiza en el objetivo anterior. Con esto en
cuenta basta con incluir:
<target name="compile" depends="init">
<javac srcdir="src" destdir="classes" />
</target>
La dependencia se fija en la declaración del target de tal manera que se garantiza su cumplimiento
antes de comenzarla. Nuestro código está en el directorio " src " y el resultado de la compilación se
lleva al directorio " classes ".
Importante notar que esta vez estamos usando <javac> esto es lo que Ant denomina tarea. Hay
muchas tareas predefinidas.
Con nuestro proyecto compilado vamos a generar el .jar que distribuiremos haciendo uso de un
nuevo objetivo llamado build .
<target name="build" depends="compile">
<jar destfile="build/proyecto.jar" basedir="classes" />
</target>
Comprobamos que hay una dependencia de compile y se utiliza la tarea jar que se encarga de
empaquetar todo el contenido del directorio classes en el fichero proyecto.jar .
Finalmente incluiremos un nuevo objetivo para limpiar todo el entorno, el objetivo clean :
<target name="clean">
<delete dir="classes" />
<delete dir="build" />
</target>
Elimina los directorios de trabajo dejando el entorno limpio del proceso de compilación. Resumiendo
nuestro fichero build.xml es:
<project name="Proyecto">
<target name="init">
<mkdir dir="classes" />
<mkdir dir="build" />
</target>
<target name="compile" depends="init">
<javac srcdir="src" destdir="classes" />
</target>
<target name="build" depends="compile">
<jar destfile="build/proyecto.jar" basedir="classes" />
</target>
<target name="clean">
<delete dir="classes" />
<delete dir="build" />
</target>
</project>
- 20 -
Configuración y administración de servidores de aplicaciones Tema 3
Un módulo web es la más pequeña unidad de un recurso web que se pueda utilizar y desplegar. Un
módulo web Java EE corresponde con una aplicación web, como se define en la especificación de
Java Servlet.
Además de los componentes web y los recursos web, un módulo web puede contener otros ficheros:
Clases utilitarias del lado del servidor (beans (componente software que tiene la particularidad de ser reutilizable y
así evitar la tediosa tarea de programar los distintos componentes uno a uno) para bases de datos, carritos de
compras y demás). A menudo estas clases cumplen con la arquitectura JavaBeans .
Clases del lado del cliente (applets (componente de una aplicación que se ejecuta en el contexto de otro programa, por
ejemplo un navegador web) y clases utilitarias).
Un módulo web tiene una estructura específica. El directorio más alto de la jerarquía de directorios
de un módulo web es el raíz de documento de la aplicación. Es donde las páginas JSP, clases y
archivos del lado del cliente, y los recursos estáticos como imágenes, son almacenados.
El directorio raíz de los documentos contiene un subdirectorio llamado WEB-INF , que contiene los
siguientes ficheros y directorios:
web.xml : El descriptor de despliegue de aplicación.
classes : Un directorio que contiene las clases del lado del servidor: componentes Servlets, clases
utilitarias y JavaBean.
tags : Un directorio que contiene ficheros de etiquetas, que son implementaciones de librerías de
etiquetas.
lib : Un directorio que contiene los archivos JAR de las librerías llamadas por las clases del lado
del servidor.
Un módulo web debe ser empaquetado en un WAR en ciertos escenarios de despliegue y cuando se
quiera distribuir el módulo web. Se empaqueta un módulo web en un WAR ejecutando el comando
jar en un directorio ubicado en el formato de un módulo, utilizando la utilidad Ant o utilizando la
herramienta IDE de su elección.
Un módulo web puede ser desplegado como una estructura de ficheros sin empaquetar o puede ser
empaquetado en un fichero JAR conocido como un archivo web ( WAR ). Dado que el contenido y uso
de los ficheros WAR difieren de aquellos ficheros JAR , el nombre del fichero WAR utiliza una extensión
.WAR . El módulo web descrito es portátil, se puede desplegar en cualquier contenedor web que
cumpla con la especificación Java Servlet.
Existen una serie de tareas para Ant que podemos utilizar para la gestión de aplicaciones, entre las
cuales destacamos:
<deploy> : Despliega una aplicación web.
<start> : Inicia una aplicación web.
<stop> : Para una aplicación.
<undeploy> : Repliega (desinstala) una aplicación.
<trycatch> : Evita que falle un build aunque falle alguna tarea.
Se pueden emplear diversos tipos de servidores de aplicaciones web junto con la herramienta Ant,
por ejemplo JBoss o Tomcat.
- 21 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Para desplegar un WAR con la herramienta Ant, abrimos una ventana de terminal o línea de
comando en el directorio donde se ha construido y empaquetado el WAR y ejecutamos ant deploy.
- 22 -
Configuración y administración de servidores de aplicaciones Tema 3
Mediante el enlace " Tomcat Manager " accedemos al gestor de aplicaciones Web de Tomcat. Esta
página permite desplegar un proyecto contenido en un fichero de extensión war , como ya hemos
visto en el punto "2.2 Despliegue de una aplicación web" de este tema, o simplemente copiar la
carpeta que contiene de la aplicación a la carpeta webapps que se encuentra en el directorio de
instalación deTomcat.
Vamos al Tomcat Manager y allí podremos ver un listado de las aplicaciones web que hay disponibles
en el servidor. Podemos comprobar, en nuestro caso, que si tenemos en la carpeta
usr/local/apache-Tomcat-6.0.32/webapps/ la carpeta de la aplicación " Aplic_Web " que desarrollamos
al principio de este tema, ya se mostraría en el listado que el gestor de aplicaciones de Tomcat nos
ofrece, o simplemente accediendo desde un navegador a la URL:
http://ip_servidor:8080/nombre_aplicacion (en el caso genérico), para nuestro caso podemos
probar con http://localhost:8080/Aplic_Web .
Si estás trabajando como administrador de sistemas en una empresa (supongamos que esBK
programación), en la que eres el encargado de administrar, entre otras, un máquina en la que hay un
servidor de aplicaciones web Tomcat.
¿Cómo solicitarías a los desarrolladores de aplicaciones que te enviasen las aplicaciones a desplegar
en dicho servidor?
- 23 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Podemos asegurar Tomcat estableciendo que se permita el acceso a este contexto únicamente a las
direcciones IP de los equipos desde los que operan los administradores, esto lo podemos configurar
en el archivo: $CATALINA_HOME/work/Catalina/localhost/manager/context.xml .
<Context path="/manager" privileged="true" antiResourceLocking="false" docBase="/opt/apache-
tomcat6/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,
direccion_ip1, direccion_ip2" />
</Context>
Para acceder a la administración de Tomcat es necesario crear el rol " manager ", " admin " y
usuario/s con dicho rol, para ello es necesario editar el archivo de usuarios de Tomcat
$CATALINA_HOME/conf/Tomcat-users.xml .
- 24 -
Configuración y administración de servidores de aplicaciones Tema 3
Recibe peticiones en protocolos específicos como AJP que son enviados por el frontend.
2. Standalone:
No hay un servidor web que actúe de frontend.
Todos los contenidos son servidos por Tomcat.
Recibe peticiones HTTP.
Los conectores son los componentes que proporcionan la interfaz externa al servidor, concretamente
el conector HTTP1.1 basado en Coyote es el conector por defecto para Tomcat. Los conectores se
definen en el archivo:
$CATALINA_HOME/conf/server.xml , aquí tenemos un ejemplo:
<Conector port="8080"
protocol="HTTP/1.1"
maxTherads="150"
connectionTimeout="2000"
redirectPort="8443"/>
debido a establecer medidas de seguridad para conexiones web al servidor, podremos configurar
para un conector HTTP/1.1 con SSL lo siguiente:
<Conector port="8080"
protocol="HTTP/1.1"
maxTherads="150"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"/>
en donde vemos que se han establecido los atributos scheme para el protocolo, y secure para
establecer que se trata de un conector SSL.
Tomcat define una serie de librerías que le permiten automatizar tareas como el despliegue y
repliegue de aplicaciones web, mediante Ant .
Para integrar las dos herramientas anteriores podemos seguir las siguientes operaciones:
Descargar Ant .
Descomprimir el fichero.
Configurar las variables de entorno ANT_HOME para que apunte a la raíz de la distribución.
Configurar la variable PATH para añadir la ruta hasta el directorio <ANT_HOME>/bin .
- 25 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Para instalar una aplicación web, se le indica a Tomcat Manager que un nuevo contexto está
disponible, empleando para ello el comando #ant install que funciona tanto con archivos .WAR
como si se indica la ruta al directorio de la aplicación no empaquetada. Es necesario tener en cuenta
que el comando anterior no implica un despliegue permanente; si se reinicia Tomcat las aplicaciones
previamente instaladas no van a estar disponibles.
El comando #ant deploy se emplea para el despliegue permanente de las aplicaciones, y para ello es
necesario:
Que el Tomcat Manager se esté ejecutando en la localización especificada por el atributo url .
El despliegue de una aplicación en el contexto especificado por el atributo path y la localización
contenida en los archivos de la aplicación web especificada con el atributo war .
El archivo build.xml de una aplicación llamada " Hola " para " ant
deploy " podría ser el siguiente:
<target name="deploy" description="Deploy web application" depends="build">
<deploy url="${url}" username="${username}"
password="${password}"
path="${path}" war="file:${build}/${example}.war"/>
</target>
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" />
<property name="url" value="http://localhost:8080/manager" />
<property name="path" value="/${example}" />
<property name="example" value="hola" />
- 26 -
TEMA 4
Contenido
1.- Servicio de transferencia de ficheros. ......... 2 Reglas ..................................................................... 35
Servicio .......................................................................35
1.1.- ¿Cómo funciona? ......................................3
Tipo ............................................................................36
1.2.- Cliente FTP. ...............................................4 Control .......................................................................36
1.3.- Tipos de usuarios. ......................................5 Ruta ............................................................................37
1.4.- Modos de conexión del cliente. .................6 Argumentos ...............................................................37
1.5.- Tipos de transferencia de archivos. ...........7 Algunos módulos disponibles ..........................37
1.6.- Establecer permisos en ftp. .......................8 pam console.so ...................................................... 37
Grupo .........................................................................37
1.7.- Servicio de transferencia de archivos en pam cracklib.so ...................................................... 38
modo texto. ......................................................9 Grupo .........................................................................38
1.7.1.- Comandos ftp. ............................................ 11 pam deny.so .......................................................... 38
1.8.- Servicio de transferencia de archivos en Grupo .........................................................................38
modo gráfico. ..................................................12 pam env.so............................................................. 38
1.9.- Servicio de transferencia de archivos desde Grupo .........................................................................38
pam limits.so ......................................................... 39
el navegador. ..................................................14
Grupo .........................................................................39
1.10.- Asegurando el servicio de transferencia pam nologin.so ...................................................... 39
de archivos. .....................................................15 Grupo .........................................................................39
1.11.- El servicio de transferencia de archivos en pam permit.so ....................................................... 39
el proceso de despliegue de una aplicación Web. Grupo .........................................................................39
........................................................................16 pam rootok.so ....................................................... 40
Grupo .........................................................................40
2.- Instalación del servidor proftpd. ............... 18 pam securetty.so ................................................... 40
2.1.- Configuración de proftpd. .......................19 Grupo .........................................................................40
2.2.- Configurar el servidor como ftp privado. .21 pam stack.so .......................................................... 40
2.3.- Configurar el servidor como ftp privado y Grupo .........................................................................40
anónimo. .........................................................21 pam wheel.so ........................................................ 40
Grupo .........................................................................40
2.4.- Configurar el servidor como ftp anónimo. pam xauth.so ......................................................... 40
........................................................................22 Grupo .........................................................................40
2.5.- Configurar el servidor ftp con múltiples Ejemplos de configuración ..............................40
dominios. ........................................................23 login........................................................................ 41
2.6.- Virtualhosts basados en nombre. ............24 passwd ................................................................... 42
2.7.- Virtualhosts basados en IP. ......................25 su ............................................................................ 42
2.8.- Cuotas de disco para los usuarios (I). .......26 other ...................................................................... 43
2.8.1.- Cuotas de disco para los usuarios (II). ....... 27 Valores devueltos por los módulos de PAM..... 43
2.9.- Acceso seguro mediante TLS. ..................28 authentication ....................................................... 43
Anexo I - PAM ................................................. 33 account .................................................................. 44
password................................................................ 44
¿Qué es PAM? .................................................33 session.................................................................... 44
Grupos de gestión.................................................. 33
Arquitectura ....................................................34
Anexo II - proftpd.conf ................................... 45
Configuración ..................................................35 Anexo III - tls.conf .......................................... 48
Enfoques de la organización de la configuración . 35 Anexo IV - tls2.conf ........................................ 49
Instalación y administración de servidores FTP Tema 4
Instalación y administración de
servidores FTP
Caso práctico
La empresa BK Programación se ha dedicado últimamente a la creación de entornos web en
servidores dedicados y compartidos. Siempre se ha decantado para la instalación, administración y
configuración de servidores de software libre. Y es por ello que varias empresas se han puesto en
contacto con BK Programación para contratarles sus servicios. Una de estas empresas con las que
trabaja BK Programación tuvo un problema subiendo un archivo a su dominio (Nombre por el cual se
reconoce a un grupo de dispositivos o equipos conectados a la red. Éstos pueden ser nombres locales, no existentes
enInternet, pero, en general, son utilizados para su uso en Internet, por ejemplo: debian.org), por lo cual se ha recibido
una llamada dirigida a soporte técnico en BK Programación. En ésta se mantuvo la siguiente
conversación:
Hola, buenos días. BK Programación, ¿en qué puedo ayudarle?
Hola, buenos días. Tengo un problema en el servidor de nuestra página, no puedo subir un
archivo de vídeo.
¿No le aparece la opción de subida o, en medio del proceso, se le corta la conexión?
Sí, soy capaz de empezar a subir el archivo pero, pasado un tiempo, el proceso se corta.
¿Cuánto pesa el archivo? Es decir, ¿qué tamaño posee?
No sé, espere un momento... —pasado un tiempo—, sí..., mire, el archivo ocupa 300 MB.
Vale, parece claro, tal como está procediendo hasta ahora no podrá subir el archivo, debido a la
limitación establecida en el servidor web para la subida de archivos, por lo tanto debe utilizar su
cuenta ftp para la transferencia de archivos.
Y eso, ¿cómo procedo?¿está estipulado en el contrato?
Sí, no se preocupe. El contrato estándar ya establece una cuenta ftp por dominio, pero eso sí,
dependiendo del contrato poseerá una cuota de disco u otra. En cuanto al método para proceder,
aparece explicado en nuestra página web, paso por paso, en la documentación que podrá
encontrar en la pestaña descargas.
Pues, poseo el contrato estándar.
Bien, entonces posee una cuota de 2 GB.
Vale, gracias, entonces ¿cuándo podré contar con la cuenta ftp para subir el archivo?
Ya la tiene operativa, solamente debe seguir los pasos del documento que le he comentado. Si
tiene cualquier problema no dude en contactar de nuevo con nosotros.
De acuerdo, muchas gracias. Hasta luego.
Hasta luego.
Este tipo de incidencias son típicas en BK Programación, por lo cual Ada, la directora de BK
Programación ha establecido un protocolo de actuación según el tipo de incidencia. Las incidencias
primero serán atendidas por una unidad de servicio telefónico, en caso de que no se encuentre la
solución dentro de las posibles será escalada a su correspondiente área técnica, así las incidencias
de servidores serán escaladas a María, las de programación a Juan y éstos derivarán la incidencia a
un técnico de la empresa. En el caso de la incidencia por llamada telefónica anterior la solución ya
existía dentro de las posibles con lo cual la incidencia no fue escalada.
Las posibles soluciones fueron proporcionadas por el personal responsable para cada área. Así como
la incidencia que hablamos era sobre servidores fue propuesta la solución por María. Además, en
este caso, María había estudiado varios servidores ftp y se decantó por la versatilidad, funcionalidad y
seguridad del servidor ftp ProFTPD.
-1-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Hoy en día encontramos muchísima información en Internet, es más, en muchas ocasiones cuando
buscamos una determinada información es muy probable que tengamos que filtrarla, ya que
encontramos demasiada. Pero, una vez encontrada ¿la podemos guardar? ¿y descargar? Y si es así
¿cómo fue subida?
Normalmente para subir archivos en Internet, ya sean de texto, imágenes, vídeo... hubo que emplear
algún método de transferencia de archivos para ubicarlos.
Uno de los métodos más empleados como servicio de transferencia de archivos se realiza mediante
el servicio ftp. Éste utiliza el protocolo FTP empleando la arquitectura cliente-servidor. Así el servidor
ftp esperará peticiones para transferir los archivos y el cliente ftp, ya sea por terminal o de modo
gráfico, realizará esas peticiones.
Uno de los principales problemas, a pesar de ser uno de los métodos más utilizados del protocolo
FTP es la no seguridad de la información, esto es, la transferencia tiene lugar sin cifrar la información
transferida. Este no sólo es un problema del protocolo FTP sino de muchos de los protocolos
utilizados enInternet, puesto que en el comienzo de Internet no se preveía su expansión actual y no
se pensaba en asegurar la información mediante cifrado, sino simplemente asegurar el buen
funcionamiento. Hoy en día existen extensiones sobre el protocolo FTP que aseguran el cifrado en la
transferencia, como FTPS, empleando el cifrado SSL/TLS (protocolos criptográficos que proporcionan comunicaciones
seguras por una red, comúnmente Internet).
No confundir FTPS con SFTP, ya que este último es implementado con otro servicio, el servicio SSH, y
es utilizado para conexiones remotas seguras a través de un terminal de comandos.
En el siguiente enlace, página web del RFC(serie de documentos en los que se detalla prácticamente todo lo
relacionado con la tecnología de la que se sirve Internet: protocolos, recomendaciones, comunicaciones...) 959 sobre FTP,
puedes encontrar traducido el estándar RFC sobre FTP.
http://www.rfc-es.org/rfc/rfc0959-es.txt
-2-
Instalación y administración de servidores FTP Tema 4
En el siguiente enlace, página web del RFC 4251 sobre SSH, puedes encontrar el estándar
RFC sobre SSH.
http://www.ietf.org/rfc/rfc4251.txt
El protocolo FTP emplea una arquitectura cliente/servidor, siendo el cliente ftp quien solicita la
transferencia de archivos y el servidor ftp quien ofrece los archivos. Pertenece a la familia de
protocolos de red TCP (uno de los protocolos fundamentales en Internet. Garantiza que los datos serán entregados en su destino
sin errores y, una vez recogidos, puestos en el mismo orden en que se transmitieron) y por lo tanto es un protocolo
orientado a conexión, esto es, el cliente ftp necesita establecer una conexión con el servidor para
empezar la transferencia de ficheros. Si no se establece la conexión ésta no tiene lugar.
Puesto que FTP es un protocolo que no utiliza una autenticación de usuarios y contraseña cifrada, se
considera un protocolo inseguro y no se debería utilizar a menos que sea absolutamente necesario.
Verás que existen otras alternativas al FTP, como por ejemplo el protocolo FTPS, para mantener
comunicaciones cifradas. Aún así, el protocolo FTP está muy extendido en Internet ya que a menudo
los usuarios necesitan transferir archivos entre máquinas sin importar la seguridad.
El protocolo FTP requiere de dos puertos (números utilizados en las comunicaciones cliente/servidor, en transmisiones TCP
o UDP comprendidos entre 1 y 65535, que indican por donde tiene lugar la conexión con un servidor. Están estandarizados, esto es, un
servidor suele estar activo siempre por definición en un puerto determinado, pero éste puede que sea modificado en la configuración del
servidor. Por ejemplo un servidor web suele esperar en el puerto TCP 80)
TCP en el servidor para su funcionamiento, a
diferencia de la mayoría de los protocolos utilizados en Internet que solamente requieren un puerto
en el servidor. Un puerto es necesario para establecer el control de la conexión y otro se utiliza para
el control de la transmisión, es decir, un puerto se utiliza para establecer la conexión entre el cliente
y el servidor y otro para la transferencia de datos.
Los puertos TCP del servidor en cuestión, suelen ser el 21 para el control de la conexión y otro a
determinar según el modo de conexión: podría ser el 20 o incluso uno mayor de 1024. Hay que tener
en cuenta que estos puertos pueden ser modificados en la configuración del servidor, así no es
obligatorio que los puertos 21 y 20 sean los asignados al servidor FTP, pero sí son los que éste
maneja por defecto. El puerto 21 también es conocido como puerto de comandos y el puerto 20
como puerto de datos.
La ventaja que supone utilizar el protocolo FTP se basa en su alto rendimiento y sencillez, que lo
hacen una opción conveniente para la transferencia de archivos a través de Internet.
A través de un cliente ftp descargas un archivo a tu equipo desde el servidor ftp: ¿cuáles
de las siguientes afirmaciones son correctas teniendo en cuenta que el archivo puede
descargarse sin problemas?
El servidor ftp posee dos puertos TCP: uno para el control de la transmisión y otro para la
transferencia de datos.
-3-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
El servidor ftp posee siempre los puertos TCP 21 y 20: el 21 para el control de la transmisión
y el 20 para la transferencia de datos.
El servidor ftp posee los puertos TCP 21 y 20: el 21 para el control de la transmisión y el 20
para la transferencia de datos.
El servidor ftp, configurado por defecto, posee el puerto TCP 21 válido para el control de la
transmisión y para la transferencia de datos.
Siempre deben existir dos puertos TCP, uno para el control de la transmisión y otro para la transferencia de datos, éstos en un servidor
ftpsuelen ser el 21 y el 20 respectivamente, pero pueden ser modificados.
Para poder establecer una conexión con el protocolo FTP son necesarias dos partes: un servidor y un
cliente.
Existen múltiples tipos de clientes ftp, desde clientes en terminal de comandos, como ftp o lftp ,
clientes gráficos como gftp o FileZilla , hasta un cliente ftp en los navegadores mediante ftp://
¿Cuál elegir? Pues, como todo, depende:
¿Conoces la consola ftp? Si te manejas con soltura en la consola ftp puedes pensar en un cliente
ftp de comandos que permita utilizar la tecla "tabulador" después de escribir unos caracteres
para complementar los nombres de archivos.
¿Cuál es el uso que necesitas? ¿Para qué lo vas a utilizar? A lo mejor solamente quieres visitar un
servidor ftp y descargar un archivo sin tener que andar instalando nuevos programas. En este
caso puedes utilizar el cliente ftp del navegador, ftp://
¿Quieres reanudar la conexión en caso de corte en la misma? En este caso mejor un cliente tipo
gráfico.
¿Deseas facilidad de manejo? Un cliente terminal de comandos suele ser menos interactivo que
uno gráfico, debes saber manejarte con comandos en la consola ftp, mientras que en un cliente
gráfico puedes manejarte a través de clics del ratón. Los clientes gráficos suelen ser más
amigables y por lo tanto más utilizados.
¿Qué tipo de conexión quieres establecer? ¿cifrada? ¿no cifrada? Dependiendo del tipo de
conexión debes emplear un cliente u otro, ya que no todos los clientes ftp permiten conexiones
cifradas.
¿Deseas recordar conexiones (sitios (Plantilla de configuración para recordar perfiles de configuración a servidores
FTP))? Pues lo mismo, no todos los clientes ftp lo permiten.
Un cliente ftp muy recomendable es el cliente gráfico ftp FileZilla, ya que posee las siguientes
características:
Fácil de usar.
Soporta FTP, FTP sobre SSL/TLS (FTPS) y SFTP.
Compatibilidad con múltiples plataformas: se ejecuta en Windows, Linux, BSD, Mac OS X y más.
Soporte Ipv6.
Disponible en varios idiomas.
Soporta y reanuda la transferencia de archivos de gran tamaño (mayores de 4 GB).
Interfaz de usuario con pestañas.
Potente administrador de sitios y cola de transferencia.
Marcadores.
Arrastrar y soltar.
Permite configurar límites de velocidad de transferencia.
Nombre de filtros.
Directorio de comparación.
-4-
Instalación y administración de servidores FTP Tema 4
En el siguiente enlace puedes acceder a la página web oficial de FileZilla donde puedes
descargarlo y encontrar documentación sobre el mismo.
http://filezilla-project.org/
¿Qué usuarios se pueden conectar al servidor ftp? ¿cualquiera? ¿sólo los usuarios del sistema?
Bien, típicamente existen dos tipos de usuarios:
Usuarios anónimos: usuarios que tienen acceso y permisos
limitados por el sistema de archivos. Al conectarse al servidor FTP
sólo deben introducir una contraseña simbólica, normalmente
cualquier dirección de correo -real o ficticia-, por ejemplo: a@ .
Usuarios del sistema: aquellos que disponen de una cuenta en la
máquina que ofrece el servicio FTP. Al conectarse al servidor FTP
deben introducir su contraseña de sistema.
Pero en ciertos servidores, como el servidor ProFTPD, existe una tercera posibilidad muy interesante:
usuarios virtuales. Los usuarios virtuales poseen acceso y permisos al servidor FTP sin necesidad de
ser usuarios del sistema, por lo tanto si un usuario virtual quisiera acceder al sistema operativo como
si fuese un usuario del sistema, ya sea de forma local o remota no podría, pues su cuenta de usuario
no existe en el sistema. Los usuarios virtuales tienen definida una contraseña propia y pueden estar
definidos en ficheros de autenticación (de texto) con el mismo formato que los del sistema operativo
GNU/Linux /etc/passwd , directorios LDAP (protocolo de acceso unificado a un conjunto de información sobre una red),
bases de datos SQL (lenguaje de consulta estructurado es un lenguaje declarativo de acceso a bases de datos relacionales que
permite especificar diversos tipos de operaciones en éstas. Una de sus características es el manejo del álgebra y el cálculo relacional
permitiendo efectuar consultas con el fin de recuperar de una forma sencilla información de interés de una base de datos, así como también
hacer cambios sobre ella) y servidores RADIUS (protocolo de autenticación y autorización para aplicaciones de acceso a la red o
movilidad IP. Una de las características más importantes del protocolo RADIUS es su capacidad de manejar sesiones, notificando cuando
comienza y termina una conexión).
Dependiendo del servidor ftp, podrás tener unos métodos de autenticación de usuarios u otros, por
ejemplo en el servidor ftp ProFTPD se permite los siguientes métodos:
Ficheros de autenticación del sistema operativo: /etc/passwd y /etc/shadow : Para ello usa las
directivas AuthUserFile y AuthGroupFile .
http://www.proftpd.org/docs/howto/AuthFiles.html
Usuarios virtuales definidos mediante ficheros de autenticación (de texto) propios, distintos de
los del sistema operativo: para ello también usa las directivas AuthUserFile y AuthGroupFile .
Autenticación PAM (mecanismo de autenticación flexible que permite abstraer las aplicaciones y otro software del proceso de
identificación. También permite construir políticas diferentes de autenticación para cada servicio): Es necesario establecer
la directiva AuthPAMAuthorative a ' on '.
http://www.proftpd.org/docs/directives/linked/config_ref_AuthPAM.html
Bases de datos SQL, tales como MySQL o Postgres. Para ello emplea el módulo mod_sql ; más
información sobre el uso de mod_sql lo puedes encontrar en el HowTo SQL
http://www.proftpd.org/docs/howto/SQL.html
LDAP: Para ello emplea el módulo mod_ldap .
-5-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Ya se ha comentado que el servidor FTP a diferencia de otros servidores necesita dos puertos TCP
para hacer posible la transferencia de archivos. Ahora bien, ¿son estos puertos siempre los mismos o
no? ¿son independientes del tipo de cliente y servidor o no? Pues, básicamente depende de dos
factores: del modo de conexión del cliente ftp y de la configuración del servidor ftp.
A priori, si no modificamos la configuración del servidor ftp esté otorgará siempre el puerto TCP 21
para el canal de conexión de control. Es el puerto del canal de transmisión de datos, el que varía,
¿cómo?, pues según el modo de conexión del cliente ftp, que puede ser activo o pasivo.
Cuando una aplicación cliente FTP inicia una conexión a un servidor FTP, abre el puerto 21 en el
servidor. Se utiliza este puerto para arrojar todos los comandos al servidor. Cualquier petición de
datos desde el servidor se devuelve al cliente a través de otro puerto TCP del servidor dependiendo
del modo de conexión del cliente. Así:
El modo activo es el método original utilizado por el protocolo FTP para la transferencia de datos
a la aplicación cliente. Cuando el cliente FTP inicia una transferencia de datos, el servidor abre
una conexión desde el puerto 20 en el servidor para la dirección IP y un puerto aleatorio sin
privilegios (mayor que 1024) especificado por el cliente. Este arreglo implica que la máquina
cliente debe poder aceptar conexiones en cualquier puerto superior al 1024. Con el crecimiento
de las redes inseguras, tales como Internet, es muy común el uso de cortafuegos para proteger
las máquinas cliente. Debido a que estos cortafuegos en el lado del cliente normalmente
rechazan las conexiones entrantes desde servidores FTP en modo activo, se creó el modo pasivo.
La aplicación FTP cliente es la que inicia el modo pasivo, de la misma forma que el modo activo.
El cliente FTP indica que desea acceder a los datos en modo pasivo y el servidor proporciona la
dirección IP y el puerto aleatorio, sin privilegios (mayor que 1024) en el servidor. Luego, el cliente
se conecta al puerto en el servidor y descarga la información requerida.
A continuación puedes ver una imagen que muestra el funcionamiento de los dos modos: el activo y
el pasivo.
-6-
Instalación y administración de servidores FTP Tema 4
En sistemas GNU/Linux es típico encontrar el archivo /etc/services que contiene una lista de
puertos TCP/UDP relacionado con los servicios estándar que trabajan en los mismos. Ejecuta el
comando cat /etc/services | grep ftp y encontrarás todos los puertos y servidores relacionados
con la cadena ftp .
Es muy importante saber con qué tipo de archivos estás trabajando en la transferencia ya que si no
utilizas las opciones adecuadas puedes destruir la información del archivo. El servidor ftp permite
configurar la transferencia de archivos según el tipo del mismo, es por eso que al ejecutar el cliente
FTP, antes de transferir un archivo, debes utilizar uno de los siguientes comandos o poner la
correspondiente opción en un programa con interfaz gráfica:
ascii para tipos de archivos ascii.
binary para tipos de archivos binarios.
-7-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
El protocolo FTP sigue los permisos establecidos en entornos de tipo UNIX y sus
similares GNU/Linux, con lo cual existen tres grupos de permisos en el siguiente
orden: propietario, grupo y otros:
Propietario(user= u ): El creador o el que ha subido el archivo al servidor FTP.
Grupo(group= g ): Se refiere a un grupo de usuarios que posee la propiedad del
archivo, al que probablemente pertenece el propietario.
Otros(others= o ): Son el resto de usuarios no propietarios o que no pertenecen
al grupo indicado. Son el resto del mundo.
Cada grupo a su vez puede tener tres permisos en el siguiente orden: lectura,
escritura y ejecución, identificados respectivamente por una ' r ', una ' w ' y una ' x '. La ausencia de
permiso es identificada con el carácter ' - '. Cada permiso tiene un equivalente numérico, así: r=4 , w=2 ,
x=1 y -=0 . Por ejemplo: rw- identifica permiso de lectura y escritura o lo que es lo mismo 4+2+0=6
En un sistema operativo tipo GNU/Linux mediante el comando ' ls -l ' puedes ver los permisos
asignados a ficheros y directorios, por ejemplo si la salida del anterior comando es:
-rw-r--r-- 1 alumno clase 0 jun 20 01:15 prueba1.txt
significa que,
prueba1.txt es un fichero ya que -rw-r--r-- comienza con ' - ', si fuese un directorio aparecería
una ' d '
rw-r--r-- identifica los permisos del fichero prueba1.txt , que divididos 3 a 3 representan de
izquierda a derecha: propietario, grupo, otros.
rw- identifican los permisos del usuario propietario, en este caso alumno . Por lo tanto alumno
posee los permisos de lectura y escritura sobre el fichero prueba1.txt o lo que es lo mismo
4+2+0=6
r-- identifican los permisos del grupo propietario, en este caso clase . Por lo tanto clase posee
solamente el permiso de lectura o lo que es lo mismo4+0+0=4
r-- identifican los permisos de los otros (resto del mundo). Por lo tanto todos los usuarios que
no son alumno y aquellos que no pertenecen al grupo clase poseen solamente el permiso de
lectura o lo que es lo mismo 4+0+0=4
Es conveniente que le des un vistazo al manual de chmod y umask : man chmod y man umask .
Por otro lado en un sistema GNU/Linux, en principio, no todos los usuarios del sistema tienen acceso
por ftp , así existe un fichero /etc/ftpusers que contiene una lista de usuarios que no tienen permiso
de acceso por FTP. Por razones de seguridad al menos los siguientes usuarios deberían estar listados
en este fichero: root , bin , uucp , news . Ten en cuenta que las líneas en blanco y las líneas que
comiencen por el carácter ' # ' serán ignoradas.
-8-
Instalación y administración de servidores FTP Tema 4
De entre los clientes tipo texto cabe destacar dos: el cliente en modo texto ftp y el cliente en modo
texto lftp . En GNU/Linux Debian 6 se dispone del cliente modo ftp en una instalación básica. Para
poder utilizarlo en el sistema simplemente hay que ejecutarlo como comando: el comando ftp .
Vamos a ver, a continuación, el comportamiento del cliente en modo texto ftp en la conexión al
servidor ftp ftp.rediris.es :
1. Básicamente la sintaxis es la siguiente:
ftp [-pinegvd] [host [port]]
donde
host identifica el servidor ftp
port identifica el puerto, por defecto 21, por lo cual si conectas a un servidor ftp
configurado en ese puerto no es necesario escribirlo, ya se considera.
Puedes ver la ayuda del comando ftp mediante: man ftp ó info ftp .
2. Al ejecutar el comando se abrirá una consola propia de ftp en la cual puedes introducir
comandos ftp para: abrir conexión, moverse por rutas, descargar archivos …
Es muy típico ejecutarlo con el parámetro host, esto es, con el servidor ftp al cual quieres
conectar:
root@debian-servidor-fp:~# ftp ftp.rediris.es
También puedes ejecutar el comando sin parámetros, de esta forma abrirás directamente la
consola ftp y deberás actuar con ella a través de los comandos de la misma:
root@debian-servidor-fp:~# ftp
ftp> o
(to) ftp.rediris.es
3. A continuación se pedirá usuario y contraseña para establecer la conexión. En el caso del
servidor de rediris puedes conectar mediante un usuario cualquiera y una contraseña
cualquiera. Es muy típico en servidores ftp que exista un usuario anónimo, cuya contraseña sea
cualquier dirección de correo -real o ficticia-, por ejemplo: a@ .
4. Ahora en la consola ftp puedes ejecutar comandos, ¿cuales? Pues los que estén habilitados, y
¿cuales están habilitados? Lo puedes saber ejecutando el comando help.
En la siguiente imagen puedes ver el ejemplo de conexión ftp mediante el cliente en modo texto ftp
al servidor ftp.rediris.es:
-9-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
A continuación puedes ver el mismo ejemplo de conexión al servidor ftp: ftp.rediris.es utilizando
el cliente en modo texto lftp :
1) Actualizar sistema operativo GNU/Linux Debian 6 Squeeze:
root@debian-servidor-fp:~# apt-get update
root@debian-servidor-fp:~# apt-get upgrade
Como puedes ver conecta directamente, a difencia del comando ftp, ya que no pide usuario y
contraseña. Esto es debido a que automaticamente comprueba si la
conexión mediante un usuario anónimo es posible, y si es posible introduce unos valores para
establecer la conexión.
5) Introducir comando help para saber que comandos dispones dentro de la consola ftp:
lftp ftp.rediris.es:~> help
!<orden-de-shell> (órdenes) alias [<nombre> [<valor>]] bookmark [SUBORDEN]
cache [SUBORDEN]
cat [-b] <archivos> cd <dir_remoto> chmod [OPTS] modo archivo. close [-a]
[re]cls [opts] [path/][pattern] debug [<nivel>|off] [-o <archivo>] du [options] <dirs>
exit [<código>|bg]
get [OPCS] <arch_r> [-o <arch_l>] glob [OPTS] <cmd> <args> help [<ord>]
- 10 -
Instalación y administración de servidores FTP Tema 4
En la consola ftp pueden estar disponibles múltiples comandos, algunos de los más empleados son
los recogidos en la siguiente tabla:
ABRIR/CERRAR CONEXIÓN
COMANDO/S Y ARGUMENTOS EXPLICACIÓN
open servidor Inicia conexión remota con un servidor ftp.
close / disconnect Finalizan la sesión ftp sin cerrar la consola ftp.
bye / quit / exit Terminan la sesión ftp y salen de la consola ftp.
Sale a línea de comandos del sistema operativo temporalmente sin
! cortar la conexión. Para volver, teclea exit en la línea de
comandos.
AYUDA
COMANDO/S Y ARGUMENTOS EXPLICACIÓN
? / help Muestra una lista de los comandos disponibles.
? comando / help comando Muestra la información relativa al comando.
TRABAJAR CON DIRECTORIOS
COMANDO/S Y ARGUMENTOS EXPLICACIÓN
cd directorio Cambia de directorio en el servidor remoto.
lcd directorio Cambiarse de directorio en el equipo local (cliente ftp).
dir directorio / ls directorio Listan el contenido del directorio remoto actual.
pwd Muestra el directorio activo en el servidor.
lpwd Muestra el directorio activo en el equipo local (cliente ftp).
rmdir directorio Elimina un directorio vacío en el servidor.
mkdir directorio Crea un directorio en el servidor.Crea un directorio en el servidor.
TRABAJAR CON FICHEROS
COMANDO/S Y ARGUMENTOS EXPLICACIÓN
delete archivo Borrar un archivo en el servidor remoto.
mdelete patrón Borrar varios archivos según un patrón.
get archivo Obtiene archivo en el equipo cliente desde el servidor remoto.
mget archivos Obtiene varios archivos desde el servidor remoto.
put archivo Envía un archivo al servidor remoto.
mput archivos Envía varios archivos al servidor remoto.
rename archivo Cambia el nombre a un archivo en el servidor.
ascii Para configurar y transferir archivos tipo ascii.
binary Para configurar y transferir archivos tipo binario.
less archivo Leer contenido de archivo mediante el comando less.
TRABAJAR CON PERMISOS
COMANDO/S Y ARGUMENTOS EXPLICACIÓN
- 11 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
- 12 -
Instalación y administración de servidores FTP Tema 4
Típicamente los clientes gráficos se comportan todos igual, esto es, tienen una interfaz parecida,
básicamente presentan una ventana partida en dos secciones: la de la izquierda suele representar el
equipo cliente ftp (desde donde se intenta establecer la conexión) y la de la derecha suele representar el equipo
servidor ftp (quién recibe la conexión). Luego suelen existir, en alguna zona determinada de la
ventana: en el centro entre las dos secciones, arriba de las dos secciones, etc una serie de botones,
usualmente representados como flechas que indican la posibilidad de subir o descargar archivos.
Incluso dependiendo del cliente en modo gráfico es posible guardar los datos de las conexiones como
plantillas, de tal forma que la próxima vez que intentes establecer la conexión con un mismo servidor
ftp en vez de tener que rellenar los campos referentes a la conexión puedes hacerlo a través de la
plantilla que ya posee el valor de esos campos.
Dentro de los clientes ftp en modo gráfico cabe destacar dos: gftp y filezilla . A continuación
puedes ver un ejemplo de como utilizarlos para establecer una conexión con un servidor ftp, el
servidor ftp.rediris.es :
1. Cliente en modo gráfico gftp .
Servidor: Escribe aquí el nombre o IP del servidor FTP: ftp.rediris.es
Puerto: Escribe aquí el puerto TCP de la conexión de control, por defecto: 21 . Puedes
omitirlo siempre y cuando sea el 21.
Usuario: Escribe aquí el usuario con permisos de
conexión en el servidor ftp. En la imagen puedes ver que
no se ha escrito nada, esto es debido que el servidor
ftp.rediris.es permite la entrada a cualquier usuario y
el cliente gráfico gftp al intentar conectar te pedirá un
usuario que tenga permisos para la conexión. Pulsas en
cancelar y gftp cubrirá los campos usuario y contraseña,
entrando al servidor ftp.
Contraseña: Escribe aquí la contraseña del usuario con permisos de conexión en el servidor
ftp. En la imagen puedes ver que no se ha escrito nada, esto es debido a la misma causa que
en el campo Usuario.
2. Cliente en modo gráfico filezilla .
Servidor: Escribe aquí el nombre o IP del servidor FTP: ftp.rediris.es
Nombre de usuario: Escribe aquí el usuario con permisos de conexión en el servidor ftp.
Filezilla , al contrario que gftp , no cubre los datos
usuario y contraseña si tú no escribes nada en los campos,
entonces debes escribir un nombre de usuario, por
ejemplo anonymous , y una contraseña (cualquier secuencia de
caracteres).
Contraseña: Escribe aquí la contraseña del usuario con
permisos de conexión en el servidor ftp. En la imagen
puedes ver que se ha escrito una secuencia de caracteres
punto, lo que significa que a la hora de escribir caracteres
en ese campo no se muestra su valor por seguridad. Es
necesario escribir una contraseña por lo comentado en el campo anterior: Nombre de
usuario.
Puerto: Escribe aquí el puerto TCP de la conexión de control, por defecto: 21 . Puedes
omitirlo siempre y cuando sea el 21.
A continuación puedes ver información de la instalación del cliente en modo gráfico gftp.
1. Actualizar sistema operativo GNU/Linux Debian 6 Squeeze:
root@debian-servidor-fp:~# apt-get update
root@debian-servidor-fp:~# apt-get upgrade
- 13 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Una vez acabada la ejecución del script aparece el cliente ftp gráfico FileZilla. En la interface arriba a
la izquierda aparece el primer icono Abrir el Gestor de Sitios. Se hace click en el mismo y aparece un
panel con dos secciones: la de la izquierda donde aparecen los Sitios configurados y la de la derecha
donde aparecen las opciones configuradas de cada Sitio Seleccionado:
En la sección de la izquierda no existe ningún sito configurado y se pulsa en el botón Nuevo Sitio,
apareciendo una caja de texto donde se escribe el nombre del sitio a configurar (nombre del
perfil a guardar). Se escribe REDIRIS y se activa la sección de la derecha.
En la sección de la derecha, al tener seleccionado REDIRIS, se escribe ftp.rediris.es en la caja
de texto Servidor y se pulsa el botón Aceptar, desapareciendo el panel de configuración.
Se vuelve a pulsar en el icono Abrir el Gestor de Sitios y aparece el nuevo sitio(perfil) configurado
REDIRIS. Ahora se pulsa el botón Conectar en la sección de la derecha del panel y se establece la
conexión con el servidor ftp.rediris.es .
Para poder usar el navegador como cliente ftp solamente debes escribir en la barra de dirección una
dirección URL tipo, como la siguiente:
ftp://nombre_servidor_ftp:puerto
donde,
ftp:// indica que el protocolo que deseas que interprete el navegador sea el ftp.
nombre_servidor_ftp representa el nombre o la IP del servidor ftp.
puerto indica el puerto TCP, por defecto 21. Puedes omitirlo siempre y cuando sea el 21.
Si el servidor ftp permite la conexión a un usuario anónimo, al ejecutar
ftp://nombre_servidor_ftp:puerto entrarás directamente al servidor ftp, esto es, el navegador no
preguntará qué usuario y contraseña necesitas para establecer la conexión.
- 14 -
Instalación y administración de servidores FTP Tema 4
Para descargar las carpetas o archivos simplemente debes pulsar con el botón derecho del ratón
sobre ellos y elegir la opción Guardar enlace como… -que aparece en Firefox y es similar en otros
navegadores-.
Pero no todo van a ser ventajas al utilizar el navegador como cliente ftp, puesto que otros clientes
tienen la posibilidad de continuar las descargas cuando estás sufrieron algún tipo de interrupción,
cosa que no pasa con el cliente ftp del navegador, como por ejemplo el cliente gráfico FileZilla que
soporta y reanuda la transferencia de archivos de gran tamaño(> 4 GB).
FTPS es una extensión del protocolo FTP que asegura el cifrado en la transferencia mediante los
protocolos SSL/TLS . Permite tres tipos de funcionamiento:
SSL Implícito:
Como conexiones HTTPS.
Usa los puertos 990 y 989.
SSL Explícito
El cliente usa los mismos puertos estándar FTP: 20 y 21 pero se efectúa el cifrado en ellos.
Usa AUTH SSL.
TLS Explícito:
Similar a SSL Explícito pero usa AUTH TLS.
El cifrado al que nos referimos es el cifrado de clave pública o asimétrico: clave pública( kpub ) y clave
privada( kpriv ). La kpub interesa publicarla para que llegue a ser conocida por cualquiera, la kpriv no
interesa que nadie la posea, solo el propietario de la misma. Ambas son necesarias para que la
comunicación sea posible, una sin la otra no tienen sentido, así una información cifrada mediante la
kpub solamente puede ser descifrada mediante la kpriv y una información cifrada mediante la kpriv
sólo puede ser descifrada mediante la kpub .
- 15 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
En el siguiente enlace encontrarás más información sobre asegurar FTP con TLS.
http://tools.ietf.org/html/rfc4217
En este otro enlace encontrarás más información sobre el protocolo TLS.
http://tools.ietf.org/html/rfc4346
Si empleas una aplicación web para subir archivos debes tener en cuenta cuánto tiempo puedes
mantener la conexión abierta con el servicio web y cuál es el tamaño máximo de subida de un
archivo. Estas cuestiones suelen ser típicas de la configuración del servidor web. Por la contra, si
empleas un servidor ftp dependerá de éste las cuestiones anteriores.
- 16 -
Instalación y administración de servidores FTP Tema 4
Se suele configurar el servidor web con unos parámetros: tiempo de conexión y tamaño máximo de
subidas de archivos diferentes del servidor ftp, de tal forma que para archivos de tamaño no muy
grandes se puedan emplear aplicaciones web y no se sufra un corte en la subida de archivos y, para
archivos grandes, se emplee el servidor ftp.
Normalmente las empresas de alojamiento web (hosting) permiten la subida de archivos mediante
un servidor ftp y poseen documentos sobre cómo operar con éste, esto es, documentación que
explica cómo conectarse a sus servidores ftp a través de algún cliente ftp, como por ejemplo:
FileZilla , Cute FTP , Fetch o Transmit . También suelen permitir usar SCP o SFTP para transferir
ficheros de forma segura mediante un canal cifrado. Por ejemplo en Filezilla se puede establecer la
conexión de forma cifrada directamente, sólo con indicar como puerto TCP el número del servidor
SSH , por defecto, 22 .
También debes saber que muchos editores web permiten subir tu aplicación web al servidor con el
protocolo FTP, esto te puede resultar más sencillo que el uso de una aplicación de FTP
independiente.
Eso si, sea cual sea el método ftp que utilices para subir archivos y actualizar tu web, se desaconseja
el uso de aplicaciones no actualizadas que podrían comprometer la seguridad de tu web.
A continuación puedes ver errores típicos, junto con sus soluciones, que puedes encontrar al subir tu
aplicación mediante un servidor FTP:
Tu cliente FTP muestra el error access denied , o similar, cuando subes o borras ficheros y
carpetas: Comprueba que tu usuario FTP tenga permisos suficientes sobre la carpeta o fichero en
la que deseas subir o que deseas borrar.
Tus páginas no son reconocidas de forma automática al acceder a tu dominio: Los servidores
GNU/Linux son sensibles a mayúsculas y minúsculas por lo que verifica el nombre de tus
archivos.
El cliente de FTP te muestra el mensaje too many connections from your IP address : Esto quiere
decir que existen más conexiones abiertas con el servidor FTP desde la misma dirección IP de las
permitidas. En ese caso, asegúrate que no exista ninguna aplicación, como un cortafuegos, que
pueda estar bloqueando las conexiones abiertas, y provocando, de esta forma, que se
establezcan más intentos de conexión de los necesarios.
- 17 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
¿Por qué ProFTPd? Pues porque es un servidor FTP bajo licencia GPL altamente configurable, así
permite:
Usuarios virtuales con:
LDAP
BBDD: MySQL, PostgreSQL...
Ficheros de autenticación (ficheros de texto).
Personalizar opciones según usuario/grupo.
Seguridad mediante cifrado SSL/TLS.
Configuraciones independientes mediante virtualhosts.
Para instalar el servidor protftpd en un sistema Operativo Debian 6.0 (squeeze) ejecutar el comando
apt-get install proftpd . En la instalación deberás elegir si ProFTPd va a ejecutarse como un servicio
desde inetd o como un servidor independiente. Ambas opciones tienen sus ventajas. Si sólo recibes
unas pocas conexiones FTP diarias, probablemente sea mejor ejecutar ProFTPd desde inetd para
ahorrar recursos. Por otro lado, con más tráfico, ProFTPddebería ejecutarse como un servidor
independiente para evitar crear un proceso nuevo por cada conexión entrante.
En la instalación se crearán los usuarios proftpd y ftp con grupo nogroup y sin posibilidad de acceso
a una consola del sistema. Se puede comprobar en el fichero /etc/passwd donde encontrarás nuevas
líneas similares a las siguientes:
- 18 -
Instalación y administración de servidores FTP Tema 4
proftpd:x:106:65534::/var/run/proftpd:/bin/false
ftp:x:107:65534::/home/ftp:/bin/false
# Con esta configuración cualquier usuario del sistema puede acceder por ftp
# Con esta nueva configuración puede accepter por ftp el usuario anónimo
# anonymous o su alias: ftp
Una vez acabada la ejecución del script se ejecuta el comando ftp . A continuación se pulsa la telca ' o '
para abrir una conexión a un servidor ftp, se escribe localhost y se conecta al servidor local ftp. Para
establecer la conexión se escribe el nombre del usuario del sistema usuario-privado y su contraseña.
La conexión se ha establecido. Ahora dentro del servidor ftp, se ejecutan los comandos: ls , pwd , help
y quit .
- 19 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
con sus configuraciones correspondientes, y todo lo que no esté incluido en la definición de cada
virtualhost se heredará de la configuración principal.
Configuración a través de directivas.
Contextos de configuración: global, directorio, virtualhost, anonymous.
Modularización. Al igual que Apache se pueden activar/desactivar funcionalidades a través de
módulos.
En el fichero protfpd.conf :
Las líneas en blanco y las líneas que comiencen por el carácter ' # ' serán ignoradas.
Las líneas que comienzan por Include recogerán la configuración de los ficheros que la
acompañan.
User proftpd y Group nogroup identifican al usuario y grupo con el que se ejecuta proftpd.
El soporte LDAP , SQL , TLS , virtualhosts y cuotas están desactivados, ver líneas: #Include
/etc/proftpd/ldap.conf , #Include /etc/proftpd/sql.conf , #Include /etc/proftpd/tls.conf ,
#Include /etc/proftpd/virtuals.conf y QuotaEngine off .
El mensaje de bienvenida se encuentra en el fichero welcome.msg
Está configurado por defecto el modo de conexión ftp activo en el puerto TCP 21.
Los usuarios que puedan conectarse por ftp:
Necesitan una consola de comandos activa, esto es, debe poseer una consola presente
dentro del fichero /etc/shells
Pueden moverse por todo el sistema de ficheros, esto es, no están encerrados (jaula chroot)
en sus directorios /home , puesto que la directiva DefaultRoot ~ está comentada. Por
seguridad sería conveniente descomentar la línea y recargar la configuración del servidor.
Para evitar ataques de denegación de servicio solamente se permiten 30 conexiones
simultáneas: MaxInstances 30
Los permisos para los ficheros y directorios creados en la conexión ftp son: 644 y 755
respectivamente, ya que, umask 022 022 , donde el primer grupo de tres números identifican los
permisos de los ficheros y el segundo grupo identifica los permisos de los directorios.
Encontrarás al final del mismo un ejemplo de configuración para usuarios anónimos.
Una vez retocada la configuración del servidor proftpd sólo reconocerá estos cambios cuando
recargues su configuración, con lo cual debes ejecutar el comando:
/etc/init.d/proftpd restart
- 20 -
Instalación y administración de servidores FTP Tema 4
Como has podido comprobar en la sección anterior, posee una configuración tipo por defecto. Ésta
ya permite la conexión a tu servidor. ¿Con qué usuarios? Con cualquier usuario del sistema que
posea una consola de comandos activa definida en /etc/shells .
¿Cómo? Pues simplemente ejecutando cualquier cliente ftp que establezca una conexión con el
puerto TCP 21 a tu servidor ftp. Por ejemplo utilizando el cliente de comandos ftp sería:
ftp usuario_del_sistema@servidor_ftp
donde,
servidor_ftp : puede ser el nombre de tu servidor ftp en /etc/hosts o resuelto por DNS, o la IP de tu
servidor ftp
Para hacer que proftpd permita conexiones mediante usuarios del sistema y usuarios anónimos
debes modificar el fichero/etc/proftpd/proftpd.conf
- 21 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
No olvides recargar la nueva configuración para que los cambios tengan efecto, ejecutando el
comando:
/etc/init.d/proftpd restart ó /etc/init.d/proftpd reload.
Esta configuración permitirá conectar al servidor ftp mediante el usuario ftp o por su alias
anonymous empleando una contraseña cualquiera. Una vez conectado solamente tendrá
acceso al contenido de la carpeta /home/ftp y no podrá subir ni eliminar nada de ella.
Por lo tanto, cambia la configuración del usuario anonymous ftp de tal forma que al final del fichero
aparezcan las siguientes líneas:
<Anonymous ~ftp>
User ftp
Group nobody
# No es necesario tener una shell en /etc/shells
RequireValidShell off
# No se requiere contraseña en la conexión
AnonRequirePassword off
# No permitir ESCRITURA en cualquier directorio al usuario ftp
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>
Puedes crear un usuario anónimo con carácter privado, esto es, que requiera contraseña para
establecer la conexión. Por ejemplo, en la configuración siguiente se convierte el usuario del sistema
'invitado', para el servidor ftp, en un usuario anónimo que requiere contraseña para establecer la
conexión. Además, solamente tendrá permisos de escritura desde cualquier equipo que conecte
mediante la dirección de red 192.168.200.
<Anonymous ~invitado>
User invitado
Group nobody
# Se requiere la contraseña de sistema del usuario invitado en la conexión
AnonRequirePassword on
# No permitir ESCRITURA en cualquier directorio al usuario invitado a no ser que establezca
conexión
# de la red 192.168.200.
<Directory *>
<Limit WRITE>
Order allow, deny
Allow from 192.168.200.
Deny from all
</Limit>
</Directory>
</Anonymous>
- 22 -
Instalación y administración de servidores FTP Tema 4
Puedes convertir cualquier usuario privado (del sistema) que posea una consola de comandos válida
en /etc/shell en un usuario anónimo. Por ejemplo en las configuraciones anteriores sólo tendrías
que sustituir el usuario ' ftp ' y el usuario ' invitado ' por el nombre de un usuario existente en el
sistema operativo.
En la definición de la directiva VirtualHost podemos poner la IP del servidor FTP ó bien el nombre
DNS correspondiente. En nuestro escenario, la IP_Servidor_FTP=192.168.200.250, ftp.empresa1.com
y ftp.empresa2.com identifican a la misma máquina.
Hay que tener en cuenta que si las IP empleadas son IP privadas, sin existencia en Internet, siempre
que se haga referencia a las mismas a través de nombre de dominios, deberá existir un servidor DNS
- 23 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
que las resuelva en local o bien, en su defecto, deberán existir las entradas correspondientes en el
fichero del sistema local /etc/hosts .
donde,
ftppasswd ,
es el comando que permite crear los usuarios virtuales.
--passwd ,
es el parámetro que pedirá la contraseña del usuario.
--name user-empresa1 , identifica al usuario virtual de nombre user-empresa1 .
--file /etc/passwd.usuarios.virtuales , creará, en caso de no existir, o modificará, en caso
de existir el fichero de autenticación de usuarios virtuales.
--uid 107 , es el identificador perteneciente al usuario del sistema ftp. Se puede saber
ejecutando el comando: id ftp .
--home /var/ftp/empresa1 , identifica a donde se conecta el usuario.
--shell /bin/false , identifica una consola de comandos que no permite conexión como
usuario del sistema.
- 24 -
Instalación y administración de servidores FTP Tema 4
¿Cómo lo haces? Sigues el mismo procedimiento usado para los virtualhost basados en nombre,
únicamente se diferencia en la configuración de losvirtualhost, así:
1. Modifica la configuración virtualhost para empresa1 en el fichero /etc/proftpd/virtuals.conf
<VirtualHost 192.168.200.251>
ServerName "Servidor FTP empresa1"
AuthUserFile /etc/passwd.usuarios.virtuales
DefaultRoot /var/ftp/empresa1/
RequireValidShell off
</VirtualHost>
2. Agrega la configuración virtualhost para empresa2 en el fichero /etc/proftpd/virtuals.conf
<VirtualHost ftp.empresa2.com>
AuthUserFile /etc/passwd.usuarios.virtuales
ServerName "Servidor FTP empresa2"
- 25 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
DefaultRoot /var/ftp/empresa2/
RequireValidShell off
</VirtualHost>
3. Configura permisos en las carpetas /var/ftp/empresa1/ y /var/ftp/empresa2/ para los usuarios
virtuales:
chown ftp /var/ftp/empresa1/ /var/ftp/empresa2/
4. Recarga la configuración del servidor.
/etc/init.d/proftpd restart
donde,
<IfModule mod_quotatab.c> … </IfModule> → Indica que si el módulo mod_quotatab.c está
cargado en el archivo
/etc/proftpd/modules.conf se realizarán las
directivas que contengan.
QuotaEngine on → Activa las cuotas.
QuotaLog /var/log/proftpd/quota.log → Indica el archivo de registro sobre cuotas.
<IfModule mod_quotatab_file.c> … </IfModule> → Indica que si el módulo mod_quotatab_file.c
está cargado en el archivo
- 26 -
Instalación y administración de servidores FTP Tema 4
Para mayor información sobre las cuotas puedes visitar la documentación oficial de ProFTPD
sobre mod_quotatab .
http://www.proftpd.org/docs/contrib/mod_quotatab.html
La forma más sencilla de crear las cuotas es hacer el símil upload=espacio en disco, con lo cual los
archivos subidos no pueden ocupar más del que queramos darle como espacio en disco, esto es, los
bytes subidos funcionan como espacio en disco, ya que no existe diferencia entre ellos, pues los
bytes cargados a través de FTP se almacenan automáticamente en el disco, por lo que deberías
emplear la cuota tipo limit .
Por ejemplo, si quisieras limitar a un usuario de nombre user-empresa1 el espacio de subida en 4 GB:
# ftpquota --add-record --type=limit --name=user-empresa1 --quota-type=user \
--bytes-upload=4 --units=Gb --table-path=/etc/proftpd/ftpquota.limittab
Bien, pero, ¿cómo verificar el funcionamiento de las cuotas?. Y si quisieras comprobar la cuota de un
usuario, ¿es posible? ¿Y si quisieras actualizarla?¿Y desactivarlas para algún usuario?¿Y borrarlas?
Pues, utilizas el comando ftpquota como sigue:
Para ver los registros de cuotas, esto es, a quién se le está ejerciendo las cuotas:
# ftpquota --show-records --type=limit --table-path=/etc/proftpd/ftpquota.limittab
-------------------------------------------
Name: user-empresa1
Quota Type: User
Per Session: False
Limit Type: Hard
Uploaded bytes: 4294967296.00
Downloaded bytes: unlimited
Transferred bytes: unlimited
Uploaded files: unlimited
Downloaded files: unlimited
Transferred files: unlimited
Para actualizar la cuota de un usuario, por ejemplo, user-empresa1 :
# ftpquota --update-record --type=limit --name=user-empresa1 --quota-type=user \
--bytes-upload=2300 --units=Mb --table-path=/etc/proftpd/ftpquota.limittab
con lo cual, si compruebas de nuevo los registros, verás que los cambios surgieron efecto:
- 27 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
- 28 -
Instalación y administración de servidores FTP Tema 4
Puedes verificar en tiempo real las conexiones con el servidor ftp revisando los archivos de
registro mediante los comandos:
tail -f /var/log/proftpd/proftpd.log
tail -f /var/log/proftpd/tls.log
7. Si deseas, puedes hacer valer la configuración para todos los usuarios, incluso aquellos
pertenecientes a virtualhost, modificando el fichero /etc/proftpd/tls.conf como se indica en el
fichero ejemplo tls2.conf.
# Con esta configuración cualquier usuario del sistema puede acceder por ftp
<IfModule mod_tls.c>
<global>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
</global>
TLSProtocol SSLv23
<global>
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
TLSOptions NoCertRequest
TLSVerifyClient off
TLSRequired on
TLSRenegotiate required off
</global>
</IfModule>
- 29 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
###########################################Fin
/etc/proftpd/tls.conf###############################################
EOF
# Generar el certificado
proftpd-gencert
Antes de finalizar la ejecución se escribe, como consecuencia del comando proftpd-gencert para la
generación del certificado:
Country Name: ES
Locality Name: Madrid
Organization Name: Empresa
Common Name: ftp.empresa.ftpes.local
Una vez acabada la ejecución del script aparece el cliente ftp gráfico FileZilla. En la interface arriba a
la izquierda aparece el primer icono Abrir el Gestor de Sitios. Se hace clic en el mismo y aparece un
panel con dos secciones: la de la izquierda donde aparecen los Sitios configurados y la de la derecha
donde aparecen las opciones configuradas de cada Sitio Seleccionado:
En la sección de la izquierda aparecen dos sitios configurados, estando seleccionado el sitio FTPES-
PLANTILLA y monstrándose a la derecha la configuración del mismo:
En la caja de texto Servidor: localhost .
En Server Type : FTPES – FTP sobre TLS/SSL explícito.
En Logon Type : Preguntar la contraseña.
En la caja de texto Usuario: alumno .
Se vuelve a pulsar en el icono Abrir el Gestor de Sitios y aparece el nuevo sitio (perfil) configurado
FTPES-PLANTILLA . Ahora se pulsa el botón Conectar en la sección de la derecha del panel y aparece
una caja de texto preguntando la contraseña del usuario alumno, se escribe, acepta y aparece el
certificado digital de conexión a la espera de aceptarlo, se acepta y se establece la conexión con el
servidor localhost .
- 30 -
Instalación y administración de servidores FTP Tema 4
Se hace clic en el icono Desconectar del servidor actualmente visible y se vuelve a pulsar en el icono
Abrir el Gestor de Sitios y aparece el nuevo sitio(perfil) configurado FTPES-PLANTILLA . Ahora se pulsa
el botón Conectar en la sección de la derecha del panel y se establece la conexión con el servidor
localhost .
- 31 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
- 32 -
Instalación y administración de servidores FTP Tema 4
Anexo I - PAM
¿Qué es PAM?
La idea original de los Pluggable Authentication Modules, en adelante PAM, fue de Sun y sus
especificaciones se encuentran recogidas en RFC 86.0. Sin embargo, muchos otros sistemas
adoptaron esta solución y cuentan desde hace tiempo con sus propias implementaciones.
En este sentido, GNU/Linux no es una excepción y, gracias a Red Hat, disfruta ya desde hace años de
la funcionalidad que ofrece Linux-PAM (se hará referencia “PAM” y “Linux-PAM” indistintamente)
A lo largo de los años, desde los primeros sistemas UNIX, los mecanismos de autenticación han ido
evolucionando y han aparecido nuevas opciones: desde mejoras del clásico /etc/passwd —como la
shadow— hasta dispositivos hardware orientados a la autenticación. Y, claro está, cada vez que
aparecía y se popularizaba un nuevo método, los desarrolladores debían modificar sus programas
para darles soporte.
Pero PAM va más allá todavía, permitiendo al administrador del sistema construir políticas diferentes
de autenticación para cada servicio.
En resumen, podrían sintetizarse las ventajas más importantes de PAM en los siguientes puntos:
Ofrece un esquema de autenticación común y centralizado.
Permite a los desarrolladores abstraerse de las labores de autenticación.
Facilita el mantenimiento de las aplicaciones.
Ofrece flexibilidad y control tanto para el desarrollador como para el administrador de sistema.
Grupos de gestión
account (cuenta) En este grupo se engloban tareas que no están relacionadas directamente con la
autenticación. Algunos ejemplos son permitir/denegar el acceso en función de la hora, los recursos
disponibles o, incluso, la localización. Ofrece verificación de cuentas de usuario. Por ejemplo, se
encarga de determinar si el usuario tiene o no acceso al servicio, si su contraseña ha caducado, etc.
- 33 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
ignorando las demás. Estas tareas ofrecen incluso un sistema de credenciales que permiten al
usuario ganar ciertos privilegios —fijados por el administrador—.
password (contraseña) Se encarga de mantener actualizado el elemento de autenticación asociado a
cada usuario —por ejemplo, su contraseña—. Acciones como comprobar la fortaleza de una clave
son típicas de este grupo.
session (sesión) En este grupo se engloban tareas que se deben llevar a cabo antes de iniciarse el
servicio y después de que este finalice. Es especialmente útil para mantener registros de acceso o
hacer accesible el directorio home del usuario.
Arquitectura
Hasta ahora se ha estudiado cuál es la misión de PAM y qué grupos de tareas lleva a cabo. As´ı que, la
siguiente pregunta es: ¿cómo se organizan todas estas ideas?
La figura ilustra de forma clara su arquitectura.
+------------------- +
| application: X |
+------------------- + / +----------- + +=============== +
| authentication- [---->-- \---- ] Linux- |--<-- | PAM config file |
| + [----<-- /--- ] PAM | |=============== |
|[conversation()] [-- + \ | | | X auth .. a.so |
+-------------------- + | / +--n--n---- + | X auth .. b.so |
| | | __ | | | _____/
| service user | A | | |____,-------’
| | | V A
+-------------------- + +---------- |------ |---------- + -----+------+
+---- u------ u----+ | | |
| auth.... |---[ a ]---[ b ]---[ c ]
+----------------- +
| acct.... |---[ b ]---[ d ]
+----------------- +
| password |---[ b ]---[ c ]
+----------------- +
| session |---[ e ]---[ c ]
+----------------- +
Supóngase que una aplicación X quiere hacer uso de las facilidades ofrecidas por PAM. Para ello,
interactúa con la biblioteca de Linux-PAM, sin tener que conocer ningún detalle acerca de como está
configurado el sistema para la aplicación X. Será precisamente esta biblioteca quien se encargue de
leer la configuración de PAM para conocer qué política de autenticación ha de aplicarse —
combinando de forma conveniente una serie de módulos—.
Los módulos se colocan en una pila según el grupo de gestión y el orden en el que aparecen en la
configuración —un módulo puede pertenecer a varios grupos—, para ser utilizados por PAM cuando
corresponda. Este aspecto es tremendamente importante, ya que como se verá más adelante, el
orden de los módulos en la pila va a determinar, en gran medida, el comportamiento de PAM para
un servicio dado. En la figura, para la tarea de autenticación, se invocará primero al módulo a, luego
a b y, finalmente, a c (Pueden existir variaciones en el flujo, pero por el momento no se van a tener en cuenta).
Finalmente, PAM ofrece a la aplicación una serie de funciones para llevar a cabo las diferentes tareas
de cada grupo (autenticar, abrir sesión, etc.), mientras que la aplicación brinda a PAM una función de
conversación destinada a intercambiar información textual.
- 34 -
Instalación y administración de servidores FTP Tema 4
Gracias a esta función, PAM se libera de tener que preocuparse de cómo enviar/recibir información
del cliente —cuadros de diálogo, intercambio en un terminal, protocolos de red, etc.—.
Configuración
Afortunadamente, en todos los casos se utiliza la misma sintaxis, con la salvedad de que en el caso de
/etc/pam.conf hay que indicar el servicio al que pertenece cada directiva (con /etc/pam.d/ esta información
está implícita en el nombre del fichero de configuración).
En aras de la simplicidad, en adelante se supondrá que se usa el enfoque combinado, si bien este es
un detalle que, conceptualmente, carece de importancia.
$ ls /etc/pam.d/
chage chsh groupadd kde-np other shadow su system-auth xdm
chfn cups kde login passwd sshd sudo useradd xserver
Organización de la configuración en ficheros separados
Reglas
Los ficheros de configuración de PAM están compuestos por una serie de reglas a aplicar, una por
línea (aunque pueden dividirse en varias usando el caracter ‘\’). Se ignoran todas las líneas que comiencen por el
caracter ‘ # ’.
Pero antes, y para que lector se haga una idea de la estructura de este fichero, un pequeño ejemplo.
Esta configuración pertenece al servicio login de Red Hat Linux /etc/pam.d/login .
#%PAM-1.0
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so
Servicio
Este primer campo indica el nombre de la aplicación/servicio correspondiente, como por ejemplo
login , su o smtp . Tal y como se explicó anteriormente, se utiliza sólo en /etc/pam.conf , ya que en el
caso de la configuración mediante ficheros individuales el nombre servicio se encuentra implícito en
el del fichero.
- 35 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Existe un nombre de servicio reservado, other , que se utiliza para especificar reglas por defecto. Así,
en el caso de que, por ejemplo, no hubiese reglas para smtp , se le aplicarían las asociadas al
“servicio” other .
Tipo
Como se vio anteriormente, PAM puede dividir su actividad en cuatro tareas de gestión. Y tipo
expresa, precisamente, el área al que se destina esta regla. Puede adoptar uno de estos valores:
auth , account , session o password . Como ya se había mencionado con anterioridad, los módulos
correspondientes a un mismo área forman una pila.
Control
Este campo indica a PAM qué hacer en caso de éxito/fallo del módulo de la regla en cuestión,
ejecutándose en serie todos los del mismo tipo. El orden en la pila hay que tenerlo muy en cuenta a
la hora de determinar el valor adecuado para este campo.
Actualmente, pueden usarse dos sintaxis: la más simple consiste en una sola palabra clave, mientras
que la otra (más precisa y compleja) implica el uso de corchetes y parejas valor-acción. Para facilitar la
compresión, en primer lugar se va a estudiar la sintaxis más simple para, a continuación, explorar su
alternativa compleja.
Usando la sintaxis sencilla, este campo puede tomar únicamente cuatro valores diferentes:
required Indica que es necesario que el módulo tenga éxito para que la pila también lo tenga. Si
se produce un fallo, no se notifica hasta que se procesa el resto de la pila.
requisite En esencia, es igual que el anterior, con la diferencia de que en caso de fallo, el control
se devuelve inmediatamente a la aplicación.
sufficient El éxito en este módulo, si no se ha producido un fallo en los procesados anteriormente
en la pila, es “suficiente”. Llegados a este punto, el procesamiento se detiene (ignorando incluso
posibles required posteriores). Un fallo no siempre resulta definitivo para la pila.
optional Por lo general, PAM ignora los módulos marcados con este indicador. Su valor será
tenido en cuenta sólo en caso de que no se haya llegado a ningún valor concreto de éxito o
fracaso (por ejemplo, PAM IGNORE).
En lo que a las partes derechas se refiere, accioni puede ser un número entero positivo n o cualquiera
de estos valores:
ignore El valor que devuelve este módulo no se tiene en cuenta.
bad Si se trata del primer módulo en fallar, el valor que devuelva la pila será el que devuelva este
módulo.
die Equivalente al anterior, pero en este caso se devuelve el control a la aplicación de inmediato.
ok Si hasta el momento, el estado de la pila conduce a un éxito ( PAM SUCCESS ), el código que devuelve
será sobreescrito por el de este módulo. En caso contrario, deja el estado tal y como se lo encuentra.
done Funciona del mismo modo que ok, con la salvedad de que, llegado a este punto, devolverá el
control a la aplicación.
reset Se olvida el estado de la pila hasta el momento y se sigue con el siguiente módulo de la pila.
El valor entero positivo n que antes se mencionó, indica que deben saltarse los siguientes n módulos.
Esto permite al administrador tener, en cierto modo, control sobre el flujo de ejecución del proceso.
- 36 -
Instalación y administración de servidores FTP Tema 4
Para ilustrar la relación entre una y otra sintaxis de configuración, a continuación se expresan los
posibles valores de la sintaxis sencilla en función de expresiones de la sintaxis compleja.
required equivale a [success=ok newauthok_reqd=ok ignore=ignore default=bad] .
requisite equivale a [success=ok newauthok_reqd=ok ignore=ignore default=die] .
sufficient equivale a [success=done new_authok_reqd=done default=ignore] .
optional equivale a [success=ok new_authtok_reqd=ok default=ignore] .
Ruta
Este campo contiene la ruta del módulo que se va a utilizar: si empieza por el carácter ‘ / ’ se indica
una ruta absoluta. En otro caso, será relativa a /lib/security/ .
Argumentos
Se trata de argumentos que pueden ser pasados al módulo para su operación. Generalmente, los
argumentos son específicos para cada módulo y deberían estar documentados. Si se pasara un
argumento no válido, el módulo lo ignoraría, aunque debería usar syslog para informar del error.
En cuanto a la sintaxis, hay que señalar que si se quieren introducir espacios en blanco en un
argumento, éste deberá ir encerrado entre corchetes. Si lo que se pretende hacer es pasar un
corchete como parte del parámetro, habrá hacer uso del carácter de escape ‘ \ ’.
squid auth required pam_mysql.so user=passwd_query passwd=mada \
db=eminence [query=select user_name from internet_service where \
username_=‟%u‟ and password=PASSWORD(‟%p‟) and service=‟web_proxy‟]
En el ejemplo anterior puede observarse como se combinan distintos elementos para formar una
regla bastante compleja. Nótese que los valores %u y %p son sustituidos por el nombre de usuario y
la contraseña respectivamente.
Esto no pretende ser una guía de referencia exhaustiva, por lo que para detalles más concretos sobre
estos módulos se remite al lector a la documentación del proyecto. Simplemente, se expondrá una
breve descripción de cada módulo y se mostrarán cuáles son los principales argumentos que
admiten.
pam console.so
En el caso de que varios usuarios trabajasen al mismo tiempo en la consola física, los ficheros sólo se
le asignarían al primero en registrarse en el sistema, aunque esto no suele ocurrir.
- 37 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
pam cracklib.so
Grupo password
Se trata de un módulo preventivo que se encarga de notificar al usuario de la debilidad de su clave
cuando ve que puede “romperse” usando un diccionario. Este módulo entra en funcionamiento
cuando se establece o modifica la clave de un usuario.
Básicamente este módulo hace pasar la clave por la biblioteca cracklib . En caso de que pase como
clave segura, intentará las siguientes comprobaciones, comparando la nueva clave con la antigua:
Palíndromo Comprueba que la nueva contraseña no sea la vieja al revés.
Cambio de mayúsculas Realiza varias combinaciones cambiando mayúsculas por minúsculas y
viceversa.
Similar Comprueba que las claves se diferencian en más de difok caracteres.
Simple Verifica el tamaño de la clave.
Rotada Comprueba que la clave nueva no es una rotación de la antigua.
Ya usada Se asegura de que la clave no se ha usado con anterioridad. Las contraseñas ya usadas se
almacenan en /etc/security/opasswd .
Así mismo este módulo permite un gran número de parámetros, ahora se mostraran los más
importantes:
debug Muestra información mas detallada a través de syslog . Esta opción no imprimirá las claves en
el fichero de log.
retry=N Permite especificar el número de veces que se volverá a pedir la clave en caso de que no sea
segura. Por defecto es 1.
difok=N Indica el número de caracteres que deben ser diferentes entre la clave anterior y la nueva.
minlen=N Indica el número mínimo de caracteres que debe tener una clave.
use authok Evita que el usuario introduzca la nueva contraseña tomándola del módulo que se
encuentra por delante en la pila.
pam deny.so
pam env.so
Grupo authentication
Permite establecer las variables de entorno por defecto o sustituir los valores de las variables ya
establecidas cuando un usuario se registra en el sistema. El fichero donde se definen dichas variables
se encuentra en /etc/security/pam env.conf .
- 38 -
Instalación y administración de servidores FTP Tema 4
donde la cláusula default especificará el valor a tomar por defecto y override el valor por el que será
sustituido el contenido de la variable.
pam limits.so
Grupo session
Controla los límites impuestos en el fichero /etc/security/limits.conf a los recursos disponibles. Las
limitaciones se pueden aplicar a un usuario, a un grupo o a todos los usuarios del sistema. Los
recursos que se pueden limitar desde este módulo van desde el máximo tiempo de CPU asignable,
hasta el número máximo de ficheros que puede tener bloqueados simultáneamente.
pam nologin.so
pam permit.so
- 39 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Pam permit funciona justamente al contrario del módulo pam deny.so . Para cada llamada al módulo
este devuelve un acierto , PAM SUCCESS . Por esta razón este módulo es muy inseguro y debe de ser
usado con precaución extrema.
pam rootok.so
Grupo authentication
Pam rootok.so devuelve un acierto siempre que el identificador real del usuario sea 0 (el usuario root).
Con ello se consigue que el usuario root no necesite introducir la clave para acceder a los servicios
asociados a este módulo. Al usar pam rootok hay que tener mucho cuidado ya que plantea un grave
problema de seguridad. Si asociaramos pam rootok a un proceso que se arranca con el sistema, como
por ejemplo login , el uid real sera 0 y por lo tanto acertará siempre, independientemente de que
intentemos registrarnos con un usuario con uid distinto de 0.
pam securetty.so
Grupo authentication
Sirve para limitar las consolas en las que se puede autenticar el usuario root. El fichero
/etc/securetty contiene una lista de consolas seguras.
pam stack.so
pam wheel.so
Grupo authentication Limita la autenticación como root a los usuarios del grupo wheel .
Los parámetros admitidos por pam wheel son los siguientes:
debug Muestra información añadida a través del syslog .
use uid Modifica el comportamiento del módulo usando el el uid del proceso y no el nombre de
usuario de getlogin .
trust Con esta opción se consigue que los usuarios que pertenecen al grupo wheel cambiarse por el
usuario root sin usar la clave. Debe de usarse con mucho cuidado.
deny Este parámetro hace que el módulo se comporte al revés denegando a los usuarios del grupo
wheel la posibilidad de convertirse en root .
group=XXXX Permite especificar los grupos a los que se les permite la autenticación.
pam xauth.so
Grupo session
Se encarga de redireccionar las “cookies” de autenticación de un usuario a otro en el sistema X-
Window. Esto se usa para que, cuando un usuario se haga pasar por otro mediante el uso del
comando su o alguno de sus derivados, pueda seguir lanzando aplicaciones como el nuevo usuario
sin necesidad de salir y volver a entrar en el entorno X-Window.
Ejemplos de configuración
Ahora que ya se han estudiado tanto los fundamentos de configuración como el cometido de los
módulos más destacados de Linux-PAM, parece buena idea fijar la atención en una serie de ejemplos
reales, con el fin de ilustrar los conceptos vistos con anterioridad.
- 40 -
Instalación y administración de servidores FTP Tema 4
Para ello se comentará a continuación la configuración que da Red Hat Linux a algunos de sus
servicios. Concretamente, login , passwd , su y other .
Sin embargo, en primer lugar se va a tener en cuenta un servicio “artificial”, system-auth . Este
engloba políticas comunes a muchos otros servicios que lo incluyen en su configuración haciendo uso
del módulo pam stack . La ventaja de este esquema es que, en caso de querer cambiar el
comportamiento común de varios servicios, tan sólo es necesario modificar system-auth .
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
### auth ###
# Inicializa las variables de entorno definidas en /etc/security/pam_env.conf.
auth required /lib/security/$ISA/pam_env.so
# Autentica al usuario al estilo „unix‟ tradicional (/etc/passwd). Se detiene
# aquí si tiene éxito.
# nullok: permite contraseñas en blanco.
# likeauth: pam_sm_setcred() devuelve lo mismo que pam_sm_authenticate()
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
# Si se llega hasta aquí sin éxito, se falla.
auth required /lib/security/$ISA/pam_deny.so
### account ###
# Basándose en /etc/shadow, determina el estado de la cuenta de usuario (si ha
# expirado, debe cambiar la contraseña, etc.).
account required /lib/security/$ISA/pam_unix.so
### password ###
# Comprueba que la clave no es vulnerable a un ataque simple basado en
# diccionario.
# retry: 3 intentos para cambiar.
# type: modifica el mensaje. Para type=XXX, sería „New XXX password: ‟.
password required /lib/security/$ISA/pam_cracklib.so retry=3 type=
# Actualiza la contraseña.
# nullok: permite cambiar una contraseña en blanco. Sin este parámetro,
# una clave en blanco se interpreta como señal de que la cuenta se
# encuentra desactivada.
# use_authtok: toma como nueva contraseña la obtenida por el módulo anterior
# (cracklib en este caso).
# md5: usa la función MD5 para cifrar la contraseña.
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
# Si se llega hasta aquí sin éxito, se falla.
password required /lib/security/$ISA/pam_deny.so
### session ###
# Limita los recursos para la sesión del usuario en base al contenido del
# archivo /etc/security/limits.conf.
session required /lib/security/$ISA/pam_limits.so
# Registra el acceso al servicio en syslog, tanto al principio como al final
# de la sesión.
session required /lib/security/$ISA/pam_unix.so
Sólo un apunte más, los comentarios de los ficheros que se presentan en esta sección han sido
añadido por los autores de este documento, por lo que es probable que introduzcan algunas
imprecisiones.
login
El programa login ofrece a los usuarios la posibilidad de abrir una sesión en el sistema.
Este es uno de los puntos de acceso más sensibles y que, por lo general, ofrece un mayor riesgo para
la integridad del sistema. Así pues, la configuración de Linux-PAM en este (como en todos los servicios, a decir
verdad) debe estar especialmente cuidada.
Por lo general, login pide un nombre de usuario y una contraseña. Después de llevar a cabo una serie
de comprobaciones e inicializaciones, al usuario se le ofrece un intérprete de comandos ( shell ).
La configuración de este servicio en Red Hat Linux hace uso intensivo del servicio “artificial” system-
auth , siendo idénticas las pilas account y password . Las diferencias radican, principalmente, en que al
superusuario sólo se le permite acceder desde terminales físicas ( tty ), se deshabilita la entrada si
- 41 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
passwd
passwd es la utilidad que permite modificar la contraseña de las cuentas asociadas a los usuarios y a
los grupos. Actuando como un usuario normal del sistema solamente podrá modificar la propia
contraseña, mientras que el superusuario podrá modificar la contraseña de cualquier cuenta. Así
mismo, solamente el administrador de un grupo podrá cambiar la contraseña del grupo.
su
su es una aplicación que permite convertirse en otro usuario una vez que tenemos una sesión ya
abierta. Cuando se invoca sin parámetros el su actúa como si se quisiera convertir al superusuario,
root . En caso contrario su intentara convertirse en el usuario pasado por parámetro.
- 42 -
Instalación y administración de servidores FTP Tema 4
other
Tal y como se explicó con anterioridad, cuando PAM no encuentra un fichero de configuración para
un servicio en particular, aplica las reglas del servicio especial other . Por tanto, puede decirse que se
trata de la política por defecto.
Por motivos de seguridad, es aconsejable que este servicio deniegue cualquier acceso. Así, si Linux-
PAM no encuentra configuración para un servicio, simplemente denegará el acceso, minimizando
posibles amenazas.
Con esta premisa, la configuración resulta tremendamente simple, tal y como puede apreciarse en
las siguientes líneas.
#%PAM-1.0
# Por defecto, se deniega el acceso a cualquiera
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_deny.so
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_deny.so
PAM permite especificar comportamientos para cada uno de estos posibles valores en el fichero de
configuración . Para ello, se utiliza la sintaxis de pares valor=acción , colocando en la parte izquierda
de la asignación la la etiqueta del valor (cualquiera de los valores descritos a continuación sin el prefijo PAM y escrito en
minúscula; por ejemplo, auth err ).
authentication
- 43 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
account
PAM ACCT EXPIRED La cuenta del usuario ha caducado y ya no puede volver a acceder con dicha
cuenta.
PAM AUTH ERR El usuario no se autenticó.
PAM AUTHTOKEN REQD El token de autenticación ha caducado. Antes de volver a llamar a esta función se
debería pedir un nuevo token.
PAM SUCCESS Este valor se devuelve cuando el módulo ha tenido éxito.
PAM USER UNKNOWN El nombre de usuario es desconocido para el sistema de ‘ account‟ .
password
session
- 44 -
Instalación y administración de servidores FTP Tema 4
Anexo II - proftpd.conf
#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
#
# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 on
# If set on you can experience a longer connection delay in many cases.
IdentLookups off
ServerName "Debian"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
# Set the user and group that the server normally runs at.
User proftpd
Group nogroup
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
# Normally, we want files to be overwriteable.
AllowOverwrite on
- 45 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd off
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf
#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf
#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf
# <Anonymous ~ftp>
# User ftp
# Group nogroup
# # We want clients to be able to login with "anonymous" as well as "ftp"
# UserAlias anonymous ftp
# # Cosmetic changes, all files belongs to ftp user
# DirFakeUser on ftp
# DirFakeGroup on ftp
#
# RequireValidShell off
#
# # Limit the maximum number of anonymous logins
# MaxClients 10
#
# # We want 'welcome.msg' displayed at login, and '.message' displayed
- 46 -
Instalación y administración de servidores FTP Tema 4
- 47 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
#
# Server SSL certificate. You can generate a self-signed certificate using
# a command like:
#
# openssl req -x509 -newkey rsa:1024 \
# -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt \
# -nodes -days 365
#
# The proftpd.key file must be readable by root only. The other file can be
# readable by anyone.
#
# chmod 0600 /etc/ssl/private/proftpd.key
# chmod 0644 /etc/ssl/certs/proftpd.crt
#
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/proftpd.key
#
# CA the server trusts
#TLSCACertificateFile /etc/ssl/certs/CA.pem
# or avoid CA cert
TLSOptions NoCertRequest
#
# Authenticate clients that want to use FTP over TLS?
#
TLSVerifyClient off
#
# Are clients required to use FTP over TLS when talking to this server?
#
TLSRequired on
#
# Allow SSL/TLS renegotiations when the client requests them, but
# do not force the renegotations. Some clients do not support
# SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
# clients will close the data connection, or there will be a timeout
# on an idle data connection.
#
TLSRenegotiate required off
</IfModule>
###########################################Fin
/etc/proftpd/tls.conf###############################################
- 48 -
Instalación y administración de servidores FTP Tema 4
Anexo IV - tls2.conf
##########################################Fichero
/etc/proftpd/tls.conf###############################################
#
# Proftpd sample configuration for FTPS connections.
#
# Note that FTPS impose some limitations in NAT traversing.
# See http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html
# for more information.
#
<IfModule mod_tls.c>
<global>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
</global>
TLSProtocol SSLv23
<global>
#
# Server SSL certificate. You can generate a self-signed certificate using
# a command like:
#
# openssl req -x509 -newkey rsa:1024 \
# -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt \
# -nodes -days 365
#
# The proftpd.key file must be readable by root only. The other file can be
# readable by anyone.
#
# chmod 0600 /etc/ssl/private/proftpd.key
# chmod 0644 /etc/ssl/certs/proftpd.crt
#
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/proftpd.key
#
# CA the server trusts
#TLSCACertificateFile /etc/ssl/certs/CA.pem
# or avoid CA cert
TLSOptions NoCertRequest
#
# Authenticate clients that want to use FTP over TLS?
#
TLSVerifyClient off
#
# Are clients required to use FTP over TLS when talking to this server?
#
TLSRequired on
#
# Allow SSL/TLS renegotiations when the client requests them, but
# do not force the renegotations. Some clients do not support
# SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
# clients will close the data connection, or there will be a timeout
# on an idle data connection.
#
TLSRenegotiate required off
</global>
</IfModule>
###########################################Fin
/etc/proftpd/tls.conf###############################################
- 49 -
TEMA 5
Contenido
1.- Servidores de nombres de dominio. ........... 2 2.6.3.- Administrando un servidor LDAP: ............. 37
1.1.- Sistema de nombres de dominio. ..............2 2.6.4.- Configuración de los clientes. Instalación de
1.1.1.- ¿Cómo es un nombre de dominio? ............. 4 librerías de autentificación. .................................. 39
1.1.2.- Jerarquía de nombres de dominio. ............. 5 2.6.5.- Probar la autenticación con pamtest. ....... 40
1.2.- Ventajas del DNS. ......................................6 ANEXO I - Servidores raíz DNS........................ 41
1.3.- Funcionamiento del DNS. ..........................8 ANEXO II - Comprobar funcionamiento
1.4.- DNS Dinámico............................................9 servidor DNS BIND ......................................... 43
1.5.- Tipos de servidores DNS. .........................10 ANEXO III - Ejemplo despliegue aplicación web
1.6.- Servidores raíz. ........................................11 OpenCart ....................................................... 44
1.7.- Tipos de registros DNS. ............................12 ANEXO IV - Instalación y configuración de
1.8.- Funcionamiento del cliente DNS. .............14 OpenLDAP ...................................................... 46
1.8.1.- Consultas recursivas................................... 15
Instalación de OpenLDAP ................................46
1.8.2.- Consultas iterativas. ................................... 16
1.8.3.- Consultas inversas...................................... 17 Configuración inicial de OpenLDAP..................46
Arranque y parada manual del servidor LDAP ..... 47
1.9.- Cómo funcionan los DNS preferidos y
Administración de OpenLDAP..........................47
alternativos. ....................................................18
Introducción .......................................................... 47
1.10.- Comandos (I). ........................................19 Paso 1: Cargar plantillas .............................................47
Ejemplos de resolución directa: Resolución de Paso 2: Archivo de configuración del esquema básico
nombre a IP............................................................ 20 ...................................................................................47
1.10.1.- Comandos (II). .......................................... 21 Paso 3: Creación de unidades organizativas para
1.11.- Instalación del servidor DNS BIND. ........22 almacenar cuentas unix .............................................48
1.11.1.- Archivos de configuración del servidor ANEXO V - Explorador de directorios LDAP .... 51
DNS. ........................................................................ 22 Instalar phpldapadmin .................................... 51
1.11.2.- Arranque y parada del servidor DNS. ...... 24 JXplorer - Explorador LDAP en java ..................51
1.11.3.- Configuración como caché DNS. ............. 25 Conexión con el servidor LDAP ............................. 52
1.11.4.- Configuración como DNS maestro. ......... 26 Creación de usuarios y grupos con jxplorer ..............53
1.11.5.- Configuración como DNS esclavo. ........... 27 ANEXO VI - Administración de usuarios y
2.- Servicio de directorio. ............................... 29 grupos con LDAP ............................................ 55
2.1.- ¿Para qué usar un servicio de directorio? 30 Administración mediante scripts .....................55
2.2.- Directorio vs DNS. ...................................31 Administración con webmin ............................56
2.3.- Organización del directorio LDAP. ...........31 Configuración inicial del módulo de Usuarios y
2.4.- Integración del servicio de directorio con grupos LDAP........................................................... 56
otros servicios. ................................................33 Administración de usuarios y grupos de LDAP con
2.5.- El formato de intercambio de datos LDIF. 33 webmin .................................................................. 57
2.6.- Instalación de OpenLDAP. .......................34 Creación masiva de usuarios................................. 58
2.6.1.- Configuración de OpenLDAP. .................... 35 El módulo de servidor LDAP .................................. 59
2.6.2.- Arranque y parada del servidor LDAP. ...... 36 LDAP Account Manager ........................................ 59
Servicios de red implicados en el despliegue de una aplicación web Tema 5
-1-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
¿Alguna vez te has parado a pensar qué es lo que pasa desde que escribes una dirección URL (Dirección
de Internet de un recurso, válida para su posible utilización a través de Internet, la cual permite que el navegador la encuentre y la muestre
de forma adecuada)
en el navegador hasta que puedes ver la página web cargada? ¿Sería posible
acordarse de las páginas si tuviésemos que navegar a través de IP y no pudiéramos navegar a través
de nombres? ¿Qué es lo que pasa si cambiásemos la redirección DNS a otro servidor? ¿Es automático
el cambio? ¿Cuánto tiempo tarda? ¿Qué tiempo se necesita para activar los nuevos cambios?…
Internet funciona mediante el protocolo TCP/IP (el Transfer Control Protocol garantiza que los datos serán entregados en
su destino sin errores y una vez recogidos ponerlos en el mismo orden en que se transmitieron), efectuando conexiones
mediante IP. ¿Qué quiere esto decir? Pues, que cada host (dispositivo conectado a una red, que pueda proveer y
utilizar servicios de ella) en Internet se identifica mediante una IP, así es lo mismo visitar la página
http://www.rediris.es que http://130.206.13.20
Entonces, ¿sería posible visitar cada página web conociendo su IP? Efectivamente, sólo que los seres
humanos estamos más acostumbrados, a diferencia de las máquinas, a recordar nombres y no
números. ¿Qué te es más fácil recordar el DNI de una persona o su nombre y apellidos?. Por lo cual,
debe existir algo que nos traduzca los nombres a IPs o viceversa. Sí, por supuesto, este algo no es
otro que el servidor DNS o un archivo de texto, típicamente denominando hosts , como el archivo
/etc/hosts en sistemas GNU/Linux.
¿Pueden convivir en una misma máquina un servidor DNS y el archivo /etc/hosts ? Pues, sí. Pero hay
que tener en cuenta la preferencia. Así, en caso de coexistir, primero se intentará la resolución
IP/Nombre mediante el archivo /etc/hosts y, en caso de no encontrar correspondencia, actuará el
servidor DNS.
El fichero /etc/hosts permite alias de nombres de dominios, esto es, una misma IP puede apuntar a
nombres distintos. Cada línea del fichero comenzará con una IP y en la misma línea, separados por
espacios o tabuladores, puedes escribir los nombres de dominios correspondientes. El primer
nombre, el más cercano a la IP, es considerado el principal, los demás son alias de éste.
-2-
Servicios de red implicados en el despliegue de una aplicación web Tema 5
¿Es necesario configurar un servidor DNS o se puede hacer la redirección mediante archivos de
textos? Para la redirección deberá existir un servidor DNS que las resuelva o bien, en su defecto o a
mayores, deberán existir las entradas correspondientes en el fichero del sistema local /etc/hosts . En
caso de coexistir, primero se prueba la resolución en el fichero y luego en el servidor.
La complejidad radica en que en el fichero /etc/hosts los cambios son estáticos, así, para actualizar o
activar un nuevo cambio debe editarse en todos los ficheros /etc/hosts implicados. Esto es, supón
que posees 20 equipos que quieren resolver una página web, por ejemplo www.debian.org el
procedimiento sería aproximadamente el siguiente:
1. Se escribe la página web en cada equipo en la barra de direcciones del navegador.
2. Se traduce el nombre DNS a una IP. ¿Cómo se produce esto? Pues, ahí está el quid de la
cuestión: o bien mediante servidores DNS, o bien mediante ficheros estáticos /etc/hosts , con lo
cual se debe modificar este fichero en cada cliente. Y esto, como bien puedes pensar, se hace
arduo de manejar.
Pero, ¿y si la resolución tiene lugar mediante servidores DNS?, ¿y por qué servidores DNS y no
servidor DNS? Bien, existe, a modo de resumen, un procedimiento de resolución DNS, más o menos,
similar al siguiente (encontrarás el procedimiento exacto un poco más adelante):
Primero, se debe averiguar que servidor DNS resuelve el domino raíz ' org ' a una IP.
Segundo, una vez obtenida esa IP que gobierna el dominio raíz ' org ', se le pregunta por la IP del
servidor DNS que gobierna el subdominio ' debian ' bajo ' org '.
Tercero, una vez obtenida la IP del servidor DNS que gobierna el dominio ' debian.org ' se le
pregunta por la IP del equipo ' www.debian.org '
Pero, entonces: ¿cuántos servidores DNS existen a la hora de preguntar? ¿existe un número limitado
de redirecciones de consultas? ¿y, si se vuelve a hacer la misma consulta, hay que repetir el
proceso?. Bien, pues no existe un número limitado de redirección de consultas, lo que sucede es que
las consultas se van escalando hasta encontrar un servidor DNS que las resuelva, y escalando y
escalando puede ser que las consultas se resuelvan en los últimos servidores DNS a los cuales se
puede preguntar: los servidores raíz.
Pero, puede ser que no sea necesario escalar las consultas, puesto que todos los servidores DNS son
servidores caché, lo que significa que recuerdan las consultas efectuadas. Por lo tanto, si se hace una
consulta que ya está guardada en la caché, la respuesta es casi instantánea y ya ha sido resuelta. Es
más, los equipos clientes, desde donde se hace la consulta a través del navegador como se indicaba
en el ejemplo, también poseen una memoria caché DNS, de tal forma que anteriormente a preguntar
al servidor DNS, se mira en la caché del propio sistema operativo, y si se obtiene la respuesta el
proceso se ha acabado.
El sistema DNS en realidad es una base de datos distribuida, que permite la administración local de
segmentos que juntos componen toda la base de datos local. Los datos de cada segmento están
disponibles para toda la red a través de un esquema cliente-servidor jerárquico.
-3-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Te proponemos que hagas un viaje por la siguiente página web donde se documenta los
servidores raíz DNS.
http://www.root-servers.org/
Todas estas preguntas tienen respuesta, así que vamos a por ellas:
Primero: Los puntos separan dominios y subdominios, empezando de derecha a izquierda
tendrás dominios de primer nivel y dominios de segundo, tercer, …, n-ésimo nivel, denominados
subdominios. Así:
org es el dominio de primer nivel que identifica a organizaciones.
debian es un subdominio, en este caso dominio de segundo nivel bajo org , que identifica al
nombre de la organización o al nombre de la empresa, sucursal, etc.
www es un subdominio, en este caso dominio de tercer nivel bajo debian, que identifica al
equipo donde está colgada la página web, esto es, identifica el servidor web que aloja la
página web. Es el dominio www que el servidor DNS redirecciona a la IP del servidor web.
Segundo: http:// es el protocolo de hypertexto que permite la correcta visualización de la
página web en el navegador. Es lo que el navegador autocomplementa en caso de no estipular
uno propio en la barra de direcciones URL con el nombre de dominio.
Los dominios de primer nivel identifican el tipo de página web que solicitas o bien la localización de la
misma, por ejemplo:
net identifica redes.
com identifica comercio.
es identifica localización España.
tk identifica localización Tokelau.
-4-
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Esto suele ser lo común, más no es obligatorio, es decir, si una empresa posee un dominio com puede
dedicarse al sector de redes de comunicaciones y no poseer el dominio net , así como puede ser una
empresa localizada en España y no poseer el dominio es .
A nivel gramatical los dominios deben cumplir una serie de requisitos. Por ejemplo:
Sólo pueden estar compuestos de letras (alfabeto inglés), números y guiones ("-").
No pueden empezar o terminar por guiones.
Tienen que tener menos de 63 caracteres sin incluir la extensión, y más de uno o dos
dependiendo del dominio de primer nivel.
Ahora bien, hoy día ya es posible registrar dominios con caracteres de otras lenguas no inglesas,
como la ñ o la ç. Estos dominios se denominan multilingües.
La sintaxis de los nombres de dominio se discute en varios RFC (Request for Comments. Serie de documentos en los
que se detalla prácticamente todo lo relacionado con la tecnología de la que se sirve Internet: protocolos, recomendaciones,
comunicaciones...): RFC 1035, RFC 1123 y RFC 2181.
El espacio de nombres de dominio (el universo de todos los nombres de dominio) está organizado de
forma jerárquica. El nivel más alto en la jerarquía es el dominio raíz, que se representa como un
punto (".") y el siguiente nivel en la jerarquía se llama dominio de nivel superior (TLD). Sólo hay un
dominio raíz, pero hay muchosTLDs y cada TLD se llama dominio secundario del dominio raíz. En este
contexto, el dominio raíz es el dominio principal, ya que está un nivel por encima de un TLD y cada
TLD, a su vez, pueden tener muchos dominios hijos. Los hijos de los dominios de nivel superior se
llaman de segundo nivel, los del segundo nivel se llaman de tercer nivel, los del tercer nivel de
cuarto, y así sucesivamente.
Por lo tanto el DNS, organiza los nombres de máquina (hostname) en una jerarquía de dominios
separados por el carácter punto '.'. Un dominio es una colección de nodos relacionados de alguna
forma (porque están en la misma red, tal como los nodos de una empresa). Por ejemplo:
rrhh.departamento.empresa.org
marketing.departamento.empresa.org
contabilidad.consultas.empresa.org
Donde:
La empresa agrupa sus nodos en el dominio de primer nivel " org ". Éste es un TLD.
La empresa tiene un subdominio, dominio de segundo nivel " empresa " bajo " org ". Así " empresa "
es un dominio de segundo nivel, hijo del TLD " + ".
A su vez puedes encontrar nuevos subdominios dentro, en este caso: " departamento " y
" consultas ". Es decir, dominios de tercer nivel, hijos a su vez del dominio de segundo nivel
" empresa ".
Finalmente, un nodo que tendrá un nombre completo conocido como totalmente cualificado o
FQDN, que es la concatenación de: TLD, dominio de segundo nivel, dominio de tercer nivel, etc.,
tal como:
rrhh.departamento.empresa.org, marketing.departamento.empresa.org, contabilidad.consultas.empresa.org.
También es posible tener un dominio de cuarto nivel, dominio de quinto nivel, y así sucesivamente.
-5-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
En el siguiente enlace puedes encontrar una lista actualizada de los dominios de primer nivel
existentes.
http://data.iana.org/TLD/tlds-alpha-by-domain.txt
¿Qué pasaría si dispones de 20 equipos y en todos actualizas una entrada DNS en el fichero
/etc/hosts , salvo en 3 de ellos? Sí, esos tres quedarían no actualizados. ¿Y si en la próxima
actualización el cambio no se replica en otros 3, que pueden ser los mismos o no? ¿Y en la próxima
…?
Bien, parece que el sistema de modificar el archivo /etc/hosts no parece muy buena idea, puesto
que al ser cambios estáticos, más de un cambio puede quedar en el tintero, obteniendo al final un
sistema no homogéneo. Así, parece claro que la solución, para obtener un sistema no heterogéneo
es el DNS.
El DNS permite que cualquier cambio efectuado solamente en un servidor se replique en todos los
servidores DNS que la configuración permita, de tal forma que el cambio sólo se efectúa en un
servidor, obteniendo así facilidad y simplicidad en el cambio. Por lo tanto, cualquier cambio es
dinámico: configuras solamente un servidor y éste se encarga de replicar el cambio.
-6-
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Por otro lado, que es lo que pasa si un servidor DNS está caído y por lo tanto la conectividad con el
mismo no es posible: ¿quedaría todo el sistema inhabilitado? ¿te podrías conectar aún a páginas
web? Bien, pues como cada servidor DNS se ocupa de su zona, eso no imposibilita el acceso a otras
zonas y por lo tanto a la visibilidad y conectividad de otros dominios que no dependan de ese
servidor DNS. Es más, es posible que no solamente exista un servidor DNS configurado para controlar
esa zona, y por lo tanto tampoco esa zona estuviese no visible.
Una zona DNS es aquella parte del DNS para la cual se ha delegado la administración, es
decir, cuando configuras un dominio en un servidor DNS, éste debe pertenecer a una zona.
Así, en los archivos de configuración de zona se indicará qué IP va con el servicio web www,
el servicio de correo mail, etc. Los tipos de zonas posibles son dos:
1. Zona de Búsqueda Directa: las resoluciones de esta zona devuelven la dirección IP
correspondiente al recurso solicitado. Realiza las resoluciones que esperan como
respuesta la dirección IP de un determinado recurso.
2. Zona de Búsqueda Inversa: las resoluciones de esta zona buscan un nombre de equipo
en función de su dirección IP; una búsqueda inversa tiene forma de pregunta, del estilo
"¿Cuál es el nombre DNS del equipo que utiliza la dirección IP 192.168.200.100?".
Los servidores DNS no solamente sirven para la resolución de nombres en Internet, también se
pueden utilizar en redes locales. Así, las entradas existentes en los DNS de la red local podrían ser
visibles en Internet, o no, solamente sirviendo resolución a los equipos de la red local. De esta forma,
cuando un usuario de la red local intenta acceder a un recurso local, podrá utilizar nombres en lugar
de direcciones IP. Si el usuario desea acceder fuera de la red local a algún recurso en Internet, el DNS
local nunca podrá llevar a cabo dicha resolución y se la traslada al siguiente servidor DNS (que sí
estará en Internet) en su jerarquía de servidores DNS, hasta que la petición sea satisfecha.
Por ejemplo, con un servidor DNS en nuestra red local, que resuelve la IP 192.168.200.100 a
cliente.local y viceversa, puedes ejecutar el comando ping indistintamente contra dicha IP o contra
el nombre del equipo en el dominio:
ping 192.168.200.100
ping cliente.local
En ambos casos, deberías obtener la misma respuesta. Esto suele ser muy útil cuando los hosts
reciben su IP por DHCP (Protocolo de red que permite a los clientes de una red IP obtener sus parámetros de configuración de red
automáticamente) ya que puede ocurrir que desconozcamos la IP que tiene cierto equipo pero sí conocer
su nombre en el dominio, que será invariable.
Podemos resumir entonces las ventajas de la configuración y empleo de un servidor DNS en las
siguientes:
1. Desaparece la carga excesiva en la red y en los hosts: ahora la información esta distribuida por
toda la red, al tratarse de una base de datos distribuida.
2. No hay duplicidad de nombres: el problema se elimina debido a la existencia de dominios
controlados por un único administrador. Puede haber nombres iguales pero en dominios
diferentes.
3. Consistencia de la información: ahora la información que está distribuida es actualizada
automáticamente sin intervención de ningún administrador.
-7-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
La anterior imagen presenta gráficamente el funcionamiento del DNS, tomando como ejemplo la
página web www.debian.org y considerando que la información de la petición del dominio a buscar
no se encuentra en tu ordenador o en un servidor DNS local existente en tu red o en tu ordenador.
1. A través de tu navegador quieres consultar la página web oficial de Debian escribiendo en la
barra de direcciones laURL http://www.debian.org.
2. El navegador busca la información de las DNS del dominio debian.org.
3. Internet está ordenada en forma de árbol invertido, si no encuentra la información en tu
ordenador, irá a buscarla a los servidores DNS que posees en la configuración de red de tu
ordenador, típicamente los proporcionados por tu Proveedor de Servicios a Internet (ISP): DNS
Primario (3a) o DNS Secundario (3b). De no estar, seguirá buscándola a niveles superiores y, en
último lugar, lo encontrará en el Servidor de Nombres Raíz: DNS Raíz (3n).
4. La información buscada: las IP correspondientes al servidor DNS que gobierna el dominio
debian.org, llega a tu ordenador: DNS1→ 206.12.19.7 y DNS2→ 128.31.0.51. Suelen ser dos
porque las especificaciones de diseño de DNS recomiendan que, como mínimo, deben existir dos
servidores DNS para alojar cada zona, a la que pertenece cada dominio.
Tu ordenador ahora intentará conectar con el servidor DNS1 (5a) o ante cualquier problema de
conexión con éste lo intentará con el servidor DNS2 (5b). Éstos son los servidores de nombres
donde se encuentra información acerca de dónde se puede buscar la página web (servidor de la
web), una dirección de correo electrónico (servidor de correo), etc.
5. Tu ordenador recibirá la información acerca de la localización de la página web, o sea, la
dirección IP del servidor web donde está alojada la página.
6. Tu ordenador se dirigirá luego al servidor web y buscará la página web en él.
7. Por último, el servidor web devuelve la información pedida y tú recibes la página web,
visualizándola en el navegador.
Pero, y si vuelves a consultar la página web oficial de Debian escribiendo en la barra de direcciones la
URL http://www.debian.org, ¿se repetirá de nuevo todo el proceso? Para contestar esta pregunta
hay que establecer dos situaciones:
1. El host desde el que vuelves a realizar la consulta es el mismo: Si no lo es, antes de repetir todo el
proceso se intentaría con lo expuesto en el siguiente punto, pero si es el mismo, al haber hecho
-8-
Servicios de red implicados en el despliegue de una aplicación web Tema 5
la consulta desde este host, la resolución dominio-IP se guarda durante algún tiempo en la
memoria caché del mismo, por lo cual no será necesario repetir todo el proceso de nuevo. Si el
tiempo en el que la memoria caché guarda la resolución ha expirado se volverá a repetir el
proceso de nuevo.
2. Existe un servidor DNS caché en tu red o en tu host: por lo tanto, si un segundo cliente, que tiene
configurado este servidor DNS, vuelve a realizar la misma petición, como este servidor tiene la
respuesta almacenada en su memoria caché, responderá inmediatamente sin tener que cursar la
petición a ningún servidorDNS de Internet. Si el tiempo en el que la memoria caché guarda la
resolución ha expirado se volverá a repetir el proceso de nuevo.
Parece claro que si dispones de una IP estática de conexión a Internet, previo pago de un plus por
disponer siempre de una misma IP para tu conexión a Internet, simplemente deberías enrutar las
peticiones de los servicios que ofreces a los hosts que esperan la conexión a esos servicios. Si
además, posees nombres de dominios puedes redireccionar esos nombres a las IP de tus hosts a
través del servidor DNS.
Pero, volviendo a la pregunta, qué es lo que pasa si quieres hacer lo mismo y no dispones de IP
estática, esto es, cada vez que te conectas a Internet tu IP, aunque a veces sea la misma, no siempre
es la misma. Pues, sí, sí es posible, ¿cómo?. A priori, si lo piensas un poco, lo único que necesitarías
sería:
1. Recoger la IP de tu conexión cada vez que te conectas en Internet.
2. Una vez recogida tu IP difundirla en Internet. Para difundirla, o bien lo haces de forma estática, y
cada vez que la recoges te preocupas de hacer los cambios necesarios para difundirla, o bien de
forma dinámica configuras un programa para que automáticamente recoja la IP y la difunda.
Está claro, que la mejor opción es difundirla de forma dinámica, para ello puedes aprovecharte de
servicios ofrecidos, incluso de forma gratuita, por https://www.dyndns.com/account/ ,
http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html y
http://freedns.afraid.org/ . De hecho, hoy en día, los routers que los ISP suelen montar ya poseen la
opción de configuración por DNS dinámica.
El DNS dinámico, así, puede ofrecer servicios en Internet en hosts que posean conexión con dirección
IP dinámica, la típica configuración que los ISP ofrecen para conectarse a Internet.
De todos modos, aunque existe la posibilidad de ofrecer servicios en Internet desde tu propia casa,
debes tener en cuenta que, usualmente, la infraestructura técnica y la electrónica de red que poseas
no se pueda comparar con los servidores ofrecidos por empresas de Hosting, así: ¿posees
balanceadores de carga? ¿redundancia en caso de fallos? ¿generadores eléctricos que garanticen
conexión eléctrica permanente a pesar de caída eléctrica?¿Y, sobre todo, dispones del ancho de
banda necesario para permitir múltiples conexiones concurrentes sin perjudicar el servicio ofrecido?
Si no tienes configurado un servidor DNS con las entradas de dominio necesarias, puedes
generar estas entradas modificando el archivo /etc/hosts, añadiéndolas al final del mismo:
#IP nombre-dominio
192.168.200.250 empresa1.com www.empresa1.com
-9-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Dependiendo de la configuración y
funcionamiento de los servidores, éstos
pueden desempeñar distintos papeles:
Servidores primarios (primary name servers). Estos servidores almacenan la información de su
zona en una base de datos local. Son los responsables de mantener la información actualizada y
cualquier cambio debe ser notificado a este servidor.
Servidores secundarios (secundary name servers). También denominados esclavos, aunque a su
vez pueden ser maestros de otros servidores secundarios. Son aquellos que obtienen los datos
de su zona desde otro servidor que tenga autoridad para esa zona. El proceso de copia de la
información se denomina transferencia de zona.
Servidores maestros (master name servers). Los servidores maestros son los que transfieren las
zonas a los servidores secundarios. Cuando un servidor secundario arranca busca un servidor
maestro y realiza la transferencia de zona. Un servidor maestro para una zona puede ser a la vez
un servidor primario o secundario de esa zona. Así, se evita que los servidores secundarios
sobrecarguen al servidor primario con transferencias de zonas. Por ejemplo, en la imagen el
servidor DNS3 pide la zona al servidor DNS2 y no al servidor DNS1, con lo cual se evita la
sobrecarga del servidor DNS1. Los servidores maestros extraen la información desde el servidor
primario de la zona.
Servidores sólo caché (caching-only servers). Los servidores sólo caché no tienen autoridad sobre
ningún dominio: se limitan a contactar con otros servidores para resolver las peticiones de los
clientes DNS. Estos servidores mantienen una memoria caché con las últimas preguntas
contestadas. Cada vez que un cliente DNS le formula una pregunta, primero consulta en su
memoria caché. Si encuentra la dirección IP solicitada, se la devuelve al cliente; si no, consulta a
otros servidores, apunta la respuesta en su memoria caché y le comunica la respuesta al cliente.
Disponer de un servidor caché DNS en nuestra red local aumenta la velocidad de la conexión a
Internet pues cuando navegamos por diferentes lugares, continuamente se están realizando
peticiones DNS. Si nuestro caché DNS almacena la gran mayoría de peticiones que se realizan
desde la red local, las respuestas de los clientes se satisfarán prácticamente de forma
instantánea proporcionando al usuario una sensación de velocidad en la conexión. Muchos
routers ADSL ofrecen ya este servicio de caché, tan solo hay que activarlo y configurar una o dos
IPs de servidores DNS en Internet. En los equipos de nuestra red local podríamos poner como
DNS primario la IP de nuestro router y como DNS secundario una IP de un DNS de Internet.
Los servidores secundarios son importantes por varios motivos. En primer lugar, por
seguridad: debido a que la información se mantiene de forma redundante en varios
servidores a la vez. Si un servidor tiene problemas, la información se podrá recuperar desde
otro. Y en segundo lugar, por velocidad: porque evita la sobrecarga del servidor principal
- 10 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Otros asuntos que preocupan a los usuarios de Internet, como reglamentación para transacciones
financieras, control del contenido de Internet, correo electrónico de publicidad no solicitada (SPAM)
y protección de datos, están fuera del alcance de la misión de coordinación técnica de ICANN.
Las empresas, ciudades u organizaciones podrán registrar sus propios dominios genéricos, tras la
decisión adoptada el 20 de Junio de 2011 por la ICANN en Singapur. Esta iniciativa permitirá que las
direcciones de los dominios puedan terminar con el nombre de compañía, ciudad, etc., en vez de
.com, .net o.org.
Los servidores raíz son entidades distintas. Hay 13 servidores raíz o, más precisamente, 13
direcciones IP en Internet en las que pueden encontrarse a los servidores raíz (los servidores que
- 11 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
tienen una de las 13 direcciones IP pueden encontrarse en docenas de ubicaciones físicas distintas).
Todos estos servidores almacenan una copia del mismo archivo que actúa como índice principal de
las agendas de direcciones de Internet. Enumeran una dirección para cada dominio de nivel principal
(.com, .es, etc.) en la que puede encontrase la propia agenda de direcciones de ese registro.
En realidad, los servidores raíz no se consultan con mucha frecuencia (considerando el tamaño de
Internet) porque una vez que los ordenadores de la red conocen la dirección de un dominio de nivel
principal concreto pueden conservarla, y sólo comprueban de forma ocasional que esa dirección no
haya cambiado. Sin embargo, los servidores raíz siguen siendo una parte vital para el buen
funcionamiento de Internet.
Las entidades encargadas de operar los servidores raíz son bastante autónomas pero, al mismo
tiempo, colaboran entre sí y con ICANN para asegurar que el sistema permanece actualizado con los
avances y cambios de Internet.
Los trece servidores raíz DNS se denominan por las primeras trece letras del alfabeto latino, de la A
hasta la M (A.ROOT-SERVERS.NET., B.ROOT-SERVERS.NET., …,M.ROOT-SERVERS.NET.), y están en
manos de 9 organismos y corporaciones diferentes e independientes, principalmente universidades,
empresas privadas y organismos relacionados con el ejercito de EE.UU. Aproximadamente la mitad
depende de organizaciones públicas estadounidenses.
Todos los registros de recursos (RR) tienen un formato definido que utiliza los mismos campos de
nivel superior, según se describe en la tabla siguiente:
Formato de los registros de recursos DNS
Campo Descripción
Indica el nombre de dominio DNS que posee un registro de recursos. Este nombre
Propietario es el mismo que el del nodo del árbol de la consola donde se encuentra un registro
de recursos.
Para la mayor parte de los registros de recursos, este campo es opcional. Indica el
espacio de tiempo utilizado por otros servidores DNS para determinar cuánto tarda
la información en caché en caducar un registro y descartarlo. Por ejemplo, la mayor
parte de los registros de recursos que crea el servicio del servidor DNS heredan el
TTL mínimo (predeterminado) de 1 hora desde el registro de recurso de inicio de
Tiempo de autoridad (SOA) que evita que otros servidores DNS almacenen en caché durante
vida (TTL) demasiado tiempo. En un registro de recursos individual, puede especificar unTTL
específico para el registro que suplante el TTL mínimo (predeterminado) heredado
del registro de recursos de inicio de autoridad. También se puede utilizar el valor
cero (0) para el TTL en los registros de recursos que contengan datos volátiles que
no estén en la memoria caché para su uso posterior una vez se complete la
consulta DNS en curso.
Clase Contiene texto nemotécnico estándar que indica la clase del registro de recursos.
- 12 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Por ejemplo, el valor "IN" indica que el registro de recursos pertenece a la clase
Internet. Este campo es obligatorio.
Contiene texto nemotécnico estándar que indica el tipo de registro de recursos. Por
Tipo ejemplo, el texto nemotécnico "A" indica que el registro de recursos almacena
información de direcciones de host. Este campo es obligatorio.
Datos Un campo de longitud variable y obligatorio con información que describe el
específicos del recurso. El formato de esta información varía según el tipo y clase del registro de
registro recursos.
- 13 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
"Los sabios son los que buscan la sabiduría; los necios piensan ya haberla encontrado."
Napoleón Bonaparte
Por ejemplo, el nombre especificado puede ser el nombre completo de un equipo, como
rrhh.departamento.empresa.org. , y el tipo de consulta especificado para buscar un registro de
recursos de dirección (A) por ese nombre. Considere una consulta DNS como una pregunta de un
cliente a un servidor en dos partes, como: "¿Tiene algún registro de recursos de dirección (A) de un
equipo llamado ' rrhh.departamento.empresa.org. '?". Cuando el cliente recibe una respuesta del
servidor, lee e interpreta el registro de recursos "A" respondido, y aprende la dirección IP del equipo
al que preguntó por el nombre.
- 14 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Tu ordenador (cliente DNS) formula una consulta a tu servidor DNS preferido (el que tienes
configurado como primero en tu configuración de red, generalmente el proveedor de Internet).
Cuando el servidor DNS recibe una consulta, primero comprueba si puede responder la consulta en
las zonas configuradas localmente en el servidor, esto es, en las zonas que posee autoridad. Así,
pueden ocurrir dos situaciones:
1. Si el nombre consultado existe, esto es, coincide con un registro de recursos correspondiente en
la información de zona local, el servidor responde con autoridad y usa esta información para
resolver el nombre consultado.
2. Si el nombre consultado no existe, esto es, no existe ninguna información de zona para el
nombre consultado, a continuación el servidor comprueba si puede resolver el nombre mediante
la información almacenada en la caché local de consultas anteriores. De nuevo, se dan dos
situaciones:
a. Si el servidor preferido puede responder al cliente solicitante con una respuesta coincidente
de su caché, finaliza la consulta y responde con esta información.
b. Si el servidor preferido no puede responder al cliente solicitante con una respuesta
coincidente de su caché, el proceso de consulta puede continuar y se usa la recursividad para
resolver completamente el nombre. Esto implica la asistencia de otros servidores DNS para
ayudar a resolver el nombre. De forma predeterminada, el servicio cliente DNS solicita al
servidor que utilice un proceso de recursividad para resolver completamente los nombres en
nombre del cliente antes de
devolver una respuesta. En la
mayor parte de los casos, el
servidor DNS se configura, de
forma predeterminada, para
admitir el proceso de
recursividad como se muestra en
el gráfico siguiente.
- 15 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Para que el servidor DNS realice la recursividad correctamente, primero necesita información de
contacto útil acerca de los otros servidores DNS del espacio de nombres de dominio DNS. Esta
información se proporciona en forma de sugerencias de raíz, una lista de los registros de recursos
preliminares que puede utilizar el servicio DNS para localizar otros servidores DNS que tienen
autoridad para la raíz del árbol del espacio de nombres de dominio DNS. Los servidores raíz tienen
autoridad para el dominio raíz y los dominios de nivel superior en el árbol del espacio de nombres de
dominio DNS.
Un servidor DNS puede completar el uso de la recursividad utilizando las sugerencias de raíz para
encontrar los servidores raíz. En teoría, este proceso permite a un servidor DNS localizar los
servidores que tienen autoridad para cualquier otro nombre de dominio DNS que se utiliza en
cualquier nivel del árbol del espacio de nombres.
Por ejemplo, piense en la posibilidad de usar el proceso de recursividad para localizar el nombre
" www.ejemplo.com " cuando el cliente consulte un único servidor DNS. El proceso ocurre cuando un
servidor y un cliente DNS se inician y no tienen información almacenada en la caché local disponible
para ayudar a resolver la consulta de un nombre. El servidor supone que el nombre consultado por el
cliente es para un nombre de dominio del que el servidor no tiene conocimiento local, según sus
zonas configuradas.
Primero, el servidor preferido analiza el nombre completo y determina que necesita la ubicación del
servidor con autoridad para el dominio de nivel superior "com". A continuación, utiliza una consulta
iterativa al servidor DNS "com" para obtener una referencia al servidor "ejemplo.com". Finalmente,
se entra en contacto con el servidor "ejemplo.com". Ya que este servidor contiene el nombre
consultado como parte de sus zonas configuradas, responde con autoridad al servidor original que
inició la recursividad. Cuando el servidor original recibe la respuesta que indica que se obtuvo una
respuesta con autoridad a la consulta solicitada, reenvía esta respuesta al cliente solicitante y se
completa el proceso de consulta recursiva.
Aunque el proceso de consulta recursiva puede usar muchos recursos cuando se realiza como se
describe anteriormente, tiene algunas ventajas en el rendimiento para el servidor DNS. Por ejemplo,
durante el proceso de recursividad, el servidor DNS que realiza la búsqueda recursiva obtiene
información acerca del espacio de nombres de dominio DNS. Esta información se almacena en la
caché del servidor y se puede utilizar de nuevo para ayudar a acelerar la obtención de respuestas a
consultas subsiguientes que la utilizan o concuerdan con ella. Con el tiempo, esta información
almacenada en caché puede crecer hasta ocupar una parte significativa de los recursos de memoria
del servidor, aunque se limpia siempre que el servicio DNS se activa y desactiva.
- 16 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Una solicitud iterativa de un cliente informa al servidor DNS de que el cliente espera la mejor
respuesta que el servidor DNSpueda proporcionar inmediatamente, sin entrar en contacto con otros
servidores DNS.
"El modo de dar una vez en el clavo es dar cien veces en la herradura.
"Miguel de Unamuno
En la mayoría de la consultas DNS los clientes normalmente realizan una búsqueda directa. Este tipo
de consulta espera recibir una dirección IP como respuesta a la consulta. Pero, DNS también
proporciona un proceso de búsqueda inversa, es decir, buscar un nombre de host a través de una
dirección IP. Así, una búsqueda inversa busca la respuesta a una pregunta tipo como la siguiente:
¿Cuál es el nombre DNS del host que utiliza la dirección IP 192.168.200.100?.
DNS no se diseñó originalmente para aceptar este tipo de consulta. Un problema de compatibilidad
con el proceso de consulta inversa es la diferencia en la forma en que el espacio de nombres DNS
organiza e indexa los nombres, y cómo se asignan las direcciones IP. Si el único método para
responder a la pregunta anterior fuera buscar en todos los dominios del espacio de nombres DNS,
una consulta inversa llevaría demasiado tiempo y requeriría un procesamiento demasiado largo
como para ser útil.
Entonces, para resolver este problema, en el estándar DNS se definió y se reservó un dominio
especial para las IP versión 4, el dominio in-addr.arpa , en el espacio de nombres DNS de Internet con
el fin de proporcionar una forma práctica y confiable para realizar las consultas inversas. Al crear el
- 17 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
espacio de nombres inverso, los subdominios del dominio in-addr.arpa se crean con el orden inverso
de los números en la notación decimal con puntos de las direcciones IP. Por ejemplo, para la
IP192.168.200.100 su resolución inversa sería:
100.200.168.192.in-addr.arpa.
Este orden inverso de los dominios para el valor de cada octeto es necesario porque, a diferencia de
los nombres DNS, cuando se leen las direcciones IP de izquierda a derecha se interpretan al
contrario. Cuando se lee una dirección IP de izquierda a derecha, se ve desde su información más
general (una dirección IP de red) en la primera parte de la dirección a la información más específica
(una dirección IP de host) que contienen los últimos octetos. Por esta razón, se debe invertir el orden
de los octetos de las direcciones IP cuando se crea el árbol del dominio in-addr.arpa. .
En el siguiente enlace puedes encontrar más información disponible acerca de IPv6 y DNS,
con ejemplos acerca de cómo crear y usar nombres de dominio ip6.arpa, en el documento
RFC 3596 Extensiones DNS compatibles con IP versión 6.
http://www.normes-internet.com/normes.php?rfc=rfc3596&lang=es
Ten en cuenta que, si el servidor DNS no puede responder el nombre de la consulta inversa, se puede
utilizar la resolución DNS normal (ya sea la recursividad o la iteración) para localizar un servidor DNS
con autoridad para la zona de búsqueda inversa y que contenga el nombre consultado. En este
sentido, el proceso de resolución de nombres utilizado en una búsqueda inversa es idéntico al de una
búsqueda directa.
Opcionalmente, puedes especificar una lista completa de servidores DNS alternativos. Los servidores
DNS preferidos y alternativos especificados se consultan en el orden que aparezcan en la lista.
Sin un servidor DNS preferido, el cliente DNS no puede consultar un servidor DNS. Sin un DNS
alternativo, las consultas no se resolverán si el servidor DNS preferido falla.
- 18 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Los pasos siguientes indican el proceso para entrar en contacto con servidores DNS preferidos y
alternativos:
1. El servidor DNS preferido responde primero a una consulta DNS o a una actualización DNS.
2. Si el servidor DNS preferido no responde a una consulta DNS o a una actualización DNS, la
consulta o actualización se redirige al servidor DNS alternativo.
3. Si el servidor DNS alternativo no responde y el cliente DNS está configurado con las direcciones
IP adicionales de servidores DNS, el cliente DNS envía la consulta o actualización al siguiente
servidor DNS de la lista.
4. Si alguno de los servidores DNS (un servidor preferido, un servidor alternativo o cualquier otro
de la lista) no responde, dicho servidor se quita temporalmente de la lista.
5. Si ninguno de los servidores DNS responden, la consulta o actualización del cliente DNS no se
realiza.
En los equipos tipo GNU/Linux puedes configurar estos servidores en el archivo /etc/resolv.conf e
incluso puedes realizar balanceo de carga entre ellos, así como la modificación del tiempo de espera
efectuado desde que un servidor falla hasta que se prueba con otro.
En este caso si 8.8.8.8 falla la resolución se realizará a través de 8.8.4.4 . El problema es que por
defecto el valor de tiempo de espera ( timeout ) asignado es 5 segundos, por lo que tardará un tiempo
en detectar que tiene que utilizar el segundo DNS y todo irá muy lento. Para solucionarlo, tienes que
usar la directiva " options " y modificar el timeout . Así, puedes poner 1 segundo como se demuestra
en el siguiente ejemplo:
nameserver 8.8.8.8
nameserver 8.8.4.4
options timeout:1
Otra opción también interesante es " rotate ", que permite distribuir la carga entre todos los
servidores listados y evitar que todas las peticiones vayan siempre al primero:
nameserver 8.8.8.8
nameserver 8.8.4.4
options timeout:1 rotate attempts:1
Configurando estas opciones aseguramos que en caso del fallo del servidor DNS preferido el
rendimiento de la máquina no se degrade.
Ten en cuenta que es posible y más que probable que el fichero /etc/resolv.conf sea modificado
cuando configuras la red mediante un gestor de conexión de redes, como: NetworkManager, wicd …
Por lo tanto, revisa este fichero.
Es conveniente que le des una visita al manual de resolv.conf: man resolv.conf .
- 19 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
indica, según su respuesta, si posees conectividad con la máquina en cuestión. El comando ping lo
puedes utilizar para consultar direcciones IP o nombres de dominios.
Por lo tanto, el comando ping debe ser capaz de consultar información sobre el sistema de nombres
de dominio; es un resolutor, un programa cliente capaz de consultar información sobre el sistema de
nombres de dominio. Normalmente, un resolutor trabaja discretamente en segundo plano y los
usuarios no conocen su presencia, es decir, que toda consulta de un cliente DNS a su servidor suele
realizarla el programa que invocamos ( ping , ftp , telnet , mail , navegador web , etc.). Por ejemplo, si
solicitas una conexión ftp a ftp.rediris.es, la aplicación ftp que emplees llama a un programa
resolutor local que busca la dirección IP de ese ordenador 130.206.1.5 sin que tengas conciencia de
ello, esto es, para ti el proceso es transparente. Además de este trabajo en segundo plano, el usuario
puede conectarse directamente al programa resolutor enviando consultas y resolviendo respuestas.
Comandos resolutores típicos en sistemas operativos GNU/Linux son: nslookup , host y dig .
1. Comando nslookup :
Para consultar la dirección IP del ordenador ftp.rediris.es, basta con ejecutar:
nslookup ftp.rediris.es
alumno@servidor-fp:~$ nslookup ftp.rediris.es
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
ftp.rediris.es canonical name = zeppo.rediris.es.
Name: zeppo.rediris.es
Address: 130.206.1.5
Donde puedes ver que ftp.rediris.es es un alias (CNAME) de zeppo.rediris.es cuya dirección
IP es 130.206.1.5
2. Comando host :
Para consultar la dirección IP del ordenador ftp.rediris.es , basta con ejecutar:
host ftp.rediris.es
alumno@servidor-ftp:~$ host ftp.rediris.es
ftp.rediris.es is an alias for zeppo.rediris.es.
zeppo.rediris.es has address 130.206.1.5
Donde puedes ver que ftp.rediris.es es un alias (CNAME) de zeppo.rediris.es cuya dirección IP
es 130.206.1.5
3. Comando dig :
Para consultar la dirección IP del ordenador ftp.rediris.es , basta con ejecutar:
dig ftp.rediris.es
alumno@servidor-ftp:~$ dig ftp.rediris.es
;; QUESTION SECTION:
;ftp.rediris.es. IN A
;; ANSWER SECTION:
ftp.rediris.es. 7200 IN CNAME zeppo.rediris.es.
zeppo.rediris.es. 5195 IN A 130.206.1.5
- 20 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jul 29 11:13:44 2011
;; MSG SIZE rcvd: 68
Donde puedes ver que
ftp.rediris.es es un alias (CNAME)
de zeppo.rediris.es cuya dirección
IP es 130.206.1.5
1. Comando nslookup :
nslookup 130.206.1.5
alumno@servidor-fp:~$ nslookup 130.206.1.5
Server: 80.58.61.254
Address: 80.58.61.254#53
Non-authoritative answer:
5.1.206.130.in-addr.arpa name = zeppo.rediris.es.
;; QUESTION SECTION:
;5.1.206.130.in-addr.arpa. IN PTR
;; ANSWER SECTION:
5.1.206.130.in-addr.arpa. 7200 IN PTR zeppo.rediris.es.
Es conveniente que le des una visita al manual de los comandos nslookup , host y dig .
- 21 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Para mantenerte informado y actualizado es recomendable que visites la página oficial del
servidor BIND.
http://www.isc.org/software/bind
Tras la instalación del servidor DNS BIND (bind9) existe la ruta /etc/bind , la cual contiene sus
ficheros de configuración. Una estructura tipo de /etc/bind que puedes encontrar al instalar bind
sería similar a la que se muestra en la siguiente imagen:
- 22 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Donde,
/etc/bind/named.conf.options : hace referencia al archivo de configuración que posee opciones
genéricas.
/etc/bind/named.conf.local :
hace referencia al archivo de configuración para opciones particulares.
/etc/bind/named.conf.default-zones : hace referencia al archivo de configuración de zonas.
Dentro de cada uno de estos archivos encontrarás partes de código agrupadas entre llaves que
finalizan con el carácter punto y coma ( ; ), conocidos como declaraciones, las cuales indicarán
secciones de ejecución. Cualquier código en un archivo de configuración que comience con los
caracteres doble barra ( // ), almohadilla ( # ) o aparezca encerrado entre barra asterisco ( /* ) y
asterisco barra ( */ ) son considerados comentarios y por lo tanto no se ejecuta.
Puedes modificar los ficheros de configuración a tu antojo. Así, puedes crear incluso nuevos ficheros
de configuración que sean llamados desde otros mediante la directiva include .
Elementos que puedes emplear en los ficheros de configuración, de la versión BIND 9.7
empleada en esta unidad, los puedes encontrar en la documentación oficial en formato
HTML sobre BIND
http://ftp.isc.org/isc/bind9/cur/9.7/doc/arm/Bv9ARM.ch06.html
Puedes realizar una verificación de los ficheros de configuración y de zona por posibles fallos
mediante los comandos " named-checkconf " y " named-checkzone " respectivamente. Estos comandos
suelen ejecutarse con la siguiente sintaxis:
named-checkconf [-p] {filename}
donde,
named-checkconf → comprueba la sintaxis pero no la semántica de un fichero de configuración named .
El fichero se analiza y comprueba por errores de sintaxis, junto con todos los archivos incluidos en él.
Si no se especifica ningún fichero, por defecto se comprueba /etc/named.conf .
-p → imprime la salida de named.conf y los ficheros incluidos en forma canónica si no fueron
detectados errores.
filename → El nombre del archivo de configuración que desea comprobar. Si no se especifica, por
defecto es /etc/named.conf .
Ejemplos de ejecución:
1. Verificar archivo de configuración
/etc/bind/named.conf:
root@debian-servidor-fp:/etc/bind# named-checkconf -p /etc/bind/named.conf
2. Verificar el dominio de zona ejemplo.com en el archivo de zona
/var/lib/bind/master/db.ejemplo.com.hosts
root@debian-servidor-fp:/etc/bind# named-checkzone ejemplo.com
/var/lib/bind/master/db.ejemplo.com.hosts
- 23 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Como puedes comprobar la salida del comando determina que el servicio está inactivo, entonces lo
arrancamos:
root@debian-servidor-fp:~# service bind9 start
Starting domain name service...: bind9.
Ahora puedes comprobar que la salida del comando determina que el servicio está activo.
Comando /etc/init.d/bind9 :
1. Comprobar las opciones del comando:
root@debian-servidor-fp:~# /etc/init.d/bind9
Usage: /etc/init.d/bind9 {start|stop|reload|restart|force-reload|status}.
2. Arrancar el servidor DNS:
root@debian-servidor-fp:~# /etc/init.d/bind9 start
Starting domain name service...: bind9.
3. Parar el servidor DNS:
root@debian-servidor-fp:~# /etc/init.d/bind9 stop
Stopping domain name service...: bind9 waiting for pid 2061 to die.
4. Comprobar el estado activo/inactivo del servicio:
root@debian-servidor-fp:~# /etc/init.d/bind9 status
could not access PID file for bind9 ... failed!
Como puedes comprobar la salida del comando determina que el servicio está inactivo, entonces lo
arrancamos:
root@debian-servidor-fp:~# /etc/init.d/bind9 start
Starting domain name service...: bind9.
- 24 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Ahora puedes comprobar que la salida del comando determina que el servicio está activo.
Todos los servidores DNS son servidores caché, pero no por ello deben ser maestro o
esclavo. Así, existe la posibilidad que un servidor DNS funcione solamente como servidor
caché, sin que sea maestro o esclavo.
En GNU/Linux Debian 6.0 (Squeeze) la configuración de un servidor DNS BIND (bind9) como caché
viene establecida en el archivo /etc/bind/named.conf.options , donde se indica: el directorio de caché
y los servidores DNS a reenviar las peticiones que no se pueden resolver de forma local mediante la
caché: los servidores forwarders, para que luego estas consultas se vayan guardando en la caché.
El directorio de caché, /var/cache/bind , está configurado y habilitado por defecto tras la instalación y
los servidores DNS a reenviar las peticiones que no se pueden resolver de forma local mediante la
caché, los servidores forwarders, aparecen en una sección del mismo nombre y que por defecto está
comentada, esto es, deshabilitada.
//forwarders {
0.0.0.0;
};
El borrado de la caché DNS la puedes realizar en el cliente DNS y en el propio servidor DNS. Así, para
un sistema operativo GNU/Linux podrías realizar los siguientes comandos según el caso:
1. Borrado de la caché del cliente DNS:
# /etc/init.d/nscd restart
- 25 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
En GNU/Linux Debian 6.0 (Squeeze) puedes configurar un servidor DNS BIND como maestro
modificando el archivo /etc/bind/named.conf.local realizando el siguiente procedimiento:
1. Configuras el fichero /etc/bind/named.conf.local para indicar: qué zonas son servidas por el
servidor, qué zonas son servidas como master y el fichero donde se guarda el contenido de la
zona. Por ejemplo:
//zonas creadas tipo master
zone "ejemplo.com" {
type master;
file "/var/lib/bind/master/db.ejemplo.com.hosts";
};
En este ejemplo, el servidor sirve el dominio " ejemplo.com " como master, y la zona se guarda en
el fichero /var/lib/bind/master/db.ejemplo.com.hosts .
Habrá una entrada de este tipo por cada zona servida.
Normalmente los ficheros de zona están situados en la ruta /var/lib/bind . Entonces, para
una mayor comprensión y entendimiento, y para facilidad de uso en posteriores
momentos, estaría bien que crearas los directorios master y slave dentro de esa ruta. Así,
los ficheros con zonas maestras se pueden encontrar en /var/lib/bind/master/db.*.hosts
y los ficheros con zonas esclavas se pueden encontrar en /var/lib/bind/slave/db.*.hosts .
2. Configuras el fichero /var/lib/bind/master/db.ejemplo.com.hosts para agregar los registros RR a
la zona, por ejemplo:
;
; BIND Database file for ejemplo.com zone
;
localhost A 127.0.0.1
ns A 192.168.200.250
mail A 192.168.200.251
www A 192.168.200.252
3. Recargas el servidor con el comando: service bind9 reload ó /etc/init.d/bind9 reload .
4. Realizas la siguiente consulta: dig ejemplo.com obteniendo una salida similar a la siguiente:
; <<>> DiG 9.7.3 <<>> ejemplo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25588
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;ejemplo.com. IN A
;; AUTHORITY SECTION:
ejemplo.com. 3600 IN SOA ejemplo.com. hostmaster.ejemplo.com. 2011091601 3600 600 1209600
3600
- 26 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Sep 27 11:48:36 2011
;; MSG SIZE rcvd: 76
¿Cuál sería mediante dig el comando que deberías ejecutar para obtener la IP del servidor
de correo correspondiente al dominio ejemplo.com , si el servidor de correo posee el nombre
mail ?
dig mail.ejemplo.com
En GNU/Linux Debian 6.0 (Squeeze) puedes configurar un servidor DNS BIND como esclavo
modificando el archivo /etc/bind/named.conf.local realizando el siguiente procedimiento:
1. Configuras el fichero /etc/bind/named.conf.local del servidor esclavo para indicar: qué zonas son
servidas por el servidor, qué zonas son servidas como slave, la IP del servidor master (de donde
se transferirá la zona cuando se reciba una notificación de cambio, o se supere el TTL de la zona)
y el fichero donde se guarda el contenido de la zona. Por ejemplo:
//zonas creadas tipo esclavo
zone "ejemplo.com" {
type slave;
masters {
192.168.200.250;
};
file "/var/lib/bind/slave/db.ejemplo.com.hosts";
};
En este ejemplo, el servidor sirve el dominio " ejemplo.com " como slave, y la zona se guarda en el
fichero /var/lib/bind/slave/db.ejemplo.com.hosts .
Habrá una entrada de este tipo por cada zona servida.
Normalmente los ficheros de zona están situados en la ruta /var/lib/bind . Entonces, para
una mayor comprensión y entendimiento, y para facilidad de uso en posteriores
momentos, estaría bien que crearas los directorios master y slave dentro de esa ruta. Así,
los ficheros con zonas maestras se pueden encontrar en /var/lib/bind/master/db.*.hosts
y los ficheros con zonas esclavas se pueden encontrar en /var/lib/bind/slave/db.*.hosts .
2. En el servidor maestro configuras la sección correspondiente al servidor master en el fichero
/etc/bind/named.conf.local :
1. Para indicar qué servidores tienen permitido la transferencia de los ficheros de zona,
mediante la directiva allow-transfer . Por ejemplo:
allow-transfer{192.168.200.100;192.168.210.100;10.10.42.41;10.10.42.42;};
En este listado deberán estar incluidos todos los servidores slave que tengan configurado a
éste como servidor master, y adicionalmente alguna IP que debiera tenerlo permitido por
alguna razón.
2. Mediante la directiva notify-yes se consigue enviar automáticamente una notificación de
cambio de zona del maestro, cuando ésta se produce, a los servidores DNS especificados en
la zona mediante el registro de recurso NS.
Adicionalmente, se puede enviar una notificación de cambio de zona a servidores esclavos
que no aparecen en la misma, mediante la directiva also-notify :
also-notify {192.168.200.100;10.10.42.41;};
Por ejemplo, una zona tipo master con las directivas anteriores podría ser la siguiente:
//zonas creadas tipo master
zone "ejemplo.com" {
type master;
file "/var/lib/bind/master/db.ejemplo.com.hosts";
allow-transfer{192.168.200.100;192.168.210.100;10.10.42.41;10.10.42.42;};
- 27 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
notify-yes;
also-notify {192.168.200.100;10.10.42.41;};
};
Mediante la directiva also-notify se mantienen los servidores DNS sincronizados. Así, el servidor
DNS esclavo podrá satisfacer las peticiones DNS al igual que lo haría el maestro. Esto implica que se
garantiza la disponibilidad del servicio DNS puesto que aunque el servidor maestro deje de funcionar,
el servidor esclavo podrá seguir ofreciendo el servicio. Además, en caso de recibir múltiples
conexiones concurrentes, siendo, por tanto, el número de peticiones muy elevado, la carga se
distribuye entre los servidores.
- 28 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Seguramente habrás utilizado más de una vez algún tipo de directorio o servicio de directorio, como
por ejemplo: una guía telefónica impresa en papel o una revista con la programación televisiva.
Los directorios, por lo tanto, permiten localizar información y para ello definen qué información se
almacenará y en qué modo.
Los directorios anteriormente comentados presentan una serie de problemas, en contra de los
directorios electrónicos, a saber:
1. Son estáticos:
1. Cuando buscas un teléfono en la guía telefónica, la información más actualizada es la de la
fecha de edición impresa de la guía. Esto quiere decir que si una persona modifica sus datos o
da de alta una nueva línea no aparecerán los cambios hasta la próxima edición impresa.
2. En el caso de la programación televisiva, el tiempo de renovación de la información se
reduce, posiblemente sea semanalmente. Pero, ¿y si existe algún cambio de última hora en
el medio de la semana? La información también quedaría obsoleta.
Por contra, los directorios electrónicos pueden ser consultados/actualizados en tiempo real,
por lo que su fiabilidad es mucho mayor.
2. Son inflexibles: en el contenido y en su organización:
1. ¿Qué pasaría si en la guía telefónica quisieras introducir una nueva información sobre el
propietario de un teléfono? Está claro que la visualización del nuevo contenido no es
instantáneo, habría que modificarlo y el usuario debería esperar a la nueva edición.
2. ¿Qué pasaría si en la programación televisiva se quisiera incorporar un nuevo logotipo de una
cadena de televisión? Pues, lo mismo que comentado anteriormente.
Por contra, los directorios electrónicos pueden modificar cualquier contenido y éste se verá
reflejado al instante.
3. ¿Qué pasaría si quisieras buscar en la guía telefónica un teléfono por la calle donde vive el
usuario?
4. ¿Qué pasaría si en la programación televisiva quisieras buscar todas las películas sobre acción
que se emiten a una determinada hora, pero solamente los días a la semana que te interese?
Puede ser que encuentres esa información pero, desde luego, no es muy flexible la búsqueda
de la misma. Por contra, los directorios electrónicos permiten que la búsqueda de
información sea localizada de distintas maneras, gracias a cómo está organizada.
3. Son inseguros: dificultad para controlar el acceso a la información.
1. ¿Cómo impides que un usuario no pueda buscar un teléfono en la guía telefónica?
2. ¿Cómo impides que un menor pueda leer cierto contenido sobre, por ejemplo, un programa
no educativo?
- 29 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
"Siempre deseé que mi computadora fuera tan fácil de usar como mi teléfono. Mi deseo se ha hecho
realidad: ya no sé usar mi teléfono."
Bjarne Stroustrup
- 30 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Por todo ello las aplicaciones prácticas que poseen los servicios de directorio son muy diversas y
ventajosas, como por ejemplo: autenticación de usuarios: en aplicaciones web, correo electrónico,
RADIUS (protocolo de autenticación y autorización para aplicaciones de acceso a la red o movilidad IP)..., sistemas de control
de entradas a edificios, bases de datos comunes en organizaciones, en sistemas operativos: gestión
de cuentas de acceso, servidores de certificados, libretas de direcciones compartidas...
Pero, no por ello, poseen el impedimento de trabajar juntos, es más, usualmente los encontrarás
unidos de la mano en aplicaciones web con distintas funcionalidades, como: servidores de correo,
gestión de proyectos e incidencias, servidores RADIUS, etc. Así, suele ser necesario acceder a las URL
de las aplicaciones web mediante nombres de dominio DNS y una vez en ellas autenticarse por
medio de LDAP.
Antes de intentar configurar una aplicación web con autenticación LDAP deberías probar la
instalación, configuración y autenticación por medio de una base de datos SQL.
En el siguiente anexo encontrarás información detallada sobre el procedimiento de
instalación, configuración y autenticación por medio de una base de datosSQL de la
aplicación web OpenCart.
ANEXO III - Ejemplo despliegue aplicación web OpenCart
En 1988, la CCITT (ahora ITU-T) creó el estándar X.500 (http://x500standard.com/ ) sobre servicios de
directorio, el cual organiza las entradas en el directorio de manera jerárquica, capaz de almacenar
gran cantidad de datos, con grandes capacidades de búsqueda y fácilmente escalable. X.500
especifica que la comunicación entre el cliente y el servidor de directorio debe emplear el protocolo
DAP, pero DAP es un protocolo a nivel de aplicación, por lo que, tanto al cliente como el servidor
debían implementar completamente la torre de protocolos OSI.
- 31 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
LDAP surge como una alternativa a DAP. Las claves del éxito de LDAP en comparación con DAP de
X.500 son:
El modelo funcional de LDAP es más simple y ha eliminado opciones raramente utilizadas en
X.500, siendo más fácil de comprender e implementar.
LDAP representa la información mediante cadenas de caracteres en lugar de complicadas
estructuras ASN.1.
El directorio LDAP tiene una estructura en forma de árbol denominado DIT . Cada entrada del
directorio describe un objeto: persona, impresora, etc. La ruta completa a una entrada la identifica
de modo inequívoco y se conoce como DN y está compuesto por una secuencia de partes más
pequeñas llamadas RDN , de forma similar a como el nombre de un fichero consiste en un camino de
directorios en muchos sistemas operativos.
Una clase de objeto (objectClass) es una descripción general de un tipo de objeto. Todos los objetos
de LDAP deben tener el atributo objectClass . La definición de objectClass especifica qué atributos
requiere un objeto LDAP, así como las clases de objetos que pueden existir. Los valores de este
atributo los pueden modificar los clientes, pero el atributo objectClass en sí no puede eliminarse.
Un esquema (schema) define: qué clases de objetos se pueden almacenar en el directorio, qué
atributos deben contener, qué atributos son opcionales y el formato de los atributos.
En la cúspide de la jerarquía del directorio se encuentra el elemento raíz Root . A este elemento le
puede seguir en un nivel inferior c
(country), dc (domainComponent) ó o
(organization).
dn: uid=upruebas,ou=People,dc=ejemplo,dc=com
La definición global de qué tipo de objetos han de guardarse en el DIT se realiza mediante un
esquema. El tipo de objeto se determina mediante la clase de objeto. La clase de objeto especifica
qué atributos deben o pueden ser asignados a un objeto determinado. Por lo tanto, un esquema
- 32 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
debe contener definiciones de todas las clases de objetos y atributos que van a utilizarse en el
escenario de aplicación. Existen algunos esquemas de uso extendido (véase RFC 2252 y 2256). No
obstante, si el entorno en el que va a utilizarse el servidor LDAP lo requiere, también pueden crearse
nuevos esquemas en función del usuario o pueden combinarse varios esquemas entre sí.
Otra utilidad que puede resultar interesante es la de emplear el servicio de directorio para indexar la
documentación almacenada en el servidor Web, con la precisión que otras herramientas no pueden
generar.
Debido a XML, los documentos contarán con metainformación, es decir, información sobre la
información que contienen, lo cual hará más fácil y eficaz la labor de indexación de los contenidos del
servidor Web. Aquí es donde el servicio de directorio puede jugar un papel importante, ya que
proporciona un acceso uniforme a la información contenida en él.
Esta última puede ser una de las mayores utilidades de los directorios, ya que permiten separar la
operación de localización de la información del servidor que la contiene.
- 33 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Entonces, una entrada del directorio en formato de intercambio de datos LDIF consiste en dos
partes:
El DN que debe figurar en la primera línea de la entrada y que se compone de la cadena dn:
seguida del nombre distinguido ( DN ) de la entrada.
La segunda parte son los atributos de la entrada. Cada atributo se compone de un nombre de
atributo, seguido del carácter dos puntos ' : ' y el valor del atributo. Si hay atributos multivaluados
deben ponerse seguidos.
No existe ningún orden preestablecido para la colocación de los atributos, pero es conveniente listar
primero el atributo objectclass , para mejorar la legibilidad de la entrada.
En un archivo LDIF puede haber más de una entrada definida, cada entrada se separa de las demás
por una línea en blanco. A su vez, cada entrada puede tener una cantidad arbitraria de pares
<nombre_atributo>: <valor> .
Este formato es útil tanto para realizar copias de seguridad de los datos de un servidor LDAP, como
para importar pequeños cambios que se necesiten realizar manualmente en los datos, siempre
manteniendo la independencia de la implementación LDAP y de la plataforma donde esté instalada.
A continuación puedes observar un ejemplo de una entrada para describir una cuenta de usuario en
un servidor:
dn: uid=upruebas,ou=People,dc=ejemplo,dc=com
objectclass: account
objectclass: posixAccount
objectclass: topuid: upruebas
cn: Usuario Pruebas
loginshell: /bin/bash
uidnumber: 512
gidnumber: 300
homedirectory: /home/upruebas
gecos: Usuario Pruebas
userpassword: 123456
- 34 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Es recomendable que visites el siguiente anexo que contiene como instalar y configurar un
servidor OpenLDAP en un GNU/Linux basado enDebian.
ANEXO IV - INSTALACIÓN Y CONFIGURACIÓN DEL SERVIDOR OPENLDAP
Una de las principales novedades de la versión 2.4 de OpenLDAP es que se incluye toda la
configuración del servidor slapd en un directorio de base cn=config , ( /etc/ldap/slapd.d/cn=config ),
en lugar del habitual fichero /etc/ldap/slapd.conf . Esto tiene la ventaja de que las modificaciones de
configuración se pueden hacer sin tener que reiniciar el servicio.
En el siguiente enlace puedes encontrar información sobre las especificaciones del esquema
(schema) en OpenLDAP.
http://www.openldap.org/doc/admin24/schema.html
Puedes encontrar más esquemas dentro de /etc/ldap/schema . Para añadir un esquema nuevo al
directorio hay que subir un fichero ldif con el nuevo esquema al dn: cn=schema,cn=config .
La tabla siguiente ofrece un resumen de las clases de objetos utilizadas en el ejemplo de core.schema
e inetorgperson.schema junto con los atributos obligatorios y los valores adecuados de atributo.
Entrada de Atributo
Clase de objeto Significado
ejemplo obligatorio
domainComponent (partes del nombre
dcObject ejemplo. dc
del dominio).
organizationalUnit organizationalUnit (unidad organizativa). People. ou
inetOrgPerson (datos sobre personal Usuario Pruebas
inetOrgPerson cn ; sn
para Internet/intranet). Pruebas.
El árbol completo LDAP se genera a partir de archivos esquema, en /etc/ldap/schema , que definen el
árbol de clases y atributos permitidos para la organización.
La configuración de OpenLDAP puede resultar ardua, así que ármate de paciencia y procede como se
te indica a continuación.
1. Configura el servidor OpenLDAP mediante el comando dpkg-reconfigure slapd . Los valores
utilizados los puedes ver a continuación del comando:
root@debian-servidor-fp:~# dpkg-reconfigure slapd
¿Desea omitir la configuración del servidor OpenLDAP? No
Introduzca su nombre de dominio DNS: proyecto-empresa.local
Nombre de la organización: proyecto-empresa.local
Contraseña del administrador: admin
Verificación de la contraseña: admin
Motor de base de datos a utilizar: HDB
¿Desea que se borre la base de datos cuando se purgue el paquete slapd? No
¿Desea mover la base de datos antigua? Sí
¿Desea permitir el protocolo LDAPv2? Sí
http://www.youtube.com/watch?feature=player_embedded&v=HvSgWdVb_1k
2. Continuación de la configuración del servidor OpenLDAP. Edita el archivo
/etc/ldap/slapd.d/cn=config/olcDatabase\=\{1\}hdb.ldif y cambia todas las cadenas
' dc=nodomain ' por ' dc=proyecto-empresa,dc=local ', similar a como se expone a continuación:
- 35 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
En un sistema operativo Debian 6.0 (Squeeze) puedes comprobar el estado del servicio OpenLDAP
mediante el comando service o mediante el comando /etc/init.d/slapd :
Comando service :
1. Comprobar las opciones del comando:
root@debian-servidor-fp:~# service slapd
Usage: /etc/init.d/slapd {start|stop|reload|restart|force-reload|status}.
Donde:
start → opción que permite arrancar el servicio.
stop → opción que permite apagar el servicio.
reload → opción que permite recargar la configuración del servicio sin tener que reiniciarlo.
restart → opción que permite reiniciar el servicio.
force-reload → opción que permite forzar la recarga de configuración del servicio.
status → opción que permite comprobar si el servicio está activo o inactivo.
2. Arrancar el servidor OpenLDAP:
root@debian-servidor-fp:~# service slapd start
Starting OpenLDAP: slapd.
3. Parar el servidor OpenLDAP:
root@debian-servidor-fp:~# service bind9 stop
Stopping OpenLDAP: slapd.
4. Comprobar el estado activo/inactivo del servicio:
root@debian-servidor-fp:~# service slapd status
could not access PID file for slapd ... failed!
Como puedes comprobar la salida del comando determina que el servicio está inactivo, entonces
lo arrancamos:
root@debian-servidor-fp:~# service slapd start
Starting OpenLDAP: slapd.
Se vuelve a lanzar el comando para comprobar de nuevo el estado:
root@debian-servidor-fp:~# service slapd status
slapd is running.
- 36 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Ahora puedes comprobar que la salida del comando determina que el servicio está activo.
Comando /etc/init.d/slapd :
1. Comprobar las opciones del comando:
root@debian-servidor-fp:~# /etc/init.d/slapd
Usage: /etc/init.d/slapd {start|stop|reload|restart|force-reload|status}.
2. Arrancar el servidor OpenLDAP:
root@debian-servidor-fp:~# /etc/init.d/slapd start
Starting OpenLDAP: slapd.
3. Parar el servidor OpenLDAP:
root@debian-servidor-fp:~# /etc/init.d/slapd stop
Stopping OpenLDAP: slapd.
4. Comprobar el estado activo/inactivo del servicio:
root@debian-servidor-fp:~# /etc/init.d/slapd status
could not access PID file for slapd ... failed!
Como puedes comprobar la salida del comando determina que el servicio está inactivo,
entonces lo arrancamos:
root@debian-servidor-fp:~# /etc/init.d/slapd start
Starting OpenLDAP: slapd.
Se vuelve a lanzar el comando para comprobar de nuevo el estado:
root@debian-servidor-fp:~# /etc/init.d/slapd status
slapd is running.
Ahora puedes comprobar que la salida del comando determina que el servicio está activo.
El comando slaptest permite verificar la configuración del servidor OpenLDAP.
# Usuarios
dn: ou=usuarios,dc=proyecto-empresa,dc=local
objectClass: organizationalUnit
ou: usuarios
# Grupos
dn: ou=grupos,dc=proyecto-empresa,dc=local
objectClass: organizationalUnit
ou: grupos
- 37 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
dn: uid=upruebas,ou=usuarios,dc=proyecto-empresa,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
cn: Pruebas daw05
sn: daw05
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/upruebas
gecos: Pruebas DAW05
userPassword: 123456
mail: upruebas.daw05@proyecto-empresa.local
Los comandos anteriores poseen la opción -h con la cual se puede indicar el host (nombre de
dominio o IP) que identifica al servidor LDAP. Por ejemplo: ldapsearch -h 192.168.200.250 -x -b
dc=proyecto-empresa,dc=local "(objectclass=*)" conectaría con el servidor LDAP en la IP
192.168.200.250 para buscar el DIT del dominio proyecto-empresa.local .
Existe un paquete de nombre ldapscripts que contiene una serie de scripts para administrar de forma
sencilla los usuarios y grupos almacenados en el servidor LDAP. Puedes encontrar plantillas de
ejemplo, formato LDIF, situadas en /usr/share/doc/ldapscripts/examples/ cuando se instala el
paquete ldapscripts .
Una forma más sencilla de interactuar con el servidor OpenLDAP sería la posibilidad de
gestionar el servidor mediante alguna interface gráfica, éstas existen tanto de pago como
libres. A continuación se recoge varios enlaces que ofrecen información sobre estas
interfaces gráficas (exploradores de directorios LDAP):
ANEXO V - Exploradores de directorios LDAP.
ANEXO VI - Administración de usuarios y grupos con LDAP
- 38 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
A continuación verás las modificaciones que hay que realizar en un sistema GNU/Linux Debian 6.0
(squeeze) para que autentifique a los usuarios en un servidor LDAP, esto es, verás los pasos a seguir
para configurar un equipo como cliente LDAP. Así, el equipo en lugar de utilizar los clásicos archivos
/etc/passwd , /etc/group y /etc/shadow , tomará los usuarios y grupos del servidor LDAP,
autentificando los usuarios que inicien sesión validándose contra el servidor LDAP.
Esta configuración debe ser replicada en todos los clientes LDAP pertenecientes al dominio, incluido
el propio servidor LDAP, si se quiere que los clientes accedan al mismo.
- 39 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
El comando pamtest puede ayudarte a realizar estas pruebas. La instalación del mismo se efectúa
realizando el siguiente comando:
root@debian-servidor-fp:~# apt-get install libpam-dotfile
El comando pamtest acepta dos parámetros: el primero es el nombre del servicio al cual se va a
conectar para realizar la autentificación y el segundo es el nombre del usuario que se va a
autentificar sobre dicho servicio. Veamos unos ejemplos:
1. Intentar autentificar al usuario upruebas2 en el servicio passwd mediante una clave correcta:
root@debian-servidor-fp:~# pamtest passwd upruebas2
Trying to authenticate <upruebas2> for service <passwd>.
Password:
Authentication successful.
2. Intentar autentificar al usuario upruebas2 en el servicio passwd mediante una clave incorrecta:
root@debian-servidor-fp:~# pamtest passwd upruebas2
Trying to authenticate <upruebas2> for service <passwd>.
Password:
Failed to authenticate: Authentication failure
3. Intentar autentificar al usuario upruebas2 en el servicio ssh mediante una clave correcta:
root@debian-servidor-fp:~# pamtest ssh upruebas2
Trying to authenticate <upruebas2> for service <ssh>.
Password:
Authentication successful.
4. Intentar autentificar al usuario upruebas2 en el servicio ssh mediante una clave incorrecta:
root@debian-servidor-fp:~# pamtest ssh upruebas2
Trying to authenticate <upruebas2> for service <ssh>.
Password:
Failed to authenticate: Authentication failure
5. Intentar autentificar al usuario upruebas2 en el servicio ftp mediante una clave correcta:
root@debian-servidor-fp:~# pamtest ftp upruebas2
Trying to authenticate <upruebas2> for service <ftp>.
Password:
Authentication successful.
6. Intentar autentificar al usuario upruebas2 en el servicio ftp mediante una clave incorrecta:
root@debian-servidor-fp:~# pamtest ftp upruebas2
Trying to authenticate <upruebas2> for service <ftp>.
Password:
Failed to authenticate: Authentication failure
Una vez se ha llegado a este punto, el sistema ya está preparado para autentificar a los usuarios
a través de LDAP.
- 40 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
- 41 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
- 42 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
- 43 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
- 44 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
' db_user_opencart@localhost ' es el nombre de usuario de MySQL que posee los privilegios en
la base de datos ' db_opencart '.
' opencart ' es la contraseña requerida para iniciar sesión como el usuario ' db_user_opencart '
en MySQL
Tercero, para activar los nuevos cambios ejecuta:
/usr/bin/mysql -h127.0.0.1 -uroot -p -e "flush privileges;"
Alternativamente puedes usar, si lo posees, tu panel de control Web o bien phpMyAdmin
para crear la base de datos ' db_opencart ' y el usuario ' db_user_opencart '
5. Visita la página principal de tu Opencart, por ejemplo:
http://www.tienda-virtual.empresa-proyecto.com/
6. Sigue las instrucciones que aparecen en pantalla.
- 45 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Instalación de OpenLDAP
El servidor OpenLDAP está disponible en el paquete slapd por tanto, lo instalaremos utilizando apt-
get . También nos conviene instalar el paquete ldap-utils que contiene utilidades adicionales:
// Instalación del servidor LDAP
sudo apt-get install slapd ldap-utils
- 46 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
El servidor LDAP, al igual que todos los servicios en Debian, dispone de un script de arranque y
parada en la carpeta /etc/init.d .
// Arrancar o reiniciar el servidor LDAP
sudo /etc/init.d/slapd restart
Administración de OpenLDAP
Introducción
Una vez instalado y configurado el servidor LDAP, la siguiente tarea es la del diseño de la estructura y
la introducción de datos en el directorio.
Puesto que la finalidad de nuestro servidor LDAP es que sirva de almacén de usuarios y grupos para
autentificar sistemas linux y servicios como ftp y web, deberemos crear una estructura que parta de
la base de nuestro directorio, para almacenar dicha información. Tal y como se explica más abajo,
crearemos una unidad organizativa ( ou ) llamada groups , para almacenar los grupos de usuarios y
crearemos otra unidad organizativa llamada users para almacenar a los usuarios.
- 47 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Almacenaremos el archivo en la carpeta temporal porque una vez procesado se debería borrar, ya
que contiene la contraseña de administrador en texto plano.
# ---------- Archivo /tmp/ldapcurso-esquema-basico.ldif ----------
# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb
# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=ieslapaloma,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=ieslapaloma,dc=com
olcRootPW: ldapadmin
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=ieslapaloma,dc=com" write by anonymous
auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=ieslapaloma,dc=com" write by * read
# ----------------------------------
Ahora habrá que cargar el servidor ldap con el archivo de configuración creado:
// Cargar en ldap el archivo ldapcurso-esquema-basico.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/ldapcurso-esquema-basico.ldif
dn: cn=admin,dc=ieslapaloma,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fXdSVDNLMEpKSlQydmM=
dn: ou=users,dc=ieslapaloma,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
dn: ou=groups,dc=ieslapaloma,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
- 48 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Francisco Javier
gidNumber: 1001
homeDirectory: /home/javier
loginShell: /bin/bash
sn: Corcuera Ruiz
uid: javier
uidNumber: 1001
dn: cn=Joaquin,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Joaquin
gidNumber: 1001
homeDirectory: /home/joaquin
loginShell: /bin/bash
sn:: R8OzbWV6
uid: joaquin
uidNumber: 1002
dn: cn=Jessica,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Jessica
gidNumber: 1002
homeDirectory: /home/jessica
loginShell: /bin/bash
sn: Perez
uid: jessica
uidNumber: 1004
dn: cn=profesores,ou=groups,dc=ieslapaloma,dc=com
objectClass: posixGroup
objectClass: top
cn: profesores
gidNumber: 1001
memberUid: javier
memberUid: joaquin
memberUid: miguel
- 49 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
dn: cn=alumnos,ou=groups,dc=ieslapaloma,dc=com
objectClass: posixGroup
objectClass: top
cn: alumnos
gidNumber: 1002
memberUid: jessica
memberUid: joel
# ----------------------------------
Ahora habrá que cargar el servidor ldap con el archivo de usuarios creado:
// Cargar en ldap el archivo ldapcurso-usuarios.ldif (cuando pida la contraseña: ldapadmin)
sudo ldapadd -c -x -D cn=admin,dc=ieslapaloma,dc=com -W -f /tmp/ldapcurso-usuarios.ldif
A partir de este momento ya tendremos un servidor LDAP apto para almacenar usuarios y grupos de
cuentas unix.
- 50 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Para instalar gq , podemos utilizar apt-get install gq . Una vez instalada, para ejecutar gq tan solo
debemos pulsar alt+f2 y escribir gq .
Instalar phpldapadmin
Para instalar phpldapadmin, al igual
que otras aplicaciones web,
deberemos descargarla desde
http://phpldapadmin.sourceforge.n
et/ y descomprimirla dentro del
DocumentRoot de apache, es decir,
dentro de la carpeta /var/www , por
ejemplo en /var/www/phpldapadmin .
Para ejecutarla, si la hemos
descomprimido en la carpeta
anterior, debemos ir a
http://ip_del_servidor_web/phplda
padmin/ con el navegador y veremos
la página principal de la aplicación:
Una vez instalado el java y establecidas las variables CLASSPATH , JAVA_HOME y PATH en el archivo
/root/.bashrc , debes cerrar el terminal y volver a abrirlo, para que cargue nuevamente las variables
de entorno. Si ejecutas el comando set en el terminal, podrás comprobar que ha cargado las
variables de entorno y podrás instalar JXplorer. JXplorer no está disponible en los repositorios de
paquetes de debian, pero se puede descargar desde:
http://enebro.pntic.mec.es/arug0000/servicio/jxplorer3.2_linux.bin
Debemos copiar el archivo en la carpeta /tmp de nuestro sistema y ejecutar:
// Instalar JXplorer (como usuario, no como root)
sh /tmp/jxplorer3.2_linux.bin
- 51 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
La conexión con el servidor LDAP podemos hacerla como usuario anónimo o como usuario
administrador. Si conectamos de forma anónima solo podremos visualizar los elementos pero no
podremos hacer cambios. Si conectamos como administrador, podremos crear, modificar y eliminar
elementos de cualquier tipo.
La base del directorio se suele denominar en inglés 'base DN' o 'Nombre Distinguido de la base del
directorio'. Se corresponde con el parámetro ' suffix ' del archivo de configuración del servidor LDAP
/etc/ldap/slapd.conf .
El nombre del usuario con el que nos conectamos se suele denominar en inglés ' user DN ' o también
' bind DN '.
El nombre de usuario administrador por defecto suele ser admin y a menudo hay que proporcionar
nombre y base del directorio: cn=admin, dc=ieslapaloma, dc=com
- 52 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
- 53 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Ya tendríamos creada la estructura, los grupos y los usuarios que necesitamos para nuestro sistema.
- 54 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
A continuación se muestra el uso de scripts del paquete para crear/cambiar contraseña y borrar un
usuario, así como crear/borrar un grupo y añadir/eliminar usuarios a un grupo:
sudo ldapaddgroup alumnos
Successfully added group alumnos to LDAP
sudo ldapadduser pepe alumnos
Successfully added user pepe to LDAP
Successfully created home directory for user pepe
sudo ldapsetpasswd pepe
Changing password for user uid=pepe,ou=usuarios,dc=iescalquera,dc=local
New Password:
Retype New Password:
Successfully set password for user uid=pepe,ou=usuarios,dc=iescalquera,dc=local
sudo ldapaddusertogroup pepe profes
Successfully added user pepe to group profes
NOTAS:
En /home del servidor creamos una carpeta personal para pepe , pero no para nuestros clientes, ya
que eso se verá en la parte III del curso.
Para comprobar el resultado, ahora podemos iniciar sesión, en modo consola, no en modo
gráfico, que se verá en la parte III del curso, como usuario pepe desde un equipo configurado
para manejar los usuarios de LDAP y utilizar el comando id para ver los grupos a los que
pertenece:
$ id
uid=10001(pepe) gid=10001(alumnos) grupos=10000(profes),10001(alumnos)
NOTA: Observar como se elimina el usuario pepe , pero no así su carpeta personal del servidor
en /home . El cliente no tenía ninguna carpeta.
- 55 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Una opción que puede ser muy útil con estos scripts es la de definir un modelo para los valores por
defecto que tendrán los nuevos usuarios, grupos y máquinas. Estos modelos deben ser almacenados
en ficheros con formato LDIF (en /usr/share/doc/ldapscripts/examples hay ejemplos de estos
ficheros con la extensión .template.sample ). En el fichero de configuración
/etc/ldapscripts/ldapscripts.conf podemos indicar los ficheiros de modelos en los que queramos
utilizar nuestros parámetros UTEMPLATE (usuarios), GTEMPLATE (grupos) e MTEMPLATE (máquinas).
Es muy común que las distribuciones de Linux comiencen a asignar identificadores de usuario a los
nuevos usuarios locales con el número 500 ó 1000 (este es el caso de Ubuntu). Por lo tanto, es
conveniente que los usuarios de LDAP no coincidan con el ID de usuario con estos usuarios, porque
entonces al iniciar sesión en el equipo cliente se le asignarán los derechos y privilegios del usuario
local al usuario del dominio (tenga en cuenta que la gestión de permisos que se hace en Linux es
basado en el UID del usuario), y lo mismo podría decirse de los grupos. Así que lo que hacemos es
establecer en el módulo Webmin para los nuevos usuarios y los grupos que se crean en LDAP es
- 56 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
asignar identificadores a partir del número 10000, y no hay identificadores coincidentes entre los
usuarios locales del equipo y el dominio (si nos fijamos en el archivo de configuración ldapscripts ,
este es el identificador mínimo de los usuarios y grupos que se configuran de forma
predeterminada).
Por otro lado, el módulo toma la rama de base de LDAP de usuarios y la rama base para grupos de
fichero de configuración del cliente LDAP, que será en nuestro caso dc = iescalquera, dc = local ,
cuando queramos almacenar usuarios y grupos en subramas que no sea LDAP ( o = usuarios, dc =
iescalquera, dc = local y ou = grupos, dc = iescalquera, dc = local ). Hay decir que esto no es
necesario y podría funcionar perfectamente almacenando los usuarios y grupos directamente en la
rama raíz de LDAP, pero para tener un poco más ordenado el directorio estructurarémoslo de esta
manera.
Así que haga clic en el enlace Configuración de módulos que se encuentran en la parte superior de la
página y accederemos a una página en la que se puede establecer una serie de parámetros acerca
del comportamiento del módulo. En particular, vamos a modificar el texto siguiente:
En la sección Opciones del servidor LDAP, en base de usuarios y en Base para grupos:
Dentro del apartado de Opciones para usuario nuevo en UID menor para nuevos usuarios y
en GID menor para nuevos grupos:
- 57 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
El módulo de usuarios y grupos LDAP de webmin ofrece la opción de Crear, modificar y borrar
usuarios desde un archivo por lotes. Con ella podemos subir al servidor un fichero de texto de datos
de una serie de usuarios (una linea por cada usuario) y automatizar la creación de modificación
masiva en LDAP. Esto es enormemente útil cuando el número de usuarios que hay que manejar es
grande, y puede ahorrar mucho tiempo de administración.
Por ejemplo, un fichero para la creación de dos usuarios podría tener el siguiente contenido (ojo, las
líneas deben comenzar por create , modify o delete , y no por crear , modificar y borrar como aparece
en las instruciones traducidas al castellano):
create:alberto:abc123.::10000:prof - Alberto Miguez:/home/alberto:/bin/bash:::::
create:xan:abc123.::10000:prof - Xan Pereira:/home/xan:/bin/bash:::::
Las instruciones de la página explican qué campos son necesarios y cuales se pueden dejar en blanco,
como se hace con algunos campos en este ejemplo. Por su puesto, en cada caso concreto y
dependiendo del formato del fichero que se nos proporcione para la creación de usuarios, habrá que
buscar el método más o menos automatizado de crear un fichero con este formato, o bien
escribiendo algún script o simplemente con algún programa de hoja de cálculo guardando el ficheiro
resultante en formato CSV (fichero de texto separado por comas) estableciendo como separador de
campo el carácter : en lugar da , .
Podemos ver a continuación un ejemplo donde se carga el fichero usuarios.txt con este contenido, y
el resultado de su ejecución:
- 58 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Webmin también incluye un módulo LDAP Server (dentro de la categoría de Servidores), aunque no
se utiliza para configurar el servidor LDAP en nuestro caso, puede ser útil para poder navegar por los
datos almacenados en él. Antes de usarlo, tenemos que entrar en la configuración del módulo para
introducir el usuario y la contraseña que usará para conectarse al servidor LDAP, que podrá ser un
usuario normal si sólo queremos visualizar los datos almacenados o el administrador si queremos
también poder realizar modificacións de los datos de calquier usuario del grupo:
Una vez guardados estos datos, clicamos en la opción Browse Database, introducimos una rama de
LDAP que queremos explorar y picamos en el botón de Show. A continuación podemos ver algunas
páginas de exploración de LDAP:
- 59 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Con esto ya nos podemos conectar con un navegador desde un cliente introduciendo la dirección
http://direcciónIPServidor/lam (si es un servidor real, sería muy recomendable configurar el
servidor apache para recibir conexións seguras y usar https en lugar de http):
Picamos en el enlace de LAM configuration en el logo en Edit server profiles para configurar los
parámetros de conexión a nuestro servidor LDAP. Introduciremos la contraseña por defecto (lam) e
entramos en la página de configuración en la que modificaremos los parámetros:
En la pestaña General Settings :
Tree suffix : Para introducir el sufijo de nuestro directorio ( dc=iescalquera,dc=local ).
Default language : Español.
List of valid users : Pondremos un DN de usuario administrador del LDAP
( cn=admin,dc=iescalquera,dc=local )
Podremos cambiar la contraseña para acceder a esta página de configuración
introduciendolas en las dos últimas cajas de texto nuevas.
- 60 -
Servicios de red implicados en el despliegue de una aplicación web Tema 5
Picamos en el botón Save para guardar los cambios. Todos estos parámetros introducidos se
almacenan en el fichero de configuración de lam ( /usr/share/ldap-account-
manager/config/lam.conf ).
Ahora ya podemos entrar una herramienta introduciendo la contraseña de administrador de LDAP
( admin ):
Inicio de sesión
IMPORTANTE: LAM se puede utilizar para crear usuarios y grupos, pero no va a crear carpetas
personales en el servidor asociado con cada usuario.
- 61 -
TEMA 6
Contenido
En primer lugar sería necesario responder a la siguiente cuestión, ¿qué conviene documentar en una
aplicación? En principio tres aspectos fundamentales de la aplicación:
1. La interfaz: Qué hace (no como lo hace) una función o un método (subrutina asociada exclusivamente a una
clase) de una clase (construcción que se emplea como modelo para crear objetos de un tipo determinado. La clase describe el
comportamiento y estado que todos los objetos comparten), qué parámetros hay que pasar y qué devuelve. Esta
información es tremendamente útil para las personas que utilizan funciones o clases diseñadas
por otros.
2. La implementación: Indicar cómo está implementada cada función, cómo se lleva a cabo cada
paso, por qué se utiliza determinada variable, qué algoritmo se utiliza, qué hacen los métodos
privados de una clase. Toda esta información resulta interesante a quienes tengan que depurar o
actualizar bloques de código de la aplicación.
3. La toma de decisiones: Por qué se ha implementado de determinada forma y no de otra la
aplicación, por ejemplo, para analizar el rendimiento de la aplicación y optimización de recursos.
-1-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Esto resulta interesante a nivel de implementación para los desarrolladores y a nivel funcional
para los responsables del desarrollo.
Normalmente la información sobre la implementación no necesita salir del código pero, por el
contrario, la información de la interfaz conviene pasarla a un documento independiente del código
fuente (manual de uso). La persona que necesite utilizar una determinada librería de clases o
funciones tendrá toda la información necesaria: qué hace cada elemento y cómo se utiliza. No
necesita acceder al código fuente.
El problema con este tipo de documentación es que cada vez que se modifica algo en el código
(actualizaciones, corrección de errores, etc...) hay que reflejarlo también en el manual de uso, lo que
implica doble trabajo. Lo ideal, por tanto, sería poder automatizar de alguna forma este proceso.
Existen algunas herramientas que permiten generar documentación de forma automática a partir del
código fuente. Javadoc es la herramienta estándar en Java. Para PHP una de las herramientas más
utilizadas es phpDocumentor.
Los entornos de programación modernos, por ejemplo, son capaces de obtener la información de los
comentarios, de forma que la muestran en el "autocompletado" de código, que se convierte en una
herramienta estupenda, y aun imprescindible en lenguajes como PHP, que no necesita que se declare
el tipo del argumento de una función, por poner un caso. Entornos como NetBeans o Eclipse,
aprovechan los comentarios de nuestro código fuente para mostrar información muy útil, sobre todo
para terceras personas.
Hay que tener en cuenta que todas estas herramientas que venimos viendo, NetBeans, Eclipse,
phpDocumentor, esperan el mismo tipo de comentarios, basado en el estándar establecido por
JavaDoc, de modo que haremos el trabajo una sola vez y podremos aprovecharnos del mismo en
varios entornos y con varias herramientas. Más aún, toda persona que se acerque a nuestro proyecto
podrá aprovechar la documentación, incluso más que nosotros.
"La programación es una carrera entre ingenieros de software luchando para construir programas
cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más
grandes y mejores idiotas. Por ahora, gana el universo. "
Rich Cook
-2-
Documentación y control de versiones DAW Tema 6
2.- PhpDocumentor.
Caso práctico
Una de las herramientas que la empresa BK programación ha decidido someter a estudio, con la
finalidad de ayudar a documentar el software desarrollado en PHP, y así decidir su implantación, es
phpDocumentor. Para ello Juan ha empezado a documentarse sobre dicha herramienta.
Existen algunas herramientas que permiten generar documentación de forma automática a partir del
código fuente, Javadoc es la herramienta estándar para Java, para PHP una de las herramientas más
utilizadas es phpDocumentor.
Para ayudarnos existe la aplicación phpDocumentor, que nos permite generar automáticamente una
buena documentación de nuestro código, de una forma parecida a cómo lo hace JavaDoc. Mediante
comentarios y unas etiquetas especiales podemos definir de forma sencilla qué hace cada clase, cada
método y cada función de nuestro código. Para saber más sobre esta aplicación se puede acceder a
su página web, desde donde se puede descargar la aplicación (es software libre) y acceder a la
documentación de ésta, de todas maneras intentaremos ampliar aquí los conocimientos sobre esta
herramienta.
http://www.phpdoc.org/
Formatos de salida
1. HTML a través de un buen número de plantillas predefinidas (podemos definir nuestra propia
plantilla de salida).
2. PDF.
3. XML (DocBook). Muy interesante puesto que a partir de este dialecto podemos transformar
(XSLT) a cualquier otro utilizando nuestras propias reglas y hojas de estilo (CSS viene del inglés Cascading
Style Sheets, del que toma sus siglas. CSS es un lenguaje usado para definir la presentación de un documento estructurado escrito en
HTML o XML).
Una alternativa a phpDocumentor es Doxygen que puede también documentar código PHP, la
principal diferencia es que Doxygen es un programa, mientras phpDocumentor es una colección de
código en PHP. Es decir, genera la documentación con el mismo PHP usado para ejecutar el propio
-3-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
código PHP, es por ello que se necesita tener también PHP instalado, sin embargo no se necesita
instalar un servidor web.
También se puede incluir documentación global a nivel de fichero y clase mediante la marca
@package .
Dentro de cada DockBlock se pueden incluir marcas que serán interpretadas por phpDocumentorcon
un significado especial, dichas marcas pueden ser las siguientes:
@access : Si @access es 'private' no se genera documentación para el elemento (a menos que se
indique explícitamente). Muy interesante si sólo se desea generar documentación sobre la
interfaz (métodos públicos) pero no sobre la implementación (métodos privados).
@author : Autor del código.
@copyright : Información sobre derechos.
@deprecated : Para indicar que el elemento no debería utilizarse, ya que en futuras versiones
podría no estar disponible.
@example : Permite especificar la ruta hasta un fichero con código PHP. phpDocumentor se
encarga de mostrar el código resaltado (syntax-highlighted).
@ignore : Evita que phpDocumentor documente un determinado elemento.
@internal : Para incluir información que no debería aparecer en la documentación pública, pero sí
puede estar disponible como documentación interna para desarrolladores.
@link : Para incluir un enlace (http://...) a un determinado recurso.
@see : Se utiliza para crear enlaces internos (enlaces a la documentación de un elemento).
@since : Permite indicar que el elemento está disponible desde una determinada versión del
paquete o distribución.
@version : Versión actual del elemento.
Existen otras marcas que solamente se pueden utilizar en bloques de determinados elementos:
-4-
Documentación y control de versiones DAW Tema 6
Como requisito previo probaremos si php y apache están funcionando correctamente; lo podemos
establecer con las siguientes pruebas:
1. Para probar si Apache sirve peticiones, abrimos un navegador e introducimos la siguiente URL
http://localhost y debería aparecer una página con el mensaje " It works! "
2. Probar que funciona PHP, lo podemos hacer del siguiente modo, ejecutamos desde línea de
comandos: echo "" | php y deberíamos ver como resultado " 10 "
3. Probar que Apache ejecuta código PHP, para ello en la carpeta donde Apache busca las páginas
web, es decir en donde se encuentra la página index.html (la encargada de mostrar el mensaje
" It works "), en nuestro caso la carpeta /var/www , creamos un archivo al que vamos a llamar
" phpinfo.php " con el siguiente contenido :
<?php
phpinfo();
?>
Una vez que probamos que las pruebas anteriores han confirmado el correcto funcionamiento
deApache y PHP, comenzamos la instalación de phpDocumentor . Lo primero será instalar el paquete
php-pear , que es un entorno de desarrollo y sistema de distribución para componentes de
códigoPHP. Para instalarlo podemos hacerlo mediante el gestor de paquetes apt :
#apt-get install php-pear
Por defecto Apache busca en el directorio /var/www para el contenido web, con lo cual antes de la
instalación de phpDocumentor deberíamos decirle a pear que es aquí donde queremos que
phpDocumentor debe trabajar, se puede configurar este u otro directorio, siempre y cuando sea
accesible por el servidor web:
#pear config-set data_dir /var/www
Una vez terminado el proceso de instalación necesitamos crear un directorio de salida para
phpDocumentor, y cambiar el propietario de dicho directorio a www-data , de forma que pueda
trabajar en esta carpeta sin ninguna limitación; por ejemplo podemos realizar lo siguiente:
#mkdir /var/www/docs
#chown www-data /var/www/docs/
-5-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Por ejemplo:
#phpdoc -o HTML:frames:phpedit -d /var/www/ -t /var/www/docs/
En este caso estamos indicando que se genere la documentación en formato HTML (también es
posible en formato PDF, CHM) de los proyectos de la carpeta /var/www y se almacene dicha
documentación en la carpeta /var/www/docs/ ; aunque existen un gran número de parámetros para
adaptar el formato de la documentación que phpdoc genere al formato que más nos interese, para
ello podemos obtener información ejecutando:
#phpdoc -h
Para acceder a la documentación generada deberíamos seleccionar el documento " index.html " de la
carpeta donde se almacenan los documentos generados y veríamos la página principal de la
documentación.
-6-
Documentación y control de versiones DAW Tema 6
PhpDocumentor puede crear su propia documentación. Los ficheros fuente de esta documentación
están en una subcarpeta " tutorials ". Sin embargo, se debe especificar el directorio raíz de
phpDocumentor como directorio de entrada a phpdoc para que se compilen estos tutoriales
(phpDocumentor no procesa documentación en " tutorials " que no esté vinculada a algún código
fuente, es decir, no es posible compilar sólo tutoriales). En este caso como proyecto se debe
especificar " phpDocumentor " .
Esta web sirve como manual de referencia, guía de usuario, tutoriales prácticos, etc. sobre
phpDocumentor.
http://www.phpdoc.org/
-7-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
3.- JavaDoc.
Caso práctico
De igual forma que en BK programación se ha decidido someter
a estudio la aplicación phpDocumentor para así poder decidir su
implantación, lo mismo ha ocurrido con JavaDoc. De esta manera
se está investigando el funcionamiento, configuración,
limitaciones, etc. de JavaDoc, que nos permitirá desarrollar
documentación de forma automatizada de los programas Java
que en la empresa se desarrollen.
Javadoc es una utilidad de Sun Microsystems empleado para generar APIs (Aplication Programing
Interface) en formato HTML de un archivo de código fuente Java. Javadoc es el estándar de la
industria para documentar clases de Java, la mayoría de los IDEs los generan automáticamente. Esto
facilita la tarea de los desarrolladores, ya que, con sólo seguir una serie de reglas a la hora de generar
los comentarios en su código, podrán obtener una buena documentación simplemente usando esta
herramienta.
Básicamente Javadoc es un programa, que recoge los comentarios que se colocan en el código con
marcas especiales y construye un archivoHTML con clases, métodos y la documentación que
corresponde. Este HTML tiene el formato de toda la documentación estándar de Javaprovista por
Sun.
La documentación a ser utilizada por Javadoc se escribe en comentarios que comienzan con /** y
que terminan con */ , comenzando cada línea del comentario por * a su vez, dentro de estos
comentarios se puede escribir código HTML y operadores para que interprete Javadoc(generalmente
precedidos por @ ) .
Javadoc localiza las etiquetas incrustadas en los comentarios de un código Java. Estas etiquetas
permiten generar una API completa a partir del código fuente con los comentarios. Las etiquetas
comienzan con el símbolo @ y son sensibles a mayúsculas-minúsculas. Una etiqueta se sitúa siempre
al principio de una línea, o sólo precedida por espacio(s) y asterisco(s) para que la herramienta
Javadoc la interprete como tal. Si no se hace así las interpretará como texto normal.
-8-
Documentación y control de versiones DAW Tema 6
La herramienta Javadoc extrae los comentarios del código fuente de los programas Java y
genera con ellos un juego de documentación en formato html.
La documentación a ser utilizada por Javadoc se escribe en comentarios que comienzan con
/** y que terminan con */
Las etiquetas se ubican dentro de los comentarios, comienzan con el símbolo @ y son
sensibles a mayúsculas-minúsculas.
Y una vez aceptada la licencia aparece un "wizard" donde vamos seleccionando la configuración de
nuestra instalación.
Tanto Eclipse como NetBeans disponen entre sus opciones la de generar javadoc y mediante diversas
ventanas que ofrecen se pueden seleccionar las opciones para javadoc. Pero no sólo eso, sino
también ofrecen el completado de código javadoc.
Por ejemplo, en el caso de Eclipse, si disponemos del siguiente código (típico ejemplo "hola mundo"):
public class holamundo {
/**
* @param args
*/
-9-
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Ahora si accedemos a la opción de menú "Project" observamos una opción en la que podemos
seleccionar "Generate Javadoc..." donde nos permite seleccionar el proyecto del que generar la
documentación y también la ruta de la carpeta donde generarla; una vez establecidos dichos
parámetros se genera la documentación, que podremos consultar accediendo desde un navegador a
los documentos html generados; existe un " index.html " desde el que podremos iniciar la navegación
e ir accediendo a la documentación generada.
La mayor parte de los entornos de desarrollo incluyen un botón para llamar a javadoc así como
opciones de configuración; no obstante, siempre se puede ir al directorio donde se instaló el JDK y
ejecutar javadoc directamente sobre el código fuente Java.
# javadoc ejemplo.java
Como se ve, y esto es usual en JavaDoc, la descripción de la clase o del método no va precedida de
ningún indicador. Se usan indicadores para el número de versión ( @version ), el autor ( @author ) y
otros. Es importante observar que los indicadores no son obligatorios; por ejemplo, en un método sin
parámetros no se incluye obviamente el indicador @param . También puede darse que un comentario
incluya un indicador más de una vez, por ejemplo varios indicadores @param porque el método tiene
varios parámetros. Resumiendo, los indicadores más usuales:
@author nombreDelAutor descripción .
Indica quién escribió el código al que se refiere el comentario. Si son varias personas se escriben
los nombres separados por comas o se repite el indicador, según se prefiera. Es normal incluir
este indicador en el comentario de la clase y no repetirlo para cada método, a no ser que algún
método haya sido escrito por otra persona.
@version númeroVersión descripción .
Si se quiere indicar la versión. Normalmente se usa para clases, pero en ocasiones también para
métodos.
@param nombreParámetro descripción .
Para describir un parámetro de un método.
@return descripción .
- 10 -
Documentación y control de versiones DAW Tema 6
Las plantillas:
Son sugerencias de código asociadas a palabras clave.
Se hallan definidas en Preferences > Java > Editor > Templates en Eclipse y en Herramientas -
Opciones - Editor - Plantillas de código en NetBeans.
Es aconsejable examinar todas, ya que pueden ahorrar
mucho trabajo.
Muchas de ellas utilizan nombres similares a las
construcciones Java que encapsulan ( try , for , while , if ,...).
Podemos definir y crear nuestras propias plantillas.
Además existen plantillas Javadoc predefinidas.
Estas plantillas se mostrarán como sugerencias en el código tras comenzar a escribir su nombre y
pulsar CTRL+ espacio. Lo más interesante es que nosotros podemos crearnos nuestras propias
plantillas, además de modificar las existentes. Para ello no tenemos más que añadir una nueva desde
la opción de "Templates", asignarle un nombre, descripción y elegir el código que queremos que se
muestre al seleccionar la misma.
Si nos encontramos trabajando en una empresa de desarrollo de software, como puede ser el caso
de BK programación; en ese entorno de trabajo, ¿qué importancia y utilidad crees que tendrían las
plantillas de código? ¿crees que la reutilización de código es útil, fiable y correcto? ¿cómo crees que
afectan los comentarios del código fuente a la reutilización de código?
- 11 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Cuando realizamos un proyecto software es bastante habitual que vayamos haciendo pruebas,
modificando nuestros fuentes continuamente, añadiendo funcionalidades, etc. Muchas veces, antes
de abordar un cambio importante que requiera tocar mucho código, nos puede interesar guardarnos
una versión de los fuentes que tenemos en ese momento, de forma que guardamos una versión que
sabemos que funciona y abordamos, por separado, los cambios.
Si no usamos ningún tipo de herramienta que nos ayude a hacer esto, lo más utilizado es
directamente hacer una copia de los fuentes en un directorio separado. Luego empezamos a tocar.
Pero esta no es la mejor forma. Hay herramientas, los sistemas de control de versiones, que nos
ayudan a guardar las distintas versiones de los fuentes.
Con un sistema de control de versiones hay un directorio, controlado por esta herramienta, donde se
van guardando los fuentes de nuestro proyecto con todas sus versiones. Usando esta herramienta,
nosotros sacamos una copia de los fuentes en un directorio de trabajo, ahí hacemos todos los
cambios que queramos y, cuando funcionen, le decimos al sistema de control de versiones que nos
guarde la nueva versión. El sistema de control de versiones suele pedirnos que metamos un
comentario cada vez que queremos guardar fuentes nuevos o modificados.
También, con esta herramienta, podemos obtener fácilmente cualquiera de las versiones de nuestros
fuentes, ver los comentarios que pusimos en su momento e, incluso, comparar distintas versiones de
un mismo fuente para ver qué líneas hemos modificado.
Los sistemas de control de versiones son programas que permiten gestionar un repositorio de
archivos y sus distintas versiones; utilizan una arquitectura cliente-servidor en donde el servidor
guarda la(s) versión(es) actual(es) del proyecto y su historia. Sirven para mantener distintas versiones
de un fichero, normalmente código fuente, documentación o ficheros de configuración.
"Hay que unirse, no para estar juntos, sino para hacer algo juntos. "
Juan Donoso Cortés (1808-1853); Ensayista español.
- 12 -
Documentación y control de versiones DAW Tema 6
Revisión: Es una visión estática en el tiempo del estado de un grupo de archivos y directorios.
Posee una etiqueta que la identifica. Suele tener asociado metadatos ("datos sobre datos". o
"informaciones sobre datos") como pueden ser:
Identidad de quién hizo las modificaciones.
Fecha y hora en la cual se almacenaron los cambios.
Razón para los cambios.
De qué revisión y/o rama se deriva la revisión.
Palabras o términos clave asociados a la revisión.
Copia de trabajo: También llamado "Árbol de trabajo", es el conjunto de directorios y archivos
controlados por el sistema de control de versiones, y que se encuentran en edición activa. Está
asociado a una rama de trabajo concreta.
Rama de trabajo(o desarrollo): En el más sencillo de los casos, una rama es un conjunto
ordenado de revisiones. La revisión más reciente se denomina principal (main) o cabeza. Las
ramas se pueden separar y juntar según como sea necesario, formando un grafo de revisión.
Repositorio: Lugar en donde se almacenan las revisiones. Físicamente puede ser un archivo,
colección de archivos, base de datos, etc.; y puede estar almacenado en local o en remoto
(servidor).
Conflicto: Ocurre cuando varias personas han hecho cambios contradictorios en un mismo
documento (o grupo de documentos); los sistemas de control de versiones solamente alertan de
la existencia del conflicto. El proceso de solucionar un conflicto se denomina resolución.
Cambio: Modificación en un archivo bajo control de revisiones. Cuando se unen los cambios en
un archivo (o varios), generando una revisión unificada, se dice que se ha hecho una
combinación o integración.
Parche: Lista de cambios generada al comparar revisiones, y que puede usarse para reproducir
automáticamente las modificaciones hechas en el código.
Con el empleo de los sistemas de control de versiones se consigue mantener un repositorio con la
información actualizada. La forma habitual de trabajar consiste en mantener una copia en local y
modificarla. Después actualizarla en el repositorio. Como ventaja tenemos que no es necesario el
acceso continuo al repositorio.
- 13 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Modificación de los ficheros, para aplicar los cambios oportunos como resultado de la
aportación de cada una de las personas encargadas de manipular el código de los ficheros.
Actualización de ficheros en local (Update): Los ficheros son modificados en local y,
posteriormente, se sincronizan con los ficheros existentes en el repositorio.
Resolución de conflictos (si los hay): Como resultado de la operación anterior es cuando el
sistema de control de versiones detectará si existen conflictos, en cuyo caso informa de ello y
siendo los usuarios implicados en la manipulación del código afectado por el conflicto, los
encargados de solucionarlo.
Actualización de ficheros en repositorio (Commit): Consiste en la modificación de los ficheros
en el repositorio; el sistema de control de versiones comprueba que las versiones que se
suben estén actualizadas.
Como conclusión, vemos que los sistemas de control de versiones permiten las siguientes funciones:
Debido a la amplitud de operaciones que el sistema de control de versiones permite aplicar sobre los
proyectos que administra, muchos de los sistemas de control de versiones ofrecen establecer algún
método de autorización, es decir, la posibilidad por la cual a ciertas personas se les permite, o no,
realizar cambios en áreas específicas del repositorio.
Algunos proyectos utilizan un sistema basado en el honor: cuando a una persona se le permite la
posibilidad de realizar cambios, aunque sea a una pequeña área del repositorio, lo que reciben es
una contraseña que le permite realizar cambios en cualquier otro sitio del repositorio y sólo se les
pide que mantenga sus cambios en su área. Hay que recordar que no existe ningún peligro aquí; de
todas formas, en un proyecto activo, todos los cambios son revisados. Si alguien hace un cambio
donde no debía, alguien más se dará cuenta y dirá algo. Es muy sencillo, si un cambio debe ser
rectificado todo está bajo el control de versiones de todas formas, así que sólo hay que volver atrás.
Entre las funciones que permite realizar un sistema de control de versiones cabe destacar:
Sacar copias del proyecto al mismo tiempo.
Realizar cambios a los ficheros manteniendo un histórico de los cambios.
Los clientes pueden también comparar diferentes versiones de archivos.
Unir cambios realizados por diferentes usuarios sobre los mismos ficheros.
Sacar una "foto" histórica del proyecto tal como se encontraba en un momento determinado.
Actualizar una copia local con la última versión que se encuentra en el servidor.
Mantener distintas ramas de un proyecto.
- 14 -
Documentación y control de versiones DAW Tema 6
El método de control de versiones usado por mucha gente es copiar los archivos a otro directorio
controlando la fecha y hora en que lo hicieron. Este enfoque es muy común porque es muy simple,
pero también tremendamente propenso a errores. Es fácil olvidar en qué directorio nos
encontramos, y guardar accidentalmente en el archivo equivocado o sobrescribir archivos que no
queríamos. Para hacer frente a este problema, los programadores desarrollaron hace tiempo
sistemas de control de versiones locales que contenían una simple base de datos en la que se
llevaba registro de todos los cambios realizados sobre los archivos.
Esta configuración ofrece muchas ventajas, especialmente frente a VCSs locales. Por ejemplo, todo el
mundo sabe hasta cierto punto en qué está trabajando el resto de gente en el proyecto. Los
administradores tienen control detallado de qué puede hacer cada uno; y es mucho más fácil
administrar un CVCS que tener que lidiar con bases de datos locales en cada cliente.
Sin embargo, esta configuración también tiene serias desventajas. La más obvia es el punto único de
fallo que representa el servidor centralizado. Si ese servidor se cae durante una hora, entonces
durante esa hora nadie puede colaborar o guardar cambios versionados de aquello en que están
trabajando. Si el disco duro en el que se encuentra la base de datos central se corrompe, y no se han
llevado copias de seguridad adecuadamente, se pierde absolutamente todo, toda la historia del
proyecto salvo aquellas instantáneas que la gente pueda tener en sus máquinas locales.
Es aquí donde entran los sistemas de control de versiones distribuidos (Distributed Version Control
Systems o DVCSs en inglés). En unDVCS (como Git, Mercurial, Bazaar o Darcs), los clientes no sólo
descargan la última instantánea de los archivos sino que replican completamente el repositorio. Así,
si un servidor muere, y estos sistemas estaban colaborando a través de él, cualquiera de los
repositorios de los clientes puede copiarse en el servidor para restaurarlo. Cada vez que se descarga
una instantánea, en realidad se hace una copia de seguridad completa de todos los datos.
Es más, muchos de estos sistemas se las arreglan bastante bien teniendo varios repositorios con los
que trabajar, por lo que se puede colaborar con distintos grupos de gente de maneras distintas
simultáneamente dentro del mismo proyecto. Esto permite establecer varios tipos de flujos de
trabajo que no son posibles en sistemas centralizados, como pueden ser los modelos jerárquicos.
- 15 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
En 2005, la relación entre la comunidad que desarrollaba el núcleo de Linux y la compañía que
desarrollaba BitKeeper se vino abajo, y la herramienta dejó de ser ofrecida gratuitamente. Esto
impulsó a la comunidad de desarrollo de Linux (y en particular a Linus Torvalds, el creador de Linux) a
desarrollar su propia herramienta basada en algunas de las lecciones que aprendieron durante el uso
de BitKeeper. Algunos de los objetivos del nuevo sistema fueron los siguientes:
Velocidad.
Diseño sencillo.
Fuerte apoyo al desarrollo no lineal (miles de ramas paralelas).
Completamente distribuido.
Capaz de manejar grandes proyectos como el núcleo de Linux de manera eficiente (velocidad y
tamaño de los datos).
Git es un sistema rápido de control de versiones, está escrito en C y se ha hecho popular sobre todo a
raíz de ser el elegido para el kernel delinux.
Desde su nacimiento en 2005, Git ha evolucionado y madurado para ser fácil de usar y. aún así,
conservar estas cualidades iniciales. Es tremendamente rápido, muy eficiente con grandes proyectos,
y tiene un increíble sistema de ramificación (branching) para desarrollo no lineal.
La principal diferencia entre Git y cualquier otro VCS (Subversion y compañía incluidos) es cómo Git
modela sus datos. Conceptualmente, la mayoría de los demás sistemas almacenan la información
como una lista de cambios en los archivos. Estos sistemas (CVS, Subversion, Perforce, Bazaar, etc.)
modelan la información que almacenan como un conjunto de archivos y las modificaciones hechas
sobre cada uno de ellos a lo largo del tiempo.
Casi cualquier operación es local, la mayoría de las operaciones en Git sólo necesitan archivos y
recursos locales para operar; por ejemplo, para navegar por la historia del proyecto, no se necesita
salir al servidor para obtener la historia y mostrarla, simplemente se lee directamente de la base de
datos local. Esto significa que se ve la historia del proyecto casi al instante. Si es necesario ver los
cambios introducidos entre la versión actual de un archivo y ese archivo hace un mes, Git puede
buscar el archivo hace un mes y hacer un cálculo de diferencias localmente, en lugar de tener que
pedirle a un servidor remoto que lo haga, u obtener una versión antigua del archivo del servidor
remoto y hacerlo de manera local.
Aparte de todo lo anterior, Git posee integridad debido a que todo es verificado mediante una suma
de comprobación antes de ser almacenado, y es identificado a partir de ese momento mediante
dicha suma. Esto significa que es imposible cambiar los contenidos de cualquier archivo o directorio
sin que Git lo detecte. Como consecuencia de ello es imposible perder información durante su
transmisión o sufrir corrupción de archivos sin que Git sea capaz de detectarlo.
En la siguiente tabla se resume el concepto de las herramientas de control de versiones, entre ellas
GIT.
- 16 -
Documentación y control de versiones DAW Tema 6
- 17 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
- 18 -
Documentación y control de versiones DAW Tema 6
1. Proyecto creado en un directorio existente e importarlo dentro de Git; comando git init
a. Crear carpeta para proyecto.
b. Dentro del directorio creado ejecutar git init automáticamente se crea un
directorio .git con una serie de archivos y carpetas encargadas de llevar a cabo el
control de versiones del proyecto.
c. Para añadir archivos al proyecto se emplea el comando git add seguido del archivo a
añadir y luego ejecutamos el comando git commit . Tener en cuenta lo que ocurre si
no se ha hecho el git init cómo se demuestra en el vídeo.
2. Clonar un repositorio existente desde un servidor; comando git clone con lo que se
obtiene una copia exacta del proyecto del servidor.
a. La sintaxis es: git clone "protocolo://url del proyecto a clonar" ; tener en cuenta la
carpeta en la que estamos situados.
Los archivos en estado tracked (rastreado) en este caso los archivos pueden estar en estado:
Unmodified en este caso los archivos se encuentran tal cual como están en el
repositorio.
Modified en este caso hemos realizado alguna modificación de los archivos que hemos
bajado del repositorio.
Staged cuando hemos realizado el git add sobre el archivo para que se añada al
repositorio en el próximo commit .
Los archivos en estado untracked (no rastreado), archivos nuevos en la carpeta del proyecto
sobre los que no se ha realizado ninguna operación "git" para añadirlos al repositorio. Los
estados anteriores se explican siguiendo un ciclo de vida para los archivos, mostrando cómo
van cambiando.
modified
staged
El comando git status muestra cómo se encuentran los archivos de nuestro proyecto en
relación al repositorio del servidor. Si existe la necesidad de excluir archivos del directorio
del proyecto para que estos no sean rastreados por GIT, se emplea el archivo .gitignore que
se demuestra en el vídeo cómo hacerlo empleando los patrones:
http://www.jedit.org/users-guide/globs.html
Suele ser útil instalar Git desde código fuente, porque obtendremos la versión más reciente. Cada
versión de Git tiende a incluir útiles mejoras en la interfaz de usuario, por lo que utilizar la última
versión es a menudo el camino más adecuado, realizando para ello la compilación de software desde
código fuente.
- 19 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
Para instalar Git, es necesario disponer de las siguientes librerías de las que Git depende: curl, zlib,
openssl, expat y libiconv; para instalarlas podemos ejecutar:
#apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev
Una vez hecho esto, también es posible obtener Git a través del propio Git para futuras
actualizaciones, empleando para ello el siguiente comando de manera que descargaría
automáticamente el código fuente desde su repositorio:
# git clone git://git.kernel.org/pub/scm/git/git.git
Si queremos instalar Git en Linux a través de un instalador binario, en general puedes hacerlo a
través de la herramienta básica de gestión de paquetes que trae Debian en nuestro caso, aunque
también podríamos realizar la instalación mediante el comando:
# apt-get install git-core
Sea una forma u otra la que hayamos decidido para realizar la instalación de Git, para comprobar si
se ha realizado correctamente comprobamos con el siguiente comando:
# git –-version
que en nuestro caso debería devolver " git version 1.7.6 ".
Git trae una herramienta llamada git config que permite obtener y establecer variables de
configuración que controlan el aspecto y funcionamiento de Git.
Lo primero que se debe hacer cuando se instala Git es establecer el nombre de usuario y dirección de
correo electrónico. Esto es importante porque las confirmaciones de cambios (commits) en Git usan
esta información, y es introducida de manera inmutable en los commits que el usuario va a enviar:
$ git config --global user.name "alumno"
$ git config --global user.email alumno@example.com
- 20 -
Documentación y control de versiones DAW Tema 6
Solamente se necesita hacer esto una vez si se especifica la opción --global , ya que Git siempre
usará esta información para todo lo que se haga en ese sistema. En el caso de querer sobrescribir
esta información con otro nombre o dirección de correo para proyectos específicos, puedes ejecutar
el mismo comando sin la opción --global cuando estemos en el proyecto concreto.
Otra opción útil que puede ser interesante configurar es la herramienta de diferencias por defecto,
usada para resolver conflictos de unión (merge). Supongamos que quisiéramos usar vimdiff:
$ git config --global merge.tool vimdiff
Git acepta kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge y opendiff como
herramientas válidas. En cualquier momento podremos comprobar la configuración que tenemos
mediante el comando:
$ git config --list
Cuando necesitemos ayuda utilizando Git tenemos tres modos de conseguir ver su página del manual
(manpage) para cualquier comando:
$ git help <comando>
$ git <comando> --help
$ man git-<comando>
A continuación vamos a crear los siguientes directorios para estructurar nuestro modo de trabajo con
Git:
# mkdir /home/usuario/git
# mkdir /home/usuario/www_git
Debemos escribir las siguientes lineas en este archivo y comentar las existentes:
Alias /git /home/usuario/www_git
<Directory /home/usuario/www_git >
Allow from all
AllowOverride all
Order allow,deny
Options +ExecCGI
DirectoryIndex gitweb.cgi
- 21 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
A continuación, mover los archivos básicos del gitweb al directorio de trabajo Apache creado
anteriormente:
# mv -v /usr/share/gitweb/* /home/usuario/www_git
# mv -v /usr/lib/cgi-bin/gitweb.cgi /home/usuario/www_git
al ejecutar el comando anterior nos devuelve un mensaje similar a " Initialized empty Git
repository in /var/cache/git/proyecto.git/.git/ ", podemos comprobar que en el directorio .git
hay una serie de archivos asociados al proyecto que se ha creado automáticamente.
# echo "Una breve descripcion del proyecto" > .git/description
# git config –global user.name "Tu nombre"
# git config –global user.email "tu@correo.com"
si hemos creado documentos nuevos en nuestro proyecto antes de hacer el " commit ", ejecutamos el
siguiente comando para que los archivos presentes en la carpeta del proyecto sean añadidos al
repositorio:
#git add .
Para iniciar el servicio de Git que ejecuta un servidor para hacer público nuestro repositorio,
ejecutamos el siguiente comando:
# git daemon –base-path=/var/cache/git –detach –syslog –export-all
- 22 -
Documentación y control de versiones DAW Tema 6
Por último, le daremos permisos de escritura a un usuario que no sea root, de tal manera que con
dicho usuario se puedan hacer cambios remotos en el repositorio:
# adduser usuariogit
# passwd usuariogit
# chown -Rv usuariogit:usuariogit /var/cache/git/proyecto.git
Para acceder al repositorio podemos hacerlo de la manera convencional, basta con ejecutar el
comando:
#git clone git://servidor/proyecto.git proyecto
El comando git commit sólo seguirá la pista de los archivos que estaban presentes la primera vez que
se ejecutó git add . Si son añadidos nuevos archivos o subdirectorios, debe indicarse al Git mediante
el siguiente comando:
$ git add ARCHIVOSNUEVOS
De manera similar, si queremos que Git se olvide de determinados archivos, porque (por ejemplo)
han sido borrados:
$ git rm ARCHIVOSVIEJOS
Renombrar un archivo es lo mismo que eliminar el nombre anterior y agregar el nuevo. También
puedes usar git mv que tiene la misma sintaxis que el comando mv . Por ejemplo:
$ git mv ARCHIVOVIEJO ARCHIVONUEVO
Algunas veces es interesante ir hacia atrás y borrar todos los cambios a partir de cierto punto porque,
a lo mejor, estaban todos mal. Entonces, utilizaremos para ello el comando:
$ git log
Ese comando muestra una lista de commits recientes, y sus hashes SHA1. A continuación, debemos
escribir:
$ git reset --hard SHA1_HASH
con él recuperamos el estado de un commit dado y se borran para siempre cualquier recuerdo de
commits más nuevos. Otras veces es necesario saltar a un estado anterior temporalmente. En ese
caso hay que escribir:
$ git checkout SHA1_HASH
este comando nos lleva atrás en el tiempo, sin tocar los commits más nuevos. Y con el comando:
$ git checkout master
podemos volver al presente. También existe la posibilidad de restaurar sólo archivos o directorios en
particular, para ello los agregarmos al final del comando:
$ git checkout SHA1_HASH algun.archivo otro.archivo
Esta forma de checkout puede sobreescribir archivos sin avisar. Para prevenir accidentes, es
recomendable hacer commit antes de ejecutar cualquier comando de checkout.
- 23 -
Despliegue de Aplicaciones Web José Luis Comesaña DAW
De aquí en adelante, cada vez que modifiquemos el script y creemos que está listo para el
lanzamiento, ejecutaremos:
$ git commit -a -m "Siguiente envío"
y los demás desarrolladores pueden actualizar su versión yendo al directorio que tiene el script y
ejecutando:
$ git pull
En el caso de que queramos averiguar qué cambios hicimos desde el último commit ejecutaremos:
$ git diff
Otra de las ventajas de Git reside en la facilidad de crear nuevas ramas de trabajo, llamadas branch ,
donde probar nuevas características y hacer cambios complejos sin que afecte a la rama de trabajo
principal. Luego, el proceso de fusión ( merge ), o la vuelta a un estado anterior es igual de fácil.
Github.com es una web donde alojar proyectos utilizando el sistema de control de versiones
Git. Esta web ofrece, aparte del almacenaje de proyectos, herramientas para "socializarlos",
como pueden ser feeds rss, wikis o gráficos de cómo los desarrolladores trabajan en sus
repositorios.
https://www.github.com/
Para empezar a usar Git, Github.com pone a disposición de quien los necesite, varios manuales en
inglés tanto para configurar Git como crear nuestros primeros repositorios en Github.com
- 24 -
Documentación y control de versiones DAW Tema 6
En el flujo de trabajo que hemos dibujado hasta el momento, los desarrolladores no subían
directamente cambios al repositorio público, sino que era el responsable del mismo quien aceptaba
los cambios y los incorporaba después de revisarlos. Sin embargo, Git también soporta que los
desarrolladores puedan subir sus modificaciones directamente a un repositorio centralizado al más
puro estilo CVS o Subversion (eliminando el papel de responsable del repositorio público).
Para que un repositorio público pueda ser utilizado de esta forma, es necesario permitir la ejecución
del comando push . En primer lugar deberemos crear el repositorio público (tal y como hemos visto
en secciones anteriores) y habilitar alguno de los siguientes accesos:
Acceso directo por sistema de ficheros con permisos de escritura para el usuario sobre el
directorio del repositorio.
Acceso remoto vía SSH (consultar man git-shell) y permisos de escritura para el usuario sobre el
directorio del repositorio.
Acceso HTTP con WebDav debidamente configurado.
Acceso mediante protocolo Git con el servicio "receive-pack" activado en el git daemon.
- 25 -
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-1
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-2
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-3
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-4
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-5
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-6
Mapas conceptuales del curso de Despliegue de Aplicaciones Web DAW José Luis Comesaña
-7