2010-07-01 70 views
1

我有一个特定的文件,我想监视所有应用程序在OSX上的文件读取尝试。我希望能够中断请求,以便我可以决定哪些应用程序有权读取文件,哪些没有(通过查询用户或检查用户响应缓存)。这可能与OSX API?如果不是,甚至有可能获得哪些应用程序或进程读取文件的列表?OSX:挂钩文件读取事件

回答

1

我不是说有没有办法做到这一点,但什么@Jonathan讲的是不是。

该API用于跟踪文件的创建,更改和销毁。值得注意的是,Spotlight之类的工具使用该工具来观察文件系统上新的有趣文件的活动。

但明智的是,阅读不是它追踪的事件之一。

即使读数跟踪,但它仍然是错误的机制,因为它是在事后通报制度,不符合调用本身线。

我认真地怀疑你想要的可能是你描述它的方式。

通过访问控制列表,你可以限制用户级访问(弗雷德可以读取该文件,但鲍勃不能)。这是文件本身的设置。但是没有机制允许Bobs App1读取文件,而Bobs App2则无法读取文件,因为除了要执行的命令之外确实没有“应用程序身份”的正式机制,或者程序“说”其名称是(无论是哪一种如果动机足够,可以被欺骗)。

然而,随意抓取达尔文源 - 毫无疑问,答案是埋在那里的某个地方开(2)调用附近。

编辑,关于评论。

你想做什么?什么是总体情况?

您可能想尝试的另一件事是使用FUSE。

FUSE是一个实用工具,让您拥有“用户空间文件系统”。人们为了许多目的使用FUSE,比如读取NTFS卷,或者通过SSH挂载远程系统。

他们有一个简单的例子,它给你一个你可以为你的目的填写的框架。

对于大多数使用情况,您将简单地遵循系统。但是,对于OPEN,您将添加您的逻辑。然后你可以将你的FUSE工具指向一个目录,并“挂载”它。然后,该目录下的所有文件都可以使用您的新行为。

我还是不知道你将如何通过名称来识别应用程序,但如果它不是一个真正的“安全”问题,只是局部控制,我想像你能拿出的东西。活动监视器有应用程序名称,所以它们必须可用,并且FUSE将在流程空间内运行(我认为),而不是通过某种外部机制。所有这一切说,我认为FUSE是你最好的选择,但如果你想这样做“任何文件”,而用户没有做好准备(比如不安装FUSE),那么这可能是不合适的。如果你想做“任何文件”,你的FUSE系统将需要在根目录下安装,然后你只需拥有一个完整的“克隆”文件系统,这些文件来自普通根目录“不受保护”,而那些从您的新FUSE根将受到保护。因此,如果有人不想使用FUSE系统,真实文件可以通过实际文件位置随时获取。

+0

是的,我通读乔纳森的链接,得出了很多相同的结论。我一直在想办法解决这个问题。当用户说可能会工作时,通过命名管道推送文件内容 - 但我不认为我可以推动EOF w/o关闭管道。也许我可以创建一个可以像管道一样的设备,但它可以通过EOF? – rampion 2010-07-02 14:07:43

+0

感谢您指向FUSE。我会检查出来的! – rampion 2010-07-04 03:31:51

0

阿米特辛格的着作应该非常方便。他explored几年前提供FileSystem事件的API,并提供了一个允许您拦截FS事件的sample tool。它是开源的!

如果我还记得他的结论正确,他们不是一个官方的API,但你可以使用苹果的工具来实现你想要什么。

0

如果没有,是否有可能获得哪些应用程序或进程读取文件的列表?

命令行工具fs_util允许您监视文件系统活动,包括读取。