2010-07-01 95 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允許您監視文件系統活動,包括讀取。