2009年8月3日 星期一

Linux Kernel - fanotify 更全面性的檔案監控機制

Standard
若是有在追 kernel development 的動態,就可以發現到 Linux Kernel 將在 2.6.31 引入 fanotify 這個新特性,其本意是『fscking all notification system』,目的在實現更全面性的檔案監控機制。除了可監聽 file description 的 events,亦可以當 open 和 write 的 event 觸發時決定是否給予存取,對做安全控管的程式有很大的幫助。

當初 fanotify 會被提出是就因為要保護系統,供惡意程式偵測軟體和一些系統安全軟體所使用,又因為了達成該需求,使用舊有的監控機制會效能不彰,而重新實作了 fanotify,以排除舊有機制實作過於複雜的缺點。

fanotify 分成兩個部份『Directed』和『Global』, Directed 的部份就如同 inotify/dnotify,可以單獨去針對特定 inode 進行 event 監聽;而 Global 部份提供了對整個系統進行監聽 event 的機制,在意義上對於真正完整的檔案監控有莫大的幫助。

至於 kernel/user-space 的溝通實作上,fanotify 採用的方法是 socket protocol,屆時會有一個新的 PF_FANOTIFY family 被提供,讓 user-space 的應用程式所呼叫使用。

關於 fanotify 的 kernel patch 可以在此找到:
http://people.redhat.com/~eparis/fanotify/

或是可以參考 kernel.org 上的兩則 commit logs:
fsnotify: unified filesystem notification backend
fsnotify: generic notification queue and waitq