Desde las opciones más clásicas, como FTP, NFS o Samba, a herramientas más actualizadas, apoyadas sobretodo por la tecnología HTTP/HTTPS, que nos permitirán crear servicios de alojamiento de archivos. En el último apartado, conoceremos algún ejemplo de Sistema Operativo concebido para la gestión de almacenamiento en red (NAS).

Debemos tener en cuenta las características de las opciones para compartir ficheros más clásicas en comparación con las opciones de edición en linea y concurrencia que tenemos hoy en día, las cuales eran impensables hace no tanto tiempo, y que son una de las bases del Cloud Computing.

4.1. WebDAV(HTTP/S)

A través de los protocolos HTTP/HTTPS podemos configurar el acceso remoto a sistemas de ficheros en nuestro/s servidor/es, con protocolos más modernos que FTP. WebDAV(Web Distributed Authoring and Versioning).

WebDAV

Tal y como dice la documentación oficial de Apache, el objetivo de este protocolo (o más concretamente EXTENSIÓN DE PROTOCOLO) es conseguir que la web (http/https) permita el acceso con permisos de escritura a recursos publicados. Con él podemos hacer accesibles partes de nuestro sitio web como un directorio remoto.

Advertencia

La directiva DirectoryIndex en Apache o Autoindex en NginX para listar el contenido de un directorio del servidor suele ser una fuente de errores en combinación con WebDAV. La recomendación general es desactivar esa directiva para poder utilizar los módulos dav

4.1.1. Configuración en Apache

Los pasos a realizar, extraídos del siguiente manual, son:

  1. Activar los módulos correspondientes.

# a2enmod dav dav_fs
  1. Añadir en nuestra configuración de Apache el módulo (sobre un directorio/location) → DAV On

    WebDAV
  2. Añadir algún método de autenticación
    • ¿basic/digest?: En el ejemplo más abajo usaremos AuthBasic.

    • ¿IP?

    • Sin autenticación Acceso libre

  3. Atención a permisos/propietario

    WebDAV
  4. Limit/LimitExcept para que solo pida usuario/passwd en el caso de acceder a ficheros via dav (https://httpd.apache.org/docs/2.4/mod/mod_dav.html#page-header).

5. Activar quizá el mod_rewrite para que cargue bien el index si vamos a activar DAV desde el directorio raiz. .. code-block:: shell-session

# a2enmod rewrite

  1. Añadir todas las lineas referentes al rewrite para que en caso de acceso por web redirija a, por ejemplo, index.html. En el código más abajo está destacado.

  2. Reiniciar apache

Importante

En caso de querer dar acceso DAV desde el directorio raiz de nuestro sitio web debemos realizar algunas tareas más de configuración, sobretodo por la colisión con la desactivación de la directiva DirectoryIndex. Un ejemplo básico con todo lo comentado hasta ahora, para nuestro sitio web por defecto(sin virtualhosting), podría ser:

 1    <VirtualHost *:80>
 2        ServerAdmin webmaster@localhost
 3        DocumentRoot /var/www/html
 4        Alias /webdav /var/www/html
 5        DirectoryIndex disabled
 6        <Directory /var/www/html>
 7                Dav On
 8        <Limit GET>
 9                RewriteEngine On
10                RewriteCond %{REQUEST_METHOD} "GET"
11                RewriteCond %{REQUEST_FILENAME} -d
12                RewriteRule ^(.*)$ $1index.html [L]
13        </Limit>
14        AuthType Basic
15        AuthName "Acceso limitado"
16        AuthUserFile /etc/apache2/htpasswd
17        <LimitExcept GET POST OPTIONS>
18        Require valid-user
19        </LimitExcept>
20        </Directory>
21        ErrorLog ${APACHE_LOG_DIR}/error.log
22        CustomLog ${APACHE_LOG_DIR}/access.log combined
23    </VirtualHost>

4.1.2. Configuración en NginX

Los pasos a realizar en este caso puedes encontrarlos en la documentación oficial, son:

  1. Instalar los paquetes correspondientes.

# apt -y install nginx-extras libnginx-mod-http-dav-ext

2. Añadir en nuestra configuración las opciones correspondientes. Un ejemplo podría ser el que mostramos a continuaciónn (WEBDAVS ya que usamos HTTPS), y en el que aprovechando la directiva location dos para la misma ubicación podemos distinguir el comportamiento que queremos si accedemos a través de navegador(HTTPS) o a través de un cliente DAV:

WebDAV
  1. El resto de aspectos a tener en cuenta son muy similares a Apache.

4.1.3. Clientes de WebDAV(S)

Puedes encontrar para cualquiera de nuestros SO habituales.
  • Windows: Con el programa WinSCP

WebDAV WebDAV

4.2. FTP

FTP (File Transfer Protocol, “Protocolo de Transferencia de Archivos”), es un protocolo para la transferencia de archivos entre sistemas conectados a una red. Desde un equipo cliente se puede conectar a un servidor para descargar archivos desde él o para enviarle archivos, independientemente del sistema operativo utilizado en cada equipo. FTP está pensado para ofrecer la máxima velocidad en la conexión, pero no seguridad, ya que todo el intercambio de información, se realiza en texto plano.

Protocolo FTP

Para solucionar este problema son de gran utilidad aplicaciones como scp y sftp, incluidas en el paquete SSH, o dotar de seguridad al propio servidor ftp con una capa SSL similar a la utilizada en HTTPS, alternativas que permiten transferir archivos pero cifrando todo el tráfico.

Advertencia

El servicio FTP puede trabajar de dos maneras (puedes encontrar una información más detallada en la Wikipedia):

  • ACTIVO

  • PASIVO

Es importante conocer las características de cada una, ya que podemos encontrarnos problemas de funcionamiento dependiendo de las características de seguridad de la red bajo la que estemos trabajando. También hay que tener en cuenta que FTP es uno de los protocolos más antiguos (más incluso que HTTP) y presenta algunos problemas de seguridad y funcionamiento que hacen que sea una tecnología mucho menos utilizada que hace unos años.

4.2.1. Clientes

Un cliente FTP emplea el protocolo FTP para conectarse a un servidor FTP para transferir archivos, independientemente del SO del propio cliente o del servidor. Podemos encontrar clientes de varios tipos:

1. LINEA DE COMANDOS: Algunos clientes de FTP/SFPT básicos vienen integrados en los sistemas operativos(Windows,Linux). Ofrecen un acceso rápido y sin necesidad de instalación de ningún paquete. Las instrucciones de estos comandos son universales, independientes del SO.

Ejemplo conexión comando FTP

Truco

Puedes encontrar servidores públicos de FTP donde probar los comandos, incluso de subida de ficheros (en https://dlptest.com/ftp-test/ puedes encontrar un servidor que admite acceso “público”).

  1. INTEGRADOS EN EL NAVEGADOR: Muchos navegadores llevan integrados clientes FTP o permiten la instalación de plugins. En las versiones actuales o bien el soporte para FTP ha sido desactivado(https://www.trishtech.com/2021/04/how-to-re-enable-ftp-protocol-support-in-firefox/) o directamente ya no lo incluyen.

    Ejemplo conexión comando FTP
  2. PROGRAMAS ESPECÍFICOS: Hay disponibles clientes con más funcionalidades y opciones, tanto para Windows como para Unix/Linux o Mac. Algunos ejemplos podrían ser:

4.2.2. Servidores

En este servicio debemos prestar atención a los siguientes elementos o propiedades:
  • Instalación y configuración del servicio sobre el SO correspondiente.

  • Crear los directorios donde se ubicarán los sitios FTP, con los PERMISOS ADECUADOS.

  • Creación de grupos y de directorios públicos asociados.

  • Parámetros de conexión
    • Nº máximo de conexiones.

    • Limitar anchos de banda.

    • Limitar acceso por IP/ Hora..

  • Tipos de usuari@/autenticación.
    • Usuari@s locales

    • Usuari@s virtuales. Varias posibilidades.
      • Bases de datos (MySql..)

      • Servicios de directorio (LDAP)

    • Autorizar acceso anónimo???

  • Enjaular a l@s usuari@s (CHROOT).

  • Soporte para conexiones seguras mediante SSL(instalación de certificados).

SERVIDOR FTP EN LINUX

Utilizaremos VsFTP (manual en la web o también la documentación oficial ), teniendo en cuenta lo siguiente:

Nota

Prueba a realizar la instalación y configuración de un servidor FTP en una instancia virtualizada de Linux, con las siguientes características:
  • No permite las conexiones anónimas.

  • Funciona en modo pasivo. Determina los puertos donde se puede conectar.

  • Crea las reglas correspondientes de firewall para que permita su acceso.

  • Personaliza el mensaje de bienvenida

  • Exisitiran una seria de usuarios virtuales.

  • El servidor prohibe la conexión de algunos usuarios. Los que aparezcan en un determinado fichero (El que tu quieras).

  • Los usuarios son enjaulados. Atentos a los mensajes que proporciona al servidor.

  • El servidor funciona en modo seguro de manera forzosa.

  • Los nombre de ficheros/carpetas deben verse correctamente(acentos, eñes…)

4.3. Control de versiones

Un control de versiones es un sistema que registra los cambios realizados en archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante. Aunque su origen era el código fuente compartido, maneja cualquier tipo de archivo. A estos sistemas de almacenamiento se les suele denominar repositorios. Dos de los ejemplos más populares(trabajando ambos bajo los protocolos HTTP/HTTPS) para el control de versiones son:

Sw control de versiones

Advertencia

¿Conoces algún repositorio público en la web?¿Qué sistema de control de versiones emplean?¿Para que crees que se utilizan estos repositorios?

Hay multitud de opciones gratuitas para tener un repositorio en la web. Pero…¿Si queremos nuestro repositorio propio?. Montar nuestro propio sistema de control de versiones no es demasiado complejo. Puedes encontrar ayuda en el video a continuación o en el siguiente tutorial.


La manera de trabajar y comunicarse con el repositorio depende del programa bajo el que lo hayamos instalado. En el ejemplo de GIT el flujo de trabajo(workflow) sería algo parecido a la siguiente imagen.

Sw control de versiones

Advertencia

En los repositorios se utilizan términos como TRUNK, TAG o BRANCH. Debemos conocer su significado para entender correctamente como trabajan los sistemas de control de versiones.

Sw control de versiones

Para comunicarse con los repositorios tienes varias opciones, además de la linea de comandos, gran cantidad de Clientes GUI que nos van a facilitar el trabajo entre nuestro Working Directory y el repositorio.

Conociendo su funcionamiento, ya podemos configurar nuestro equipo para tener un WD(working directory) vinculado con cualquier repositorio publico disponible en la web.


Importante

Un buen hábito sería comenzar a usar alguna opción de control de versiones para guardar tus proyectos, trabajos o materiales. Podrías empezar por crear una cuenta en algún sitio público que ese GIT (github, gitlab, gitbook….), crees tu primer repositorio y lo conectes a un cliente GIT para trabajar con él. Piensa en las utilidades que podría tener.

4.4. Sistemas de ficheros en red

Si hablamos de redes locales (LAN) y compartir ficheros y recursos, tenemos varios sistemas de ficheros destacados:
  • Network File System (NFS): Sistemas UNIX-Linux.

  • Server Message Block (SMB/CIFS):​ Protocolo para compartir archivos, impresoras… entre sistemas Windows. Aunque es un protocolo propiedad de Microsoft, tiene algunas implementaciones libres, por ejemplo SAMBA en versiones Linux.

  • Linux incluye algunos comandos muy útiles de gestión remota de ficheros (rsync, scp…). Todas ellas y otras depende del funcionamiento de un servicio SSH.

  • Sistemas de ficheros compartidos en la nube. Ejemplos:
Compartir recursos en red Windows Linux

SAMBA es una opción bastante sencilla para poder compartir recursos entre máquinas Windows y Linux. No importa que SO sea el servidor y que SO actúe de cliente.


Nota

¿Sabrías realizar la siguientes configuraciones en un sistema en la nube?

  1. Montar tu servidor web en la nube en una sistema de ficheros EFS, conectándolo automáticamente a tu instancia EC2.

  2. ¿Sabrías además conectarte a ese sistema de ficheros desde tu equipo local?

4.5. Sistemas Operativos NAS

En este apartado nos referimos a distribuciones Linux diseñadas para almacenamiento conectado a la red NAS, siglas de Almacenamiento Conectado en Red (Network Attached Storage). Muchos de estos SSOO tienen un carácter gratuito, open-source y software libre (basado en licencia BSD) y nos permiten administrar soportes de almacenamiento accesible desde red, por ejemplo para almacenamientos masivos de información, música, backups, etc. Dos ejemplos:

Para poder practicar con estas distribuciones podemos hacer uso de la virtualización. Vamos a simular nuestro NAS, como si hubiéramos comprado uno. Para ello debemos dar los siguientes pasos:

1 Crearemos una MV
  • OpenMediaVault/FreeNAS ISO

  • Atentos-as a los requisitos y al tipo de la MV

2 Añadimos disco/s duro/s a nuestra configuración (nuestro NAS)
  • Podemos añadir los que queramos y darle estructura de RAID/LVM¿?¿

3 Configuramos la red de la MV para hacerlo pública

4 Primeras tareas
  • Crear pool

  • Usuarios/grupos

  • Configuramos el/los servicios que queramos proporcionar
    • SMB

    • WebDAV

    • FTP

    • Git

Importante

Configurar tu propio NAS instalando uno de los SO comentados en una MV, añade tantos DD virtuales como quieras y “juega” con las opciones de servicios, uso y seguridad que te ofrecen.


PROYECTO
Accede al espacio virtual del módulo y realiza el proyecto propuesto en la sección de ejercicios.