Posts tagged with “dropbox”

Montando nuestro propio Dropbox

Los discos duros online, por ejemplo Dropbox, están de moda. Gracias a estos servicios y los clientes multiplataforma, es posible tener todos tus ficheros accesibles desde cualquier dispositivo, ya sean windows, linux, smartphones, web, etc. Los problemas de usar estos servicios suelen ser básicamente estos dos:

1- Los datos ya no los tienes tú, están en manos de empresas.

2- El tamaño que se ofrece suele ser bastante reducido.

Ahora mismo en el mundo del hosting los precios de servidores dedicados o VPS están bajando cada vez más, es facil montarte tu propia máquina con root por poco dinero al año. Y gracias a eso, te puedes montar de forma manual todo aquello que los diferentes proveedores te ofrecen. Tu correo electrónico, webmail, blog... y aquí veremos como aprovechar tu VPS para montarte tu propio Dropbox.

En el ejemplo que aquí voy a mostrar se van a utilizar los siguientes componentes:

  • VPS con Archlinux
  • Lighttpd como servidor web
  • mod_webdav
  • EncFS para el cifrado de los datos

Como vemos, la estructura será sencilla. Vamos a cambiar Dropxbox por un servidor web con soporte WebDAV. Este protocolo está soportado en prácticamente cualquier sistema operativo y existen cientos de clientes FTP que pueden trabajar con el, por lo que incluso seremos aún más multiplataforma.

Lo primero de todo, instalar lighttpd:

pacman -S lighttpd

Configuramos el módulo mod_webdav. La carpeta que indiquemos debe ser una subcarpeta del server.document-root, o de otra forma no podremos escribir:

server.modules      = ("mod_webdav",
               "mod_auth")
server.port     = 80
server.username     = "http"
server.groupname    = "http"
server.document-root    = "/srv/http"
server.pid-file     = "/var/run/lighttpd/lighttpd.pid"
server.errorlog     = "/var/log/lighttpd/error.log"
dir-listing.activate    = "disable"
index-file.names    = ( "index.php" )
$HTTP["url"] =~ "^/dav($|/)" {
    webdav.activate = "enable"
    webdav.is-readonly = "disable"
    webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db"
    auth.backend = "htpasswd"
    auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd"
    auth.require = ( "" => ( "method" => "basic",
                             "realm" => "webdav",
                                 "require" => "valid-user" ) )
}

Como todas las configuraciones de Lighttpd, son bastante faciles de leer. Indicamos que si la ruta a la que queremos acceder termina en /dav, se habilitará el módulo webdav para dicho acceso. El acceso no será read-only y estará protegido mediante una contraseña. Este fichero de contraseñas lo creamos con htpasswd.

Con esta configuración ya podemos acceder por webdav. Si por ejemplo usas Finder o Cyberduck de MacOS, no te funcionarán. No se la razón, pero con esas herramientas únicamente podrás crear carpetas. Triste... pero es así. Os recomiendo usar Transmit, funciona a la perfección y te permite montar el webdav como si fuese otra unidad de disco.

Bien, ya tenemos acceso webdav. Ahora lo que toca es proteger nuestros datos. Recordemos que aún estamos utilizando un VPS alojado en un hosting, por lo que nuestros datos están poco asegurados. Gracias a EncFS y FUSE podremos tener nuestros datos protegidos. EncFS, permite cifrar carpetas locales del sistema sin necesidad de crear particiones o nuevos sistemas de ficheros. En caso de que robo de disco duro o intento de acceso a los datos sin conocer la contraseña de cifrado, sería posible acceder a los datos.

El primer paso os lo podéis imaginar:

pacman -S encfs

Creamos una carpeta donde irán los datos cifrados, por ejemplo:

mkdir /root/cryptdav

Y ejecutamos:

encfs /root/cryptdav /srv/http/dav
Creando nuevo volumen cifrado.
Por favor, elige una de las siguientes opciones:
pulsa "x" para modo experto de configuracion,
pulsa "p" para modo paranoia pre-configurado,
cualquier otra, o una linea vacia elegira el modo estandar.
?>

Elegimos la opción p para terminar antes. Si deseas elegir tus propias opciones de cifrado, elige x. Al finalizar nos pedirá una contraseña, que será la que necesitaremos para montar la carpeta cifrada y poder acceder a los datos.

A partir de este momento, todo lo que subamos en /srv/http/dav se cifrará en /root/cryptdav. Si hemos dejado de subir ficheros y de trabajar con la carpeta, por seguridad habrá que desmontarla, de forma que no sea posible acceder a los datos:

usermount -u /srv/http/dav

A partir de este momento, solamente tenemos accesible /root/cryptdav, pero claro, está cifrado y por lo tanto es imposible ver el contenido de la carpeta.

Si deseamos poder modificar datos, añadir ficheros o eliminarlos, será necesario volver a montarlo:

encfs /root/cryptdav /srv/http/dav
Contraseña EncFS: 

Listo, nos conectamos con transmit, hacemos los cambios que veamos oportunos y en caso de ser necesario, por seguridad desmontamos.