代码之家  ›  专栏  ›  技术社区  ›  rampion

osx:hook文件读取事件

  •  1
  • rampion  · 技术社区  · 15 年前

    我有一个特定的文件,我想监视OSX上所有应用程序的文件读取尝试。我希望能够中断请求,这样我就可以决定哪些应用程序有权读取该文件,哪些没有权限(通过查询用户或检查用户响应的缓存)。OSX API是否可以实现这一点?如果没有,是否可以获取哪些应用程序或进程读取文件的列表?

    3 回复  |  直到 12 年前
        1
  •  1
  •   Will Hartung    15 年前

    我不是说没办法这么做,但@jonathan所说的不是。

    该API用于跟踪文件的创建、更改和销毁。值得注意的是,这个工具被Spotlight等工具用来监视文件系统上新的、有趣的文件的活动。

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

    即使跟踪了读取,它仍然是错误的机制,因为它是事后通知系统,与调用本身不一致。

    我真的很怀疑你想要什么可能是你描述它的方式。

    使用访问控制列表,可以限制用户级别的访问(Fred可以读取文件,Bob不能)。这是文件本身的设置。但是没有允许bobs app1读取文件的机制,而bobs app2不能,因为实际上没有正式的“应用程序标识”机制可以执行命令之外的命令,或者程序“说”它的名称(如果有足够的动机,这两者都可以被欺骗)。

    然而,请随意爬行达尔文的资料来源——毫无疑问,答案就藏在靠近公开电话的某个地方。

    编辑,关于评论。

    你想做什么?总体背景是什么?

    另一件你可能想尝试的事情是使用保险丝。

    fuse是一个让您拥有“用户空间文件系统”的实用程序。人们使用fuse的目的很多,比如读取NTFS卷,或者通过ssh安装远程系统。

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

    对于大多数用例,您只需遵从系统即可。但是,对于open,您将添加逻辑。然后您可以将fuse实用程序指向一个目录,并“挂载它”。然后该目录下的所有文件都可以使用您的新行为。

    我仍然不确定你将如何通过名字识别应用程序,但如果这不是一个真正的“安全”问题,只是为了本地控制,我想你可以想出一些办法。活动监视器有应用程序名称,所以它们必须是可用的,fuse将在进程空间内运行(我认为),而不是通过一些外部机制运行。

    尽管如此,我认为fuse是你最好的选择,但如果你想在用户没有准备的情况下(比如不安装fuse)对“任何文件”执行此操作,可能是不合适的。如果您想做“任何文件”,您的fuse系统需要安装在根目录下,然后您只需拥有文件系统的完整“克隆”,这些文件来自正常根目录下的“未保护”,而来自新fuse根目录下的文件将受到保护。因此,如果有人不想使用Fuse系统,那么可以通过实际的文件位置很容易地获得真实的文件。

        2
  •  0
  •   Jonathan    15 年前

    阿米特·辛格的著作应该非常有用。他 explored 几年前提供文件系统事件并提供 sample tool 这样可以截获fs事件。它是开源的!

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

        3
  •  0
  •   Gabriel Roth    14 年前

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

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