我有一个特定的文件,我想监视OSX上所有应用程序的文件读取尝试。我希望能够中断请求,以便我可以决定哪些应用程序有权读取文件,哪些没有(通过查询用户或检查用户响应的缓存)。这可能与OSX API一起使用吗?如果没有,是否甚至可以获得哪些应用程序或进程读取文件的列表?
答案 0 :(得分:1)
我不是说没有办法做到这一点,但@Jonathan所说的不是它。
该API用于跟踪文件的创建,更改和销毁。值得注意的是,像Spotlight这样的工具可以在文件系统上观察新的有趣文件的活动。
但是,明智的是,阅读不是它追踪的事件之一。
即使阅读WAS跟踪,它仍然是错误的机制,因为它是事后的通知系统,不符合呼叫本身。
我非常怀疑你想要的是你所描述的方式。
使用访问控制列表,您可以限制用户级别的访问(Fred可以读取文件,但Bob不能)。这是文件本身的设置。但是没有机制允许Bobs App1读取文件,而Bobs App2则不能,因为除了执行命令之外,实际上没有“应用程序身份”的正式机制,或者无论程序“说”其名称是什么(两者都是如果有足够的动力可以被欺骗。)
然而,随意抓住达尔文的消息来源 - 毫无疑问,答案会被埋在开放式(2)电话附近的某处。
编辑,关于评论。
你想做什么?整体背景是什么?
您可能想要尝试的另一件事是使用FUSE。
FUSE是一个实用程序,让你拥有“用户空间文件系统”。人们将FUSE用于多种用途,例如读取NTFS卷或通过SSH挂载远程系统。
他们有一个简单的例子,它为您提供了一个可以为您的目的填写的骨架。
对于大多数用例,您将简单地按照系统进行操作。但是,对于OPEN,您将添加逻辑。然后,您可以将FUSE实用程序指向目录,然后“装入”。然后该目录下的所有文件都可以使用您的新行为。
我仍然不确定你将如何通过名称识别应用程序,但如果它不是一个真正的“安全”问题,只是为了本地控制,我成像你可以想出一些东西。 Activity Monitor有应用程序名称,因此它们必须可用,并且FUSE将在进程空间内运行(我认为),而不是通过某种外部机制。
所有这一切,我认为FUSE是你最好的选择,但是如果你想对用户没有做好准备的“任何文件”(如不安装FUSE)这样做可能是不合适的。如果你想做“任何文件”,你的FUSE系统需要在root用户安装,然后你只需要一个文件系统的完整“克隆”,这些文件来自正常的根“不受保护”,而那些从您的新FUSE根目录将受到保护。因此,如果有人不想使用您的FUSE系统,则可以通过实际文件位置随时使用真实文件。
答案 1 :(得分:0)
Amit Singh的着作应该非常方便。他explored几年前提供FileSystem事件的API,并提供了sample tool,允许您拦截FS事件。它是开源的!
如果我记得他的结论是正确的,他们不是官方的API,但你可以使用苹果的工具来实现你想要的。
答案 2 :(得分:0)
如果没有,是否可以获得哪些应用程序或进程读取文件的列表?
命令行工具fs_util允许您监视文件系统活动,包括读取。