lunes, 30 de diciembre de 2013

Una explicación de andar por casa de WebDAV

En mi anterior entrada hablada de una forma de tener los ficheros de claves de aplicaciones tipo keepass disponibles en internet para que fueran accesibles desde diferentes ubicaciones, permitiendo la posibilidad de realizar actualizaciones a las mismas desde cualquier sitio. Para poder hacer esto había recurrido a WebDAV, pero muchos de nosotros nos preguntaremos por ese desconocido.

De forma breve se puede decir que WebDAV no es más que el intento de establecer que la world wide web que conocemos disponga de la posibilidad de poder realizar modificaciones sobre los documentos publicados en la web. En realidad WebDAV son dos cosas, por un lado es un grupo de trabajo para definir el estándar que permita la funcionalidad descrita y por otro lado es un protocolo, surgido de ese grupo de trabajo, que lo define mediante una RFC de internet.

Lo que hace WebDAV es añadir varios métodos a los que define el estándar HTTP, que es el que se emplea en la comunicación entre los navegadores webs y los servidores webs. Típicamente, los métodos HTTP son GET, POST, PUT, CONNECT, HEAD (y algunos más) que nos permiten solicitar una página, enviar los datos de un formulario, subir un archivo, conectarnos al servidor y mandar las cabeceras (la información por ejemplo de las cookies se envía en el HEAD). Como vemos, aquí no hay nada que sirva para modificar el contenido de una página web (explícitamente, claro). El protocolo HTTP no lo permite.

En este punto es donde interviene WebDAV, proporcionando algunos métodos adicionales como COPY, MOVE, LOCK, UNLOCK, PROPFIND, PROPPATCH y MKCOL al protocolo HTTP para permitir copiar un recurso, moverlo de una ubicación a otra, bloquearlo/desbloquearlo, buscar propiedades, modificar propiedades, crear directorios (colecciones).

Como curiosidad sobre WebDAV, los sistemas de control de versiones como Subversion o Git lo utilizan internamente (clientes y servidor) cuando se accede al repositorio mediante HTTP. Es decir, ellos no han inventado la rueda para realizar las modificaciones sobre el servidor web que publica el contenido de sus repositorios, han utilizado el protocolo WebDAV implementando el cliente para comunicarse con un servidor HTTP como Apache, que dispone de la funcionalidad WebDAV activada (mediante los modulos dav y dav_fs para proporcionar la infraestructura necesaria).

También sistemas operativos permiten montar un recurso remoto del servidor web que dispone de la funcionalidad WebDAV como si fuera un directorio local, dejándonos modificar a nuestro gusto los contenidos que allí encontremos. O navegadores web que disponen de un cliente WebDAV (mediante plugins que se instala en el navegador) que ofrece la posibilidad de modificar al vuelo el contenido del servidor web sin recurrir a aplicaciones de terceros.

Esto también tiene una implicación interesante, al ser WebDAV un añadido al HTTP, podemos agregarle la capa de seguridad SSL para disponer de WebDAVS simplemente ofreciendo el contenido mediante el HTTPS, sin cambiar para nada el protocolo WebDAV.

De todas formas, las entradas de la wikipedia son mucho más amplias.

PD: Esta entrada fué publicada inicialmente en alidhaey.blogspot.com

miércoles, 25 de diciembre de 2013

Fichero de claves de keepass en apache con webdav

Un problema que se puede plantear es disponer de un lugar en internet en el que guardar tus ficheros de claves, accesible desde todos los sitios, que utilice algún protocolo seguro y que te permita también realizar las actualizaciones convenientes.

Para que sea accesible desde todos los sitios sin tener problemas con firewalls y restricciones de navegación, con comunicación cifrada, lo mejor es utilizar el protocolo https. El servidor apache nos da esa parte, si ademas le metemos la capacidad para manejar webdav que también es soportado por keepass, tenemos la funcionalidad de poder realizar las modificaciones desde donde realizamos las conexiones. En resumen, apache con modulo dav y dav_fs. El soporte para la comunicación cifrada con SSL es trivial.

En /etc/apache2/mods-available creamos el ficheros dav.conf con el siguiente contenido
Alias /ruta_publicacion/ /var/www/ruta_ficheros/
<Location /ruta_publicacion/ >
  DAV On
  Options -MultiViews
<Location>
 e igualmente creamos también dav_fs.conf (si no existe).
DAVLockDB ${APACHE_LOCK_DIR}/DAVLock
Lo primero establece un directorio donde se va a poder utilizar webdav, es decir, es el directorio donde podremos hacer modificaciones remotamente en los ficheros ofrecidos por el servidor apache. Lo segundo establece la ruta del fichero de bloqueos para el modulo webdav y no tener conflictos con actualizaciones simultáneas.

Nos aseguramos que el directorio /var/www/ruta_ficheros/ y sus ficheros son accesibles por el propietario que ejecuta apache (normalmente es www-data) y que los permisos adecuados para poder leer y escribir los ficheros (usualmente que coincida el propietario y grupo con los que se ejecuta el proceso apache). Luego ejecutamos la habilitación de los modulos y reiniciamos el apache con
$ a2enmod dav
$ a2enmod dav_fs
$ service apache2 restart
En /var/www/ruta_ficheros/ copiamos nuestros ficheros de claves que tenemos con keepass. Adicionalmente, podemos proteger con contraseñas el acceso al directorio /var/www/ruta_ficheros/ con las directivas dentro de las directivas Location de apache anteriores.
AuthType Basic
AuthUserFile /path/htpasswd/db
AuthName "Acceso restringido"
require valid-user
También podemos agregar el -Indexes a las opciones de Location, pero eso depende de los gustos del consumidor. Es importante la opción -MultiViews, de lo contrario aparecerá un error con el siguiente texto "Negotiation: discovered file(s) matching request:" en nuestro querido apache. Lo cual no te deja mucho margen de maniobra, salvo buscar en san google.

PD: Publicado inicialmente en Fichero de claves de keepass en apache con webdav.

lunes, 16 de diciembre de 2013

VirtualBox Error VERR_VMX_NO_VMX

Hacía unos días que no ejecutaba la máquina virtual en el portátil y al intentarlo hoy me ha aparecido un error:
VERR_VMX_NO_VMX 0x80004005
Fallo al abrir una sesión para la máquina virtual W XP Professional.
VT-x is not available. (VERR_VMX_NO_VMX).
Código Resultado: NS_ERROR_FAILURE (0x80004005)
Componente: Console
Interfaz: IConsole {8ab7c520-2442-4b66-8d74-4ff1e195d2b6}
Me ha descolocado el error porque hasta hace unos días, nunca habían protestado porque no tuviera habilitada la virtualización a nivel de BIOS, principalmente porque el microprocesador del portátil no soporta la virtualización a nivel de hardware.

Cómo recordaba que hacía poco que se había actualizado el equipo de la oficina, utilizando ahora VirtualBox 4.3.4, he mirado en los foros de virtualbox.org y he encontrado que precisamente se trata de un cambio introducido en dicha versión: por defecto, si no encuentra el hardware de aceleración, da error. Basta con indicarle el modo para que funcione correctamente:
$ VBoxManage modifyvm <vmname> --longmode off


No pierdas de vista que:
  • La solución no puede ser aplicada desde la interfaz, sino que ha de emplearse la consola de administración.
  • Debe lanzarse con el usuario que ejecutas las máquinas virtuales y no como root o cualquier otro.
  • Se debe sustituir <vmname> por el nombre de la máquina virtual. Si el nombre contiene espacio, se han de usar las comillas (simples o dobles) para proteger los espacios.

Actualización (13/01/2014):
En configuraciones de 64 bit que no soportan virtualización, es necesario no sólo deshabilitar el longmode si no prácticamente cualquier función de virtualización de la CPU. La mejor forma de hacerlo es editando el fichero descriptor de la máquina virtual, que normalmente está ubicado en el directorio home o user, dependiendo del SO, de cada usuario del sistema.

La configuración debería quedar tal que así:
...
 <CPU count="1" hotplug="false">
       <HardwareVirtEx enabled="false"/>
       <HardwareVirtExNestedPaging enabled="false"/>
       <HardwareVirtExVPID enabled="false"/>
       <HardwareVirtExUX enabled="false"/>
       <PAE enabled="false"/>
       <LongMode enabled="false"/>
       <HardwareVirtExLargePages enabled="false"/>
       <HardwareVirtForce enabled="false"/>
 </CPU>
...
Fuente: Foro VirtualBox