2012-06-14 13 views
5

Queremos crear un almacenamiento de documentos relativamente simple, pero existen algunos requisitos. Mi idea era que un archivo sea escaneado y manejado por una herramienta/daemon por separado cuando llegue al almacenamiento de inmediato.Cómo crear un directorio en Linux que se comporte como un conducto

El (pseudo) DMS debe proporcionar acceso a través de NFS y Samba. Como he visto hasta ahora, las tuberías estarían bien para pasar el archivo entrante a algunos ganchos. Pero me preguntaba si hay una manera de crear un directorio como una tubería. Solo he visto tubos con nombre.

El proceso que debe tomar cualquier archivo entrante en este directorio es un script PHP que debe hacer algo como adivinación tipo MIME, verificación CRC32 (contra valor en DB) ... ¿Alguien tiene una pista de cómo hacer esto?

EDIT: espero que sea un poco más claro con la siguiente explicación - Estoy buscando una manera de proporcionar un "punto final" a través de Samba y NFS donde los archivos pueden ser colocados de forma que son manejados por el análisis de virus y el proceso de meta inmediatamente (y almacenado finalmente).

+1

Se canaliza entre procesos, no archivos. No estoy seguro de lo que quiere decir con "crear un directorio como un conducto" – Attila

+0

Pensé en conductos con nombre (que pueden usarse para poner datos, es decir, con 'cat [file]> named_pipe' y obtener datos de) - pero esto era solo un primer disparo en la oscuridad. Estoy buscando una forma de proporcionar un "punto final" a través de Samba y NFS, donde se pueden ubicar los archivos que se procesan mediante el escaneo de virus y el metaproceso de inmediato. Esto debería proporcionar un procesamiento en tiempo real y evitar un gran consumo de memoria. – rabudde

+0

Me recuerda a sendmail * daemon. El correo va a la carpeta/var/spool/mqueue procesada por sendmail y finalmente se mueve (o elimina). –

Respuesta

9

Puede usar FUSE para implementar un sistema intermedio de archivos Linux que se encuentra sobre su sistema de archivos real (el sistema de archivos de fondo) y que realiza la validación que necesita en los datos antes de finalmente escribirlos en el back-end. Luego, usted sirve ese sistema de archivos a través de NFS/Samba.

Otra posibilidad es utilizar la API inotify para recibir notificaciones de los cambios en algún árbol del sistema de archivos y realizar las operaciones requeridas. El problema con este enfoque es que el procesamiento será asíncrono, por lo que los archivos de malware se publicarán durante un breve período de tiempo hasta que se escaneen y eliminen.

actualización: ClamFS hace exactamente eso!

+0

Eso suena interesante, probaré las herramientas la próxima semana, tanques. – rabudde

2

¿De verdad necesita para ser un recurso compartido SMB o NFS? Estoy delgado, es mejor que estés escribiendo/usando algún código de servidor personalizado. SMB y NFS fueron diseñados para transferir archivos normales, bastante alejados de su caso de uso

+1

Realmente necesito que sea samba Y nfs, no hay otra opción para nosotros. – rabudde

3

Si te entendí correctamente, lo que quieres hacer es proporcionar a los usuarios finales una interfaz muy fácil que esté integrada a su sistema de archivos. Verán una carpeta común en su sistema operativo, copiarán y moverán archivos, los cambiarán de nombre, etc. Lo que sea que estén haciendo en cualquier otra carpeta en sus computadoras.

Sin embargo, esta carpeta no será una carpeta real en el fondo. Desea tener control total sobre las operaciones en esta carpeta. Cuando copian un archivo en esta carpeta, quiere que un PHP Script lo maneje. Cuando crean una nueva carpeta bajo esta especial, otra secuencia de comandos PHP se encargará de ello.

Como Salvador había sugerido, crear una interfaz de sistema de archivos por su cuenta es realmente una buena solución; pero no es ni rápido ni fácil. Como mencionaste PHP como tu back-end, creo que quieres un enfoque de mayor nivel.

Su problema tiene dos lados que atender: el cliente y el servidor. En el lado del cliente, necesita un sistema de archivos que sea fácil de montar como una carpeta en un sistema POSIX o como un disco en Windows. Hay muchas alternativas para esto, Samba y NFS son dos de ellos como usted mencionó.

Harás parte del servidor en PHP, según entendí. Teniendo esto en cuenta, sugeriría usar WebDav en lugar de Samba o NFS. Es mucho más fácil de implementar en el lado del servidor. Está disponible en casi todos los sistemas operativos modernos.Incluso hay complementos de navegador para acceso webdav para que pueda proporcionar múltiples interfaces para sus clientes muy fácilmente.

En el lado del servidor, si usa PHP, hay una biblioteca php de código abierto llamada sabredav. Con solo una búsqueda rápida en Google, incluso he encontrado a tutorial para esto.

En esta configuración, puede manejar archivos de la manera que desee. Puede ser un sistema de una sola máquina insertando un servidor web como nginx o Apache en su sistema para PHP o como un servicio que se ejecuta en sus servidores.

Espero haber entendido bien su pregunta y esta es la solución que estaba buscando.

ACTUALIZACIÓN: Si usted no tiene la oportunidad de utilizar una solución diferente, como lo sugerido y lo que realmente tiene que ser Samba y NFS; ambos protocolos son realmente demasiado para implementar en PHP. Será una gran carga y un dolor de cabeza a largo plazo.

Sin embargo, puede utilizar servidores NFS/Samba normales e intentar controlar las actualizaciones de archivos en segundo plano con su aplicación. Esto significa que las características especiales que desea proporcionar, como el etiquetado de archivos o el escaneo de virus, estarán disponibles con una latencia probablemente aceptable. Para implementar esto, puede ir con la comprobación de todos los archivos y carpetas en el sistema y trabajar en los modificados/nuevos. Una cosa más fácil sería usar servidores con mecanismos de registro para cada acción y seguir sus registros. Esto puede ser incluso mejor que interconectar máquinas cliente directamente. Si diseña su sistema correctamente, la latencia entre las modificaciones de archivos y su procesamiento será realmente razonable incluso en un sistema muy grande. Para esto, nas4free puede ser una solución realmente buena, ya que proporciona muchas interfaces desde un solo sistema y de acuerdo con its features page, tiene la capacidad de syslog.

+0

Muchas gracias por su excelente respuesta. WebDAV suena muy interesante. Pero como esta solución debe implementarse en nuestra compañía, creo que la solución de salvas es más sólida (aparte de que no se podrían incluir otros ganchos de correo como el escaneo de metainformación). Voy a probar tu solución, pero no ahora porque no hay mucho tiempo para los experimentos. Realmente gracias – rabudde

Cuestiones relacionadas