WebDAV con Apache2 en Debian GNU/Linux

Arco

Cómo configurar Apache2 para disponer de un directorio WebDAV, accesible para lectura/escritura desde GNOME VFS, konqueror, cadaver o como una “web folder” desde el “sistema operativo más rentable de todos los tiempos”.

Ingredientes

  • Apache2

Módulos

# a2enmod dav_fs

Carpeta DAV

Lo habitual es ‘compartir’ un directorio del sistema de ficheros, y para eso se usa la directiva “Alias”:

<VirtualHost *>
   ….
 
   Alias /webdav /var/www/dav
   <Location /webdav>
      DAV On
   </Location>
</VirtualHost>

Con eso tienes un directorio cuyo contenido todo el mundo puede leer, escribir y borrar.

Escritura restringida

Con la siguiente configuración cualquiera podrá ver el contenido del directorio pero sólo los usuarios autorizados podrán modificar su contenido:

<Location /webdav>
   Dav On
 
   AuthType Basic
   AuthName DAV
   AuthUserFile user.passwd
 
   <LimitExcept GET OPTIONS>
      Require valid-user
   </LimitExcept>
</Location>

El fichero user.passwd se crea htpasswd de la forma habitual. Una alternativa es usar mod_auth_digest, aunque es experimental y requiere soporte del navegador.

DAV privado

Y si lo que quieres es que sólo los usuarios autorizados pueden acceder a la carpeta (incluso para lectura) simplemente hay que eliminar la excepción:

<Location /webdav>
   Dav On
 
   AuthType Basic
   AuthName DAV
   AuthUserFile user.passwd
   Require valid-user
</Location>

Autenticación LDAP

En realidad LDAP se puede utilizar como medio de autenticación y autorización para cualquier recurso de Apache, no sólo para carpetas DAV.

Instala los siguientes paquetes:

  • libapache2-mod-auth-pam
  • libpam-ldap
  • libnss-pam

Edita el fichero /etc/pam.d/apache2 para que queda tal que:

auth required pam_ldap.so try_first_pass
auth required pam_permit.so
account required pam_ldap.so
account required pam_permit.so

Edita /etc/pam_ldap.conf y modifica las líneas que se indican:

host 192.168.1.1         # servidor LDAP
base dc=example,dc=net   # base de búsqueda
#rootbinddn cn=manager,dc=example,dc=net

Edita /libnss_ldap.conf:

base dc=example,dc=net
uri ldap://192.168.1.1
#rootbinddn cn=manager,dc=example,dc=net
bind_policy soft
nss_connect_policy persist
idle_timelimit 3600
nss_paged_results yes
pagesize 1000
pam_min_uid 1000

Edita el fichero /etc/nsswitch.conf

passwd:         compat ldap
group:          compat ldap
hosts:          files dns

La configuración para la carpeta DAV pero usando LDAP sería algo como:

<Location /webdav>
   Dav On
 
   AuthPAM_Enabled on
   AuthGROUP_Enabled on
   AuthType Basic
   AuthName DAV
   AuthBasicAuthoritative off
   AuthUserFile none.passwd     # un fichero vacío 
 
   <LimitExcept GET OPTIONS>
      Require group staff
   </LimitExcept>
</Location>

Un poquillo de seguridad

Si vas a enviar claves por la red (como es el caso de lo descrito anteriormente), lo mejor es que sirvas la carpeta por SSL. Mira la receta de Crear un sitio web SSL con Apache2.

Referencias