2012-06-14 2 views
5

Мы хотим создать относительное простое хранилище документов, но есть некоторые требования. Моя идея состояла в том, что файл сканируется и обрабатывается отдельным инструментом/демоном, когда он сразу приходит на хранение.Как создать каталог под Linux, который ведет себя как труба

(Pseudo) DMS должен обеспечивать доступ через NFS и Samba. Как я видел до сих пор, трубы были бы хороши для передачи входящего файла на некоторые перехватчики. Но я задавался вопросом, есть ли способ создать каталог как канал. Пока я видел только именованные каналы.

Процесс, который должен принимать любой входящий файл в этом каталоге, - это скрипт PHP, который должен делать что-то вроде угадывания типа MIME, проверка CRC32 (против значения в БД) ... Кто-нибудь подскажет, как это сделать?

EDIT: Я надеюсь, что это немного яснее со следующим объяснением - Я ищу способ предоставления «конечной точки» через Samba и NFS, где файлы могут быть размещены, которые обрабатываются вирусов и мета-процесс немедленно (и, наконец, сохраняется).

+1

Вы прокладываете между процессами, а не файлами. Не уверен, что вы подразумеваете под «созданием каталога как трубы» – Attila

+0

Я думал об именованных каналах (которые можно использовать для ввода данных в, например, с помощью 'cat [file]> named_pipe' и получать данные), но это было только первый выстрел в темноте. Я ищу способ предоставить «конечную точку» через Samba и NFS, где файлы могут быть размещены, которые обрабатываются путем сканирования вирусов и мета-процесса немедленно. Это должно обеспечить обработку в реальном времени и избежать огромного потребления памяти. – rabudde

+0

Напоминает мне о sendmail * daemon. Почта переходит в папку/var/spool/mqueue, обработанную sendmail, и в конечном итоге перемещается (или удаляется). –

ответ

9

Вы можете использовать FUSE для реализации промежуточной файловой системы Linux, которая находится поверх вашей реальной файловой системы (файловой системы) и которая выполняет любые необходимо проверить данные, прежде чем, наконец, записать их на бэкэнд. Затем вы обслуживаете эту файловую систему через NFS/Samba.

Другая возможность заключается в использовании API inotify для уведомления об изменениях в дереве файловой системы и выполнения необходимых операций. Проблема с этим подходом заключается в том, что обработка будет асинхронной, поэтому вредоносные файлы будут опубликованы в течение короткого времени, пока они не будут отсканированы и удалены.

обновление: ClamFS делает именно это!

+0

Это звучит интересно, я дам инструменты попробовать на следующей неделе, танки. – rabudde

2

Вы на самом деле нуждаетесь в, чтобы быть участником SMB или NFS? Я худею, вам, вероятно, лучше писать/использовать какой-то пользовательский код сервера. SMB и NFS были предназначены для переноса обычных файлов, довольно удаленных от вашего используемого варианта.

+1

Мне действительно нужно, чтобы это было samba AND nfs, для нас нет другого выбора. – rabudde

3

Если вы правильно поняли, что вы хотите сделать, это предоставить конечным пользователям очень простой интерфейс, интегрированный в свою файловую систему. Они будут видеть обычную папку в своей операционной системе, они будут копировать и перемещать файлы, переименовывать их и т. Д. Независимо от того, что они делают в любой другой папке на своих компьютерах.

Однако эта папка не будет реальной папкой в ​​фоновом режиме. Вы хотите иметь полный контроль над операциями в этой папке. Когда они копируют файл в эту папку, вы хотите, чтобы PHP-скрипт обрабатывал это. Когда они создадут новую папку под этим специальным, другой скрипт PHP позаботится об этом.

Как предложил salva, создание интерфейса файловой системы по своему усмотрению действительно является хорошим решением; но это не быстро и нелегко. Поскольку вы упомянули PHP как свой сервер, я думаю, вам нужен подход более высокого уровня.

У вашей проблемы есть две стороны, о которых нужно заботиться: клиент и сервер. На стороне клиента вам нужна файловая система, которую легко монтировать как папку в системе posix или как диск в Windows. Есть много альтернатив для этого, Samba и NFS являются двумя из них, как вы упомянули.

Вы будете делать серверную часть этого в PHP, как я понял. Учитывая это, я бы предложил использовать WebDav вместо Samba или NFS. Это намного проще реализовать на стороне сервера. Он доступен практически для каждой современной операционной системы.Существуют даже плагины браузера для доступа к webdav, поэтому вы можете легко предоставить несколько интерфейсов для своих клиентов.

На стороне сервера, если вы используете PHP, есть библиотека php с открытым исходным кодом, которая называется sabredav. Просто для быстрого поиска в Google я даже нашел a tutorial.

В этой настройке вы можете обрабатывать файлы так, как хотите. Это может быть однокомпонентная система, встраивая веб-сервер, такой как nginx или Apache, в вашу систему на стороне PHP или предоставляемый как служба, работающая на ваших серверах.

Надеюсь, я правильно понял ваш вопрос, и это решение, которое вы искали.

UPDATE: Если вы не имеете шанс с помощью другого решения, как я предложил, и это действительно должно быть Samba и NFS; оба протокола действительно слишком много для реализации на PHP. Это будет большая нагрузка и долгосрочная головная боль.

Однако вы можете использовать обычные серверы NFS/Samba и пытаться отслеживать обновления файлов в фоновом режиме приложением. Это означает, что специальные функции, которые вы хотите предоставить, такие как пометка файлов или проверка на вирусы, будут доступны с вероятной приемлемой задержкой. Чтобы реализовать это, вы можете проверить все файлы и папки в системе и работать с измененными/новыми. Проще всего будет использовать серверы с механизмами протоколирования для каждого действия и следить за их журналами. Это может быть даже лучше, чем напрямую взаимодействовать с клиентскими машинами. Если вы правильно заархивируете свою систему, задержка между изменениями файлов и их обработкой будет действительно разумной даже в очень большой системе. Для этого nas4free может быть действительно хорошим решением, поскольку он обеспечивает множество интерфейсов из одной системы и, согласно its features page, имеет возможность syslog.

+0

Большое спасибо за ваш отличный ответ. WebDAV звучит очень интересно. Но поскольку это решение должно быть реализовано в нашей компании, я думаю, что решение salvas более твердое (кроме того, что не могут быть включены некоторые другие пост-крючки, такие как сканирование метаинформации). Я попробую попробовать, но не сейчас, потому что экспериментов не так много. Большое спасибо – rabudde

Смежные вопросы