2012-06-14 9 views
5

Vogliamo creare una memoria di documento semplice relativa ma ci sono alcuni requisiti. La mia idea era che un file viene scansionato e gestito da uno strumento/demone separato quando arriva immediatamente allo storage.Come creare una directory sotto Linux che si comporta come una pipe

Il DMS (pseudo) deve fornire l'accesso tramite NFS e Samba. Come ho visto finora, le pipe andrebbero bene per passare il file in arrivo ad alcuni hook. Ma mi chiedevo se c'è un modo per creare una directory come una pipe. Ho visto solo pipe con nome ancora.

Il processo, che dovrebbe prendere qualsiasi file in arrivo in questa directory è uno script PHP che deve fa qualcosa di simile tipo MIME indovinare, CRC32 controllo (contro il valore nel DB) ... Qualcuno ha un suggerimento come fare questo?

EDIT: Spero che sia un po 'più chiaro con la seguente spiegazione - Sto cercando un modo per fornire un "punto finale" tramite Samba e NFS in cui i file possono essere collocati, che sono gestite da scansione antivirus e meta di processo immediatamente (e memorizzato infine).

+1

Si passa tra i processi, non i file. Non sono sicuro di cosa intendi per "creare la directory come una pipa" – Attila

+0

Ho pensato alle pipe denominate (che possono essere utilizzate per inserire dati, cioè con 'cat [file]> named_pipe' e ottenere dati da) - ma questo era solo un primo colpo al buio. Sto cercando un modo per fornire un "endpoint" tramite Samba e NFS in cui i file possano essere posizionati e gestiti immediatamente dalla scansione antivirus e dal meta processo. Questo dovrebbe fornire un'elaborazione in tempo reale ed evitare un enorme consumo di memoria. – rabudde

+0

Mi ricorda il demone sendmail *. La posta entra nella cartella/var/spool/mqueue elaborata da sendmail e viene spostata (o rimossa) alla fine. –

risposta

9

È possibile utilizzare FUSE per implementare un file system Linux intermedio che si trova sopra il proprio file system reale (il file system di backend) e che esegue qualsiasi la convalida necessaria sui dati prima di scriverla definitivamente sul back-end. Quindi, servi quel file system tramite NFS/Samba.

Un'altra possibilità è utilizzare l'API inotify per ricevere una notifica delle modifiche su una struttura del file system ed eseguire le operazioni richieste. Il problema con questo approccio è che l'elaborazione sarà asincrona, quindi i file malware verranno pubblicati per un breve periodo di tempo fino alla loro scansione e cancellazione.

aggiornamento: ClamFS fa esattamente questo!

+0

Sembra interessante, darò un'occhiata agli strumenti la prossima settimana, carri armati. – rabudde

2

In realtà è necessario essere una condivisione SMB o NFS? Probabilmente stai meglio scrivendo/usando un codice server personalizzato. SMB e NFS sono stati progettati per trasferire file normali, piuttosto distanti dal caso d'uso

+1

In realtà ho bisogno che sia samba e nfs, non c'è altra opzione per noi. – rabudde

3

Se ho capito bene, ciò che si vuole fare è fornire agli utenti finali un'interfaccia molto semplice che sia integrata nel loro file system. Vedranno una cartella ordinaria sul loro sistema operativo, copieranno e spostano i file, li rinomineranno, ecc. Qualunque cosa stiano facendo su qualsiasi altra cartella sui loro computer.

Tuttavia, questa cartella non sarà una cartella reale in background. Si desidera avere il controllo completo sulle operazioni su questa cartella. Quando copiano un file in questa cartella, vuoi uno script PHP per gestirlo. Quando creano una nuova cartella sotto questa speciale, un altro script PHP si prenderà cura di essa.

Come suggerito da salva, la creazione di un'interfaccia del file system per conto proprio è davvero una buona soluzione; ma non è né veloce né facile. Dal momento che hai citato PHP come back-end, penso che tu voglia un approccio di alto livello.

Il tuo problema ha due lati da considerare: client e server. Sul lato client, è necessario un file system che sia facile da montare come una cartella su un sistema posix o come un'unità su Windows. Ci sono molte alternative per questo, Samba e NFS sono due di quelli che hai menzionato.

Lo farò da server in PHP, come ho capito. Considerando questo, suggerirei di usare WebDav invece di Samba o NFS. È molto più facile da implementare sul lato server. È disponibile su quasi tutti i sistemi operativi moderni.Esistono persino plug-in per browser per l'accesso a webdav in modo da poter fornire facilmente più interfacce per i tuoi clienti.

Sul lato server, se si utilizza PHP, esiste una libreria php open source denominata sabredav. Con una semplice ricerca su Google, ho persino trovato a tutorial per questo.

In questa configurazione, è possibile gestire i file nel modo desiderato. Questo può essere un sistema a macchina singola incorporando un server Web come nginx o Apache nel tuo sistema per il lato PHP o fornito come servizio in esecuzione sui tuoi server.

Spero di aver capito correttamente la tua domanda e questa è la soluzione che stavi cercando.

UPDATE: Se non si ha la possibilità di utilizzare una soluzione diversa, come ho suggerito e deve veramente essere Samba e NFS; entrambi i protocolli sono davvero troppo da implementare in PHP. Sarà un grosso peso e un mal di testa a lungo termine.

Tuttavia, è possibile utilizzare i normali server NFS/Samba e provare a monitorare gli aggiornamenti dei file in background con l'applicazione. Ciò significa che le funzionalità speciali che si desidera fornire come la codifica dei file o la scansione antivirus saranno disponibili con una latenza probabilmente accettabile. Per implementarlo, puoi controllare tutti i file e le cartelle sul sistema e lavorare su quelli modificati/nuovi. Una cosa più semplice sarebbe utilizzare server con meccanismi di registrazione per ogni azione e seguendo i loro registri. Questo può essere anche meglio di interfacciare direttamente le macchine client. Se si esegue correttamente l'architettura del proprio sistema, la latenza tra le modifiche dei file e l'elaborazione delle stesse sarà davvero ragionevole anche su un sistema molto grande. Per questo, nas4free può essere una soluzione davvero buona in quanto fornisce molte interfacce da un singolo sistema e in base a its features page, ha capacità syslog.

+0

Grazie mille per la tua grande risposta. WebDAV sembra molto interessante. Ma poiché questa soluzione deve essere implementata nella nostra azienda, penso che la soluzione di Salvas sia più solida (a parte il fatto che non è stato possibile includere altri hook di post come la scansione di meta-informazioni). Darò una soluzione alla tua soluzione, ma non ora perché non c'è molto tempo per gli esperimenti. Grazie davvero – rabudde

Problemi correlati