2012-06-14 107 views
5

我们希望创建一个相对简单的文档存储,但有一些要求。我的想法是,当文件立即到达存储器时,文件被扫描并由独立的工具/守护进程处理。 (伪)DMS应该提供通过NFS和Samba的访问。正如我迄今为止所看到的,管道可以很好地将传入的文件传递给一些钩子。但我想知道是否有办法创建一个目录作为管道。我只看到了命名管道。如何在Linux下创建一个类似管道的目录

应该把这个目录中的任何传入文件的过程是一个PHP脚本,应该做一些类似于MIME类型猜测,CRC32检查(针对数据库中的值)...有没有人有提示如何做到这一点?

编辑:我希望它与下面的解释更清楚一点 - 我正在寻找一种方式来提供通过Samba和NFS的“端点”里的文件可以放置由病毒扫描和元加工处理立即(并最终存储)。

+1

您在进程之间管道,而不是文件。不知道你的意思是“将目录创建为管道” – Attila

+0

我想到了命名管道(可用于将数据放入,即使用'cat [file]> named_pipe'并从中获取数据) - 但这只是一个第一枪在黑暗中。我正在寻找一种方法来通过Samba和NFS提供一个“端点”,其中可以放置文件,这些文件可以立即通过病毒扫描和元进程进行处理。这应该提供实时处理并避免巨大的内存消耗。 – rabudde

+0

提醒我sendmail *守护进程。邮件进入由sendmail处理的/ var/spool/mqueue文件夹,并最终移动(或删除)。 –

回答

9

您可以使用FUSE实现位于真实文件系统(后端文件系统)之上的中间Linux文件系统,该文件系统执行在最终将其写入后端之前,您需要验证数据。然后,通过NFS/Samba提供该文件系统。

另一种可能性是使用inotify API在某些文件系统树上通知更改并执行所需的操作。这种方法的问题是处理将是异步的,所以恶意软件文件将被短时间发布,直到它们被扫描和删除。

更新ClamFS确实如此!

+0

听起来很有趣,下周我会给这些工具一个坦克。 – rabudde

2

您是否确实需要它是SMB还是NFS共享?我认为你可能最好写/使用一些自定义的服务器代码。 SMB和NFS旨在传输普通文件,与您的使用案例相距甚远

+1

我实际上需要它是samba和nfs,没有其他选择。 – rabudde

3

如果我正确地理解了你,你想要做的是为最终用户提供一个集成到他们文件系统的非常简单的界面。他们将在他们的操作系统上看到一个普通的文件夹,他们将复制和移动文件,重命名它们等。无论他们在计算机上的任何其他文件夹上做什么。

但是,该文件夹在后台将不是真实的文件夹。您希望完全控制此文件夹上的操作。当他们将文件复制到此文件夹中时,您需要一个PHP脚本来处理该文件。当他们在这个特殊的文件夹下创建一个新文件夹时,另一个PHP脚本会照顾它。

正如salva建议的那样,自己创建一个文件系统接口是一个很好的解决方案;但它不是一个快速也不容易。既然你提到PHP是你的后端,我认为你需要更高层次的方法。

您的问题有两个方面需要注意:客户端和服务器。在客户端,您需要一个文件系统,该文件系统可以很容易地在Windows系统上作为文件夹挂载,或者作为Windows上的驱动器挂载。有很多选择,Samba和NFS就是你提到的其中两个。按照我的理解,你将在PHP中使用它的服务器端。考虑到这一点,我建议使用WebDav而不是Samba或NFS。在服务器端实现起来要容易得多。它几乎可以在每个现代操作系统上使用。甚至还有用于webdav访问的浏览器插件,因此您可以轻松地为客户提供多种界面。

在服务器端,如果您使用PHP,有一个开源的php库,名为sabredav。只需在Google上快速搜索,我甚至找到了a tutorial

在此设置中,您可以按照自己想要的方式处理文件。这可以是一个单机系统,通过将诸如nginx或Apache之类的Web服务器嵌入到PHP系统的系统中,或者作为服务器上运行的服务提供。

我希望我能正确理解你的问题,这是你正在寻找的解决方案。

更新: 如果您没有机会使用像我建议的不同解决方案,它确实必须是Samba和NFS;这两种协议在PHP中都很难实现。这将是一个很大的负担和长期头痛。

但是,您可以使用普通的NFS/Samba服务器,并尝试使用您的应用程序在后台监视文件更新。这意味着您想要提供的特殊功能(例如文件标记或病毒扫描)将以可接受的延迟提供。为了实现这一点,你可以检查系统上的所有文件和文件夹,并修改/新的文件和文件夹。更容易的事情是使用具有记录机制的服务器来执行每个操作并遵循其日志。这可能比直接连接客户端机器更好。如果您正确地构建您的系统,即使在非常大的系统上,文件修改和处理它们之间的延迟也将非常合理。为此,nas4free可以是一个非常好的解决方案,因为它提供了来自单个系统的许多接口,并且根据its features page,它具有系统日志功能。

+0

非常感谢您的出色答案。 WebDAV听起来很有趣。但是,由于这个解决方案必须在我们公司实施,我认为salvas解决方案更加稳固(除了不能像扫描元信息那样包含一些其他的post hook)。我会试试你的解决方案,但现在不行,因为没有太多时间进行实验。真的感谢 – rabudde

相关问题