Webfs: Compartir archivos por HTTP

Ayer me baje de los servidores de GPL Tarragona unos videos de unas jornadas de bulma que habiamos puesto a disposición de todos. Lo baje en la misma universidad, utilice wget ya que estan disponibles a través del servidor web, es decir, HTTP… y me bajo todo a una velocidad de 1 Mega por segundo.

Antes siempre que tenia que bajarme algo del servidor en la universidad usaba sFTP (SSH), cosa que esta bien si se tratase de archivos privados ya que usa encriptación, pero para el resto de casos es terrible, la velocidad es muy inferior. Así que quedé encantado con la posibilidad de bajar archivos por HTTP o incluso de compartirlos, asi que hoy me he puesto a hacer una rapida búsqueda por el portage de Gentoo y he descubierto una pequeña maravilla: WebFS

Mmmm…. estaba empezando a escribir sobre webfs cuando me he dado cuenta que mejor lo hago en GPL Tarragona. Luego os pongo un link al artículo aqui 😉

Actualización Ya he escrito el artículo: Compartir directorios con webfs:

Webfs es un servidor web muy simple que permite acceder a cualquier tipo de contenido estático, es decir, nada que ver con servidores web de la categoría de Apache. Ni tan siquiera dispone de archivo de configuración, todas sus funcionalidades se pueden controlar por parámetro. Entonces… ¿Qué tiene de interesante webfs?

¿Cuantas veces nos ha pasado que queremos pasar algún archivo a un amigo por la red usando GNU/Linux y no tenemos nada configurado para llevarlo a cabo? A mi me ha pasado en más de una ocasión y suele ser engorroso ponerte a configurar un servidor FTP o Samba.

Es más, ¿Cuantas veces ha pasado que queremos pasar un archivo a otra persona desde un GNU/Linux a un sistema MS Windows y el usuario no tiene ni idea de que es un cliente FTP? Aquí siempre hay 2 opciones:

a) Le explicas que es un FTP y os bajais un cliente de FTP.
b) Bajas tu un cliente de FTP y pasas el archivo sin explicaciones 😛

En función de quien es el usuario es muy probable que si se elige la opción a) al cabo de media hora acabemos saltando a la opción b).

¿En que nos puede ayudar webfs? Vayamos por puntos:

  1. Puedes compartir cualquier directorio de tu sistema GNU/Linux con un comando, por ejemplo:
    webfsd -F -r /home/usuario/peliculas -p 2000
    

    Esto indica que no queremos que se ponga en segundo plano como demonio (-F), queremos compartir el directorio “/home/usuario/peliculas” y debe escuchar por le puerto 2000. Para pararlo basta hacer ctrl+c. Si quitamos el -F, al ejecutar webfsd automáticamente nos quedará libre la terminal y se ejecutará en segundo plano, para pararlo tendremos que ejecutar “killall webfsd” o “kill pid_webfsd“.

  2. ¿Que ordenador no tiene hoy en día un navegador? ¡Prácticamente cualquier sistema operativo dispone de un navegador web! Por tanto desde el otro ordenador podremos abrir el navegador y apuntar a nuestro servidor: http://[nuestra_ip]:2000/

    Esto nos mostrará un listado de los directorios y ficheros que tenemos en “/home/usuario/peliculas”, podremos elegir el fichero que queramos y descargarlo. Incluso podríamos usar gestores de descarga para poder resumir/reanudar, como el wget:

    wget -c http://192.168.0.33:2000/accion/ToyStory2.avi
    

    El archivo se descarga en el lugar donde se ejecute wget, en caso de que queramos pararlo podemos presionar ctrl+c y para reanudar más adelante, en el mismo directorio se vuelve a ejecutar wget pero con el modificador “-c” y así completará el archivo que habíamos dejado a medias.

Alguien podría decir: ¡Pero es que yo voy a pasar el archivo a través de una red pública donde hay más usuarios y no quiero que estos se aprovechen y accedan a lo que comparto! Hay solución:

webfsd -F -r /home/usuario/peliculas -p 2000 -busuario:password

De esta forma cuando alguien intente acceder al servidor se le preguntará por un usuario/password y debe especificar el mismo que hayamos indicado al ejecutar webfsd (no es necesario que corresponda a un usuario real del sistema).

Es más, incluso es posible utilizar SSL y hacer que las comunicaciones estén encriptadas. Con esto perderemos velocidad, pero ganamos en privacidad y mantenemos la flexibilidad. Esta característica no he conseguido que funcione:

webfsd -S -C /etc/apache2/conf/ssl/server.crt -F -r ./ -p 2000

Es necesario disponer de un certificado para que pueda realizar la encriptación, estos certificados los podemos generar nosotros mismos con OpenSSL:

openssl genrsa -out domainname.key 1024 
openssl req -new -key domainname.key -out domainname.csr 
openssl x509 -req -days 36000 -in domainname.csr -signkey domainname.key -out domainname.crt

Con esto generamos primero una llave RSA no protegida por ningún password (si nos roban esto, podran desencriptar nuestras comunicaciones con esta llave o hacerse pasar por nosotros), a continuación creamos la petición de certificado y finalmente creamos el certificado firmado por nosotros mismos (en sitios de comercio electrónico los certificados suelen ser firmados por entidades certificadoras, las cuales cobran por hacer esto… aunque tb hay webs que firman certificados de prueba temporales como FreeSSL).

Si intento acceder con Mozilla a “https://localhost:2000” me indica: “Mozilla and localhost cannot communicate securely because they have no common encryption algorithms”. Si alguien consigue hacerlo funcionar agradeceria que añadiese algun comentario al artículo.

¿Qué os parece webfs? ¿Utilizáis algún otro método para compartir archivos? Seria interesante integrarlo en gnome, concretamente el navegador de disco nautilus, utilizando los nautilus-scripts. Se me ocurre ahora mismo un método:

1) Tener un directorio que siempre es compartido, por ejemplo /home/usuario/Desktop/shared/
2) Al iniciar la sesión en gnome se ejecuta automáticamente webfs: webfsd -r /home/usuario/Desktop/shared -p 2000
3) Hacer un nautilus script que permita compartir carpetas y lo que hara en realidad es un enlace simbólico dentro de shared/ que apunta al directorio que hemos indicado. Así podremos compartir varios directorios con una única instancia de webfs. También podriamos hacer que se añadiese un emblema para marcar esa carpeta como compartida.
4) Para dejar de compartir una carpeta:
   a) Hacer un nautilus script, vas a un directorio compartido, lo seleccionas y ejecutas el “descompartir”, el script borra el enlace simbólico y quita el emblema.
   b) El usuario puede borrar directamente el enlace de la carpeta shared/. Esto implica que no se pueda quitar automáticamente el emblema en el caso de que se pueda implementar esto.

La idea queda en el aire 😉

2 thoughts on “Webfs: Compartir archivos por HTTP

Leave a Reply

Your email address will not be published. Required fields are marked *