Cómo configurar Apache como servidor WebDAV

icalc

En este artículo, explicaré como convertir en Linux, nuestro servidor web Apache (que previamente habremos instalado), en un servidor WebDAV. El fin de este dossier, será el de poder publicar los calendarios que desarrollemos con la aplicación iCal de Apple, de una forma muy similar a como lo haríamos con una cuenta .mac.
Una vez publicados nuestros calendarios, podrá la gente suscribirse a ellos o consultarlos vía web.

 

¿Qué es un servidor WebDAV?

WebDAV (Web-based Distributed Authoring and Versioning), es una serie de extensiones del protocolo HTTP que permite a los usuarios colaborar en la edición y administración de recursos web en un servidor remoto.
En definitiva, lo que nos permite WebDAV, es de una forma muy sencilla, gestionar totalmente los ficheros que hay almacenados en un servidor WebDAV. No solo consistirá en poder almacenar en dicho servidor, todos los ficheros que queramos, sino que además, podremos por ejemplo moverlos de ubicación, modificar sus propiedades, nombre o niveles de acceso/seguridad, escribir en ellos vía http, etc…
Lo que nos propone WebDAV, es ni más ni menos que trasladar el “trabajo en grupo o compartido” a la web, utilizando para ello el protocolo http. Por tanto, WebDAV nos permitirá que varios usuarios estén trabajando con los ficheros almacenados en el servidor (que podrán ser cualquier tipo de archivo: documentos, imágenes, etc…), pero no por ello deja que este trabajo entorpezca el de los demás usuarios, ya que tiene la posibilidad de crear los típicos “locks” en los ficheros, es decir, cuando un usuario este trabajando con un fichero, no dejará que ningún otro usuario trabaje en ese mismo instante con ese archivo, para así, no sobrescribir el trabajo realizado.
Además, WebDAV, al más puro estilo CVS, nos permitirá llevar un control de las versiones de un mismo fichero, pudiendo recuperar en caso de fallo, cualquiera de las versiones anteriores.

 

¿Qué es iCal?

Para los que no conozcan el programa iCal, es una aplicación de calendario, mediante la cual podemos gestionar todas nuestras citas o tareas pendientes, de una forma similar a como lo haríamos con aplicaciones como korganizer, evolution u outlook.
La ventaja que tiene iCal frente a soluciones similares son varías:

 

  1. Mediante iCal podemos gestionar tantos calendarios como nosotros queramos, pudiendo, por ejemplo, distinguir fácilmente entre un calendario personal o laboral. Para ello, iCal se vale de unas etiquetas de colores que automáticamente le asignará a los eventos pertenecientes a ese determinado calendario.
    Además, para facilitar aún más la gestión de estos calendarios, podremos elegir, entre ver los eventos por separado o todos juntos (identificándolos por su color).
  2. Mediante iCal, podemos compartir nuestros calendarios fácilmente, con la ayuda de una cuenta .mac o de un servidor WebDAV. Será muy fácil publicar nuestros calendarios, para que la gente pueda acceder a ellos vía web o suscribiéndose (ahorrándose por tanto, el tener que visitar la web de eventos).
  3. Además, será muy fácil configurar nuestra aplicación para que automáticamente actualice estas publicaciones, cuando hemos introducido algún cambio en alguno de los calendarios publicados.
  4. También muy fácilmente, podremos suscribirnos a un calendario que haya publicado alguien en internet. De esta forma, cuando arranquemos nuestra aplicación iCal, automáticamente nos actualizará los eventos o citas referentes a estos calendarios.
  5. Mediante la ayuda de aplicaciones como iSync, podremos sincronizar nuestras citas con las que tengamos apuntadas en nuestro teléfono móvil o PDA.

 

Instalación del modulo mod_dav

Como hemos dicho en la introducción de este artículo, para poner en marcha nuestro servidor WebDAV, vamos a utilizar un servidor Apache, que previamente hayamos instalado en nuestra maquina.
Por si solo, Apache no nos brinda la posibilidad de utilizarlo como servidor WebDAV, por lo que habrá que instalar una herramienta externa que si nos permita llevar a cabo esta labor. La herramienta que debemos usar, es el modulo de Apache mod_dav, que otorga las capacidades DAV a nuestro servidor web.
La instalación de este modulo, variará según la distribución que dispongamos, por lo que en este artículo veremos la forma de instalarlo en las distribuciones más usuales (distribuciones basadas en paquetes rpm, deb y mediante la compilación de su código fuente).

  1. Distribuciones basadas en rpm.
    Para instalar el modulo mod_dav en este tipo de distribución, lo más sencillo es hacernos con el paquete .rpm del mismo e instalarlo mediante la herramienta rpm.
    Para ello, podemos bajarnos el susodicho paquete de webs como htttp://rpmfind.net y una vez lo tengamos, ejecutar este comando (cuando se creo este artículo la versión más nueva disponible era la 1.0.3-5):

    rpm -ihv mod_dav-1.0.3-5.i386.rpm
    

    Con esto, estará perfectamente instalado en nuestro sistema.

  2. Distribuciones basadas en debian.
    Si queremos instalar mod_dav en debian (o similares), bastará con que ejecutemos un simple:

    apt-get install libapache-mod-dav
    

    Atención en esta distribución, que al instalar el modulo mod_dav, nos preguntará si queremos que configure por nosotros el servidor Apache, para que éste cargue el modulo y si le decimos que si, nos añadirá el código necesario para llevar a cabo tal acción, pero también nos comentará el código necesario para cargar el modulo de php.

  3. Compilación del código fuente.
    Si lo que queremos es instalar el modulo mod_dav desde su código fuente, lo que tenemos que hacer es bajarnos dicho código de la web oficial (http://www.webdav.org/mod_dav/). Una vez lo hayamos descargado, lo descomprimiremos:

    tar zxvf mod_dav-1.0.3-1.3.6.tar.gz
    

    y entonces, debemos decidir, si lo instalamos como modulo que se cargará dinámicamente mediante la utilidad de Apache “apxs”, o bien si lo queremos instalar de forma estática en el ejecutable de Apache.
    Para la primera de las dos formas, deberemos de realizar estos pasos:

    cd mod_dav-1.0.3-1.3.6
    ./configure --with-apxs=/ruta/hacia/el/ejecutable/apxs
    make
    make install
    

    Para el segundo de los métodos, los pasos que hay que tomar son los siguientes:

    ./configure --with-apache=/directorio/del/Apache/compilado
    make
    make install
    

    En esta última manera, faltaría una cosa muy importante, recompilar de nuevo Apache, para que se active el modulo en el ejecutable del servidor web. Para ello, cuando compilemos Apache, le deberemos pasar como parámetro al configure:

    --activate-module=src/modules/dav/libdav.a
    

Con esto, ya tendríamos instalado el modulo mod_dav en nuestro sistema, faltandonos la configuración del servidor Apache.

Configuración de Apache

Para configurar Apache, deberemos de editar el fichero httpd.conf (que según la distribución podrá estar en /etc/httpd/httpd.conf, /etc/httpd/conf/httpd.conf o /etc/apache/httpd.conf) y añadir en la parte de los DSO modules (contando que el modulo esta en la ruta /usr/lib/apache/1.3/libdav.so):

LoadModule dav_module /usr/lib/apache/1.3/libdav.so

Además, deberemos añadir al final del fichero el siguiente código:

<IfModule mod_dav.c>
DAVLockDB /var/lock/DAV/DAVLock
DAVMinTimeout 600
</IfModule>
<Location /dav/>
DAV On
AuthType Basic
AuthName "WebDAV Restringido"
AuthUserFile /home/.passw
<LimitExcept GET HEAD OPTIONS>
Require user webdav
</LimitExcept>
</Location>

Con la primera parte, lo que hacemos es si se ha cargado con éxito el modulo mod_dav, especificamos el fichero lock que creará el servidor WebDAV. El directorio donde creará tal fichero, /var/lock/DAV tiene que existir y debe tener permisos de escritura para el usuario con el que se ejecutan los procesos del Apache.
Además, de manera opcional, pero muy recomendable, especificamos el tiempo de vida en segundos de este fichero.

En la segunda parte, especificamos opciones del directorio que utilizaremos en el servidor para poner en marcha nuestro WebDAV Server (es el directorio donde se almacenarán los ficheros del servidor DAV y por tanto, donde se almacenarán nuestros calendarios).
En primer lugar especificamos cual va a ser este directorio, que en nuestro caso será /dav (<Location /dav/>).Este directorio, dado que empieza con la raíz “/”, es relativo al DocumentRootdel dominio en donde estemos configurando el servidor, es decir, si el DocumentRoot fuese /var/www, el directorio que estaríamos indicando sería /var/www/dav.
Seguidamente, indicamos a Apache que ponga en marcha el servicio DAV para este directorio en concreto (DAV On).
Para asegurar el servicio, hacemos uso de la típica autenticación HTTP, con lo que si se conecta alguien a nuestro servidor WebDAV, le pedirá que se autentifique. Para ello, hacemos uso de las directivas (Estas directivas se podrían haber puesto en un fichero .htaccess, indicando que se va a utilizar el mismo, mediante la directiva AllowOverride AuthConfig):

AuthType Basic
AuthName "WebDAV Restringido"
AuthUserFile /home/.passw

Como puede observar, el fichero donde se almacenarán los nombres de los usuarios autorizados, será /home/.passw, por lo que posteriormente deberemos crear este fichero de contraseñas.
Finalmente ponemos limites a lo que se puede hacer con los ficheros almacenados en el directorio dav. Indicamos que salvo para las acciones GET, HEAD y OPTIONS, se requiera que se autentifique como usuario webdav (que es el que vamos a almacenar en nuestro fichero de contraseñas .passw).

Preparación de los directorios necesarios.

Ya tenemos Apache configurado, pero antes de reiniciar el servidor, vamos a crear y preparar los directorios y ficheros antes mencionados.
n primer lugar creamos y configuramos los permisos del directorio donde se almacenará el fichero lock (el usuario con el que se ejecuta el servidor Apache, variará según la distribución, pudiendo ser www-data, www o nobody):

mkdir /var/lock/DAV
chown www-data /var/lock/DAV
chmod 750 /var/lock/DAV

En segundo lugar, creamos el directorio principal, donde se van a almacenar los ficheros en el servidor WebDAV (este variará según el DocumentRoot, siendo el nuestro /var/www):

mkdir /var/www/dav
chown www-data /var/www/dav
chmod 750 /var/www/dav

Finalmente, crearemos el fichero contra el que nos validaremos a la hora de publicar nuestros calendarios. Para ello, nos valdremos de la aplicación htpasswd, que viene con cualquier instalación estándar de Apache:

httpaswd -c /home/.passw webdav

Al teclear este comando nos pedirá la contraseña que le vamos a poner al usuario webdav y al introducirla, nos generará el fichero /home/.passw con el susodicho usuario y el password que le hemos asignado.

Ahora sí, ya podemos reiniciar Apache:

 /etc/init.d/apache restart (para debian) /etc/init.d/httpd restart (para las demás distribuciones).

Instalación de phpicalendar. Ahora mismo, ya tenemos en funcionamiento nuestro servidor WebDAV y por tanto, ya podríamos publicar nuestros calendarios en él. Pero antes de hacer esto, vamos a instalar una aplicación hecha en PHP en nuestro servidor web, que nos permitirá consultar dichos calendarios vía web, sin necesidad de suscribirnos a ellos. Esta aplicación, llamada phpicalendar, analiza el fichero .ics (es el estándar utilizado en muchos de los programas de calendario existentes) y lo plasma en la web de una forma similar a como se hace con una cuenta .mac. Ni que decir tiene, que al tratarse de una aplicación PHP, deberemos tener soporte en nuestro servidor web, para estas aplicaciones. Para instalarlo, en primer lugar, nos lo tendremos que descargar de la web oficial de este proyecto, http://phpicalendar.sourceforge.net/nuke. Una vez descargado, lo descomprimimos:

tar xvzf phpicalendar-1.1.tgz

Movemos el directorio que nos habrá creado a un lugar accesible vía web, es decir, a un directorio que este dentro de nuestro DocumentRoot. Nosotros, además de hacer esto, renombraremos el directorio que nos ha creado, para facilitar que la gente se acuerde del nombre del mismo (escribir en el navegador, phpicalendar, es un tanto complicado 🙂 ):

mv phpicalendar /var/www/calendario

Posteriormente, deberemos configurar esta aplicación, para lo cual, editaremos el fichero /var/www/calendario/config.inc.php, cambiando en el mismo, ciertos parámetros:

En $language ponemos 'Spanish';
En $week_start_day ponemos 'Monday';
En $calendar_path ponemos la ruta del servidor webdav, '/var/www/dav/';
Las demás opciones las cambiamos si nos apetece, pero no es necesario.

Con esto, ya tendríamos nuestro servidor WebDAV listo y podríamos empezar a publicar nuestros calendarios, suscribirnos a los publicados o consultarlos vía web.

 

phpicalendar WebDAB

Ejemplo de calendario con phpicalendar. Click para ampliar

 

Crear, publicar calendarios y mandar invitaciones.

 

Una vez tenemos ya en marcha el servidor DAV, solo nos falta crear un calendario y publicarlo en el susodicho servidor.

Para crear un calendario con iCal, debemos dirigirnos al menú Archivo y seleccionamos Nuevo calendario. Tras darle un nombre, ya podemos añadir nuevos eventos, simplemente seleccionando dicho calendario y dirigiendonos al menú Archivo – Nuevo evento.

Para publicar un calendario, debemos seleccionarlo y después dirigirnos al menú Calendario – Publicar.Al hacer esto, nos aparecerá una nueva pantalla, preguntandonos los datos de publicación:
En “Nombre publico” le daremos el nombre con el que queramos publicar el calendario.
Seleccionamos las opciones que queramos, como la siempre interesante “Publicar cambios automáticamente” (las demás opciones son Publicar asuntos y notas, Publicar alarmas y Publicar tareas pendientes) y en “Publicar calendario”, seleccionamos “en un servidor WebDAV”.
Al hacer esto, nos aparecerán tres nuevas opciones. En la primera de ellas, debemos especificar la “Dirección URL base:” (http://www.dominiowebdav.com/dav/).
En la segunda, debemos especificar el usuario que tiene acceso a publicar calendarios en ese servidor (en nuestro caso el usuario es webdav -lo creamos con httpasswd-) y en la tercera, la contraseña del mismo (la que indicamos con httpasswd).

 

iCalc WebDAB publicar

Apretamos publicar y ya estará publicado en el servidor.Suscribirse a un calendario.

Para suscribirse a un calendario mediante iCal, deberemos dirigirnos al menú Calendario – Suscribirse…
Al hacerlo, nos aparecerá una nueva pantalla, donde deberemos poner la “Dirección URL del calendario:”, la cual será similar a esta (contando que el calendario fue publicado con el nombre Eventos):
webcal://www.dominiowebdav.com/dav/Eventos.ics

Seguidamente, podemos seleccionar que se actualice cada un cierto tiempo y al terminar, apretamos el boton “Suscribirse”.

 

WebDAB iCalc suscription

Cuando acabe este proceso, ya tendremos los eventos referentes a este calendario, en nuestra aplicación iCal.

Combinar calendarios con korganizer.

O es lo mismo que suscribirse a un calendario con iCal, pero podemos con la herramienta Korganizer de KDE, bajarnos los eventos referentes a un calendario publicado en un servidor WebDAV. Para ello, nos dirigimos al menú Archivo – Combinar y cuando nos pregunta la dirección del fichero .ics, deberemos poner:
http://www.dominiowebdav.com/dav/Eventos.ics

Consultar vía web, los calendarios publicados.

Gracias a que hemos instalado phpicalendar, podrán acceder a él los usuarios del servidor WebDAV, via web. Solo tienen que introducir la dirección web:

 

http://www.dominiowebdav.com/calendario/

Y ya esta, con esto llegamos al final del artículo. Si crees que hay alguna equivocación o deseas completarlo, no dudes en pasarte por el canal de sugerencias de la web.

 

Fuente: http://www.redes-linux.com/webdav.php?pag=6