Cómo configurar un servidor WebDav en la Raspberry pi

Otro de los servicios interesantes que podemos configurar en nuestra Raspberry Pi es un servidor de webdav. De este modo podemos acceder a nuestros archivos desde cualquier dispositivo sin por ello perder el control sobre ellos.

webdav-logo

Para ello, hay que seguir los siguientes pasos:

  • Crear un certificado SSL autofirmado.
  • Crear un directorio para los archivos y un fichero de credenciales con el usuario con el que accederemos.
  • Configurar un VirtualHost en Apache

Crear un certificado SSL autofirmado

Ejecutamos el siguiente comando. Es importante establecer un passphrase seguro y que el Common Name (CN) corresponda exáctamente con el dominio:

openssl req -config /etc/ssl/openssl.cnf -new -out server.csr

A continuación, obtenemos la clave pública y privada en los formatos que soporta Apache:

openssl rsa -in privkey.pem -out server.key
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

Por último, copiamos ambos archivos a la carpeta /etc/ssl/cfdos

sudo mkdir /etc/ssl/cfdos
sudo cp /tmp/server.key /etc/ssl/cfdos
sudo cp /tmp/server.crt /etc/ssl/cfdos

Crear un directorio para los datos y el fichero de credenciales

Es necesario crear un directorio en /var/www, pero en mi caso voy a crear un enlace simbólico que apunte al directorio donde realmente están los archivos. Tras ello, hay que cambiar el propietario del enlace al usuario www-data, que es el que ejecuta Apache

cd /var/www
sudo ln -s DIRECTORIO_DONDE_ESTAN_LOS_DATOS webdav
sudo chown www-data:www-data webdav

A continuación vamos a crear un fichero de credenciales con el usuario con el que nos autenticaremos en el servidor. Es importante establecer una contraseña segura y cambiar el propietario y los permisos del fichero para que solo root y el grupo www-data acceda a él:

cd RUTA_DONDE_DESEAMOS_GUARDAR_EL_FICHERO
htpasswd -c passwd.dav USUARIO_WEBDAV
sudo chown root:www-data passwd.dav
sudo chmod 440 passwd.dav

Configurar Apache

Tras ello, habilitamos los módulos necesarios en Apache:

sudo a2enmod dav_fs
sudo vim /etc/apache2/sites-availaible/nombre_del_virtualhost

Ahora vamos a crear un nuevo VirtualHost que escuche por el puerto 443:

sudo a2enmod dav_fs
sudo a2enmod dav
sudo a2enmod ssl
<VirtualHost *:443>
  ServerName  DOMINIO_DEL_SERVIDOR_DEBE_COINCIDIR_CN_CERTIFICADO
  ErrorLog /var/log/apache2/dominio_error.log

  SSLEngine on
  SSLCertificateFile /etc/ssl/cfdos/server.crt
  SSLCertificateKeyFile /etc/ssl/cfdos/server.key

  DocumentRoot /var/www/webdav

  <Location />
    order deny,allow
    Allow from 192.168.1.1/255.255.255.0 #permitimos el acceso desde nuestra LAN
    Allow from X.Y.Z.A/255.255.255.255 #permitimos el acceso desde una IP concreta
    Deny from all

    DAV On
    AuthType Basic
    AuthName "webdav"
    AuthUserFile RUTA_FICHERO/passwd.dav
    Require valid-user
  </Location>
</VirtualHost>

He asumido que por seguridad queremos limitar el acceso a IPs y rangos concretos. Si no es el caso sustituir la sección por:

order allow,deny
Allow from all

Debemos asegurarnos de que Apache está configurado para soportar VirtualHost por dominio para el puerto de SSl (443). Para ello, esta linea debería estar en el archivo de configuración ports.conf:

NameVirtualHost *:443

Finalmente, habilitamos el virtualhost y reiniciamos Apache:

sudo a2ensite nombre_del_virtualhost
sudo service apache2 restart

Y si todo ha ido bien al apuntar un navegador web a https://dominio/webdav e identificarnos con el usuario creado anteriormente accederemos a los ficheros. Veremos que el navegador da un error de seguridad por haber utilizado un certificado autofirmado, pero salvo que tengamos un certificado real es inevitable. Cuando configuremos clientes para comunicarnos con el servidor habrá que tenerlo en cuenta.

Publicado en tutoriales Etiquetado con: , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*