Retirando documentos antiguos

Desde hace un par de semanas he estado ocupado migrando las herramientas que usamos en la empresa para acceder a los documentos.

De montajes NFS a servicios como Nextcloud podría titularse esta entrada pero la cosa va un poco más allá.

Hace años que los puestos de trabajo en la empresa, que usan Linux, tienen acceso a dos fuentes de documentos: la personal en la carpeta /home/usuario/Documentos y la compartida con los demás en /home/usuario/Compartidos. Usando técnicas de automontaje (autofs) y acceso vía red (NFS) todo ha ido más o menos bien. En algunos casos se han presentado problemas con los permisos de acceso debido a máscaras erróneas (umask) o a pereza de los usuarios al crearlas.

El caso es que de un tiempo a esta parte he tenido que incluir dos máquinas con Windows y ahí sí que se ha torcido la cosa. No soy experto en sistemas de Microsoft, procuro evitarlos en lo posible porque su diseño es bastante egoísta y un tanto mezquino. Su negocio consiste en que no abandones su negocio, obviamente, por lo que siempre hay que andar con licencias, renovaciones y magias varias para que interactúen con corrección.

Podría decir que los sistemas Microsoft son la excusa para el cambio y estaría faltando a toda la verdad. Lo cierto es que son miles los archivos que mis usuarios han acumulado en un par de décadas, que no tienen uso práctico años ha y que, salvo excepciones muy puntuales, son ignorados por ellos.

Pero el sistema no les ignora: las copias de seguridad, el espacio en disco y el ancho de banda siguen siendo empleados en tener ese monstruoso árbol de directorios casi desaprovechado.

De ahí mi pretensión de migrarles al un sistema como Nextcloud:

  • Se dispone de un acceso web a los archivos, desde varios tipos de dispositivos además.
  • Pueden ser indexados con facilidad para buscar en su contenido; hay disponibles varios motores de búsqueda.
  • Es más fácil compartir entre compañeros sin riesgo de que te eliminen o alteren tu trabajo por error. Incluso compartir con gente de fuera con facilidad y bastante información sobre el acceso.
  • Se simplifica el uso en diferentes sistemas operativos al pasar a emplear un programa cliente muy extendido o un protocolo estándar como (webdav).

He cometido el error de menospreciar el tamaño de los datos implicados y he provocado, al principio, problemas innecesarios. Según el recuento el número de documentos asciende a unos 270.000, de los cuales unos 230.000 llevan más de un año sin acceso ni modificación. Así que he pensado que para no triturar al servidor ahora ni en el futuro seguir cierto plan y crear un archivo con esos históricos fuera del circuito normal de ficheros en red.

  1. Crear un servidor virtual con Apache que me sirva de histórico de archivos.
  2. Efectuar una copia de todo el árbol de documentos compartidos (para empezar) en dicho servidor.
  3. Configurar el indexado bonito en el servidor web (módulo mod_autoindex).
  4. Proteger el acceso empleando el servidor LDAP.

Más adelante tengo pensado dividirlo en grupos por tipo dado que hay documentos e imágenes mezclados al mismo nivel y añadirle unas miniaturas visuales siempre que sea posible. Me he encontrado algunos documentos en formato tan antiguos que suponen un problema por falta de herramientas activas.

La estructura base del servidor web

Como me he encontrado con varios grupos de documentos he empezado por situarlos en carpetas distintas:

── Documentos
│   ├── Alfredo
│   └── Compartidos
└── Manuales técnicos
├── Canon antigua
├── canon-lbp6670
└── fotocopiadora

Por un lado tenemos los documentos propiamente dichos, en los que encontramos los compartidos y los de un usuario especial que tiene decenas de miles y requiere un tratamiento especial.

Por otro resulta que he ido guardando la documentación técnica de algunas de las máquinas más complicadas, como las fotocopiadores departamentales, y para que sean accesibles a todos las he añadido en su propia carpeta. Creo que este esquema es escalable así que lo voy a dejar así.

El indexado automático de Apache

Para que todo el sitio tenga al menos un aspecto coherente y algunas características comunes empleo el módulo de Apache mod_autoindex con la siguiente configuración:

<Directory /var/www/html/docs.venexma.net>   
Options +Indexes
IndexIgnore css include images
IndexOptions Charset=UTF-8 FancyIndexing FoldersFirst
HeaderName /include/HEADER.html
ReadmeName /include/FOOTER.html
Require all granted
</Directory>

He añadido un directorio include y otro images donde he situado dos textos HTML para encabezado y pie de página en el primero, y el logotipo en el segundo.

Reforzando la seguridad

Y ahora viene cuando tenemos que poner ciertos límites e intentar asegurarnos de que el contenido está más o menos seguro.

Los documentos se sirven desde un servidor interno, accesible inicialmente sólo desde la intranet aunque he creado un acceso vía proxy desde la máquina que controla las ideas y venidas hacia/desde la red.

Los controles son:

  1. Se fuerza siempre una conexión cifrada en el acceso al servidor web, a cualquiera de ellos. Gracias a Let’s Encrypt dispongo de certificados firmes y así están repartidos entre las diferentes fuentes.
  2. Desde el exterior se solicita, una vez cifrada la comunicación, un usuario y una contraseña que son validados contra un directorio LDAP interno. Aquí el punto de fallo es alto debido a la propia naturaleza humana.
  3. En el servidor interno se asignan acceso libre a la parte de manuales técnicos, limitada a un usuario válido en los documentos compartidos y se pide una cuenta concreta para entrar en los documentos de un usuario especial que tiene montañas de archivos.

El siguiente es sólo un ejemplo de la configuración que acabo de citar:

<Directory /var/www/html/docs.empresa.net/Documentos/Compartidos>             
  AuthType Basic
AuthName "Introduzca usuario y contraseña"
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://ldap.empresa.net:389/ou=users,dc=empresa,dc=net?uid"
  Require valid-user
</Directory>

<Directory /var/www/html/docs.empresa.net/Documentos/Usuarios/alfredo>
...
Require user alfredo
</Directory>