胡雯 李燕 趙海廷


引言:本文以Linux系統為平臺,深入研究了文件系統監控技術的方法,并通過inotify程序實現其對所監控文件的報警功能,為文件系統的安全保護策略提供供參考依據。
一、引言
隨著計算機系統安全技術的發展,涉及企業商業機密以及決策信息的文件已成為安全監控的新目標。以往對文件系統采用的監控技術大部分屬于“辦公自動化方法”,將文件集中管理,對文件操作不便且不能有效監控和防止文件的對外傳播。操作系統中具備的文件系統的功能較少,僅限于對文件的保護性檢測,對文件的具體操作等記錄不詳,鑒于這種狀況,本文選擇具有較高安全性的Linux操作系統平臺,使用inotify技術對文件系統的安全監控進行研究。
二、文件監控系統
文件監控系統一般主要由管理終端(Keeper)和監控終端(Monitor)組成。Keeper端和Monitor端通過網絡相連,盡量使用專用實現管理終端的功能。監控系統為用戶提供對重要文件的安全保護。
文件監控系統由兩個模塊組成,分別是監控模塊,還原模塊。還原模塊嵌入到Keeper端,監控模塊式嵌入到Monitor端。見下圖1。
圖1 監控系統邏輯結構
首先,管理者將要監控的文件加入到Monitor端的監控文件列表,進行實時監控時,先將Monitor端的監控文件一次性備份到Keeper端,讓Keeper端作為備份服務器;同時將監控文件的路徑寫入到數據庫。之后,監控模塊開始工作,當檢測到文件被誤刪、篡改等非法操作時,立即對Keeper端發送警告信息,管理者針對這非法操作實行禁止或者允許策略。當選擇允許策略時,監控系統只做記錄,不還原被修改文件;當選擇禁止策略時,監控系統根據數據庫自動還原Monitor端被破壞的文件。
三、監控模塊
監控模塊的主要功能包括檢測、防修改、告警及自我保護[1]。
檢測功能對需要進行監控的文件及目錄進行如增、刪、改、查等操作的檢測,一旦發現就根據用戶策略的設置向管理者進行告警處理。
防修改功能包對特定文檔或重要文件進行設定,凡是檢測到非法操作的文件都會無條件的恢復此文檔內容或文件數據。
告警功能根據用戶策略對事件進行實時告警。事件包括針對文件的非法操作、監控系統的功能啟用/禁用等。
監控系統自我保護功能是避免非法用戶關閉系統。如關閉監控系統時輸入密碼等。
四、監控技術
Linux系統的文件監控技術主要有以下三種:
(1)替換shell。用perl之類的腳本語言寫一個shell,替換bash,cshell,設置成用戶的默認shell,對刪除文件、修改文件等操作做記錄,追查方便。優點是實現簡單,風險低;缺點是容易繞過,沒法記錄二進制程序對文件的操作。
(2)寫驅動程序,使用hook系統調用監控文件操作。優點是底層操作,不易繞過;缺點是風險高,通用性差,開發難度大。
(3)使用inotify監控文件。inotify是基于事件的監控,無需定時輪詢文件狀態,也無需做內核模塊hook系統調用,簡單可靠。現階段大部分Linux系統均采用該方法監控文件。
Inotify的監控機制是[2]:Inotify
不打開被監視的目標文件的描述符,如果目標在可移動介質上,那么在 umount 該介質上的文件系統后,目標對應的 watch 將被自動刪除,并產生一個 umount 事件。
既可以監視文件,也可以監視目錄。
使用系統調用來通知文件系統事件。
使用文件描述符作為接口,可以使用通常的文件I/O 操作select和poll來監視文件系統的變化。
Inotify可監控文件的訪問、讀/寫、屬性修改、刪除等,也包括對目錄的操作,還可跟蹤活動的源頭和目標等細節。
五、inotify監控實例
使用inotify編寫監控程序[3],并在Monitor端執行。具體過程如下:
創建一個文件描述符,附加一個或多個監視器,然后使用 read() 方法從描述符獲取事件信息,事件發生前先阻塞read()。
具體步驟如下:
int fd = inotify_init(); 初始化inotify實例。
int wd = inotify_add_watch(fd, path, mask); 添加監視對象,即事件的位標記集合。
size_t len = read(fd, buf, BUF_LEN); 讀取事件數據,buf是一個指向inotify_event結構數組的指針。
int ret = inotify_rm_watch(fd, wd); 通過此函數來刪除已存在的監視對象。
監控程序開始執行后,進行測試:
用某用戶身份登錄;在被保護文件范圍內進行創建文件操作。操作完成后,在執行監控程序的終端立即顯示如圖2所示告警信息。證明監控功能實現。
圖2 管理端獲得的告警信息
本監控實驗程序,只實現了對所監控文件的創建操作。
小結
通過上述實踐證明,使用inotify技術對文件系統進行監控是可行的,程序過程并不復雜。inotify技術對文件系統的監控功能較全面,使用方法簡單,該技術值得推廣。本文未實現還原模塊的功能,由于其涉及到文件范圍的識別,文件傳輸的實時性及并發性等問題,有待今后深入研究其實現方法。
參考文獻
[1] (美)Aron Hsiao . Linux系統安全基礎[M].人民郵電出版社. 2002.2
[2] 燚楊. Inotify -- Linux 2.6 內核中的文件系統變化通知機制[EB|OL].
http://www.ibm.com/developerworks/cn/linux/l-inotifynew/
[3] Michael Prokop. Inotify: 高效、實時的Linux文件系統事件監控框架[EB|OL]. http://www.infoq.com/cn/articles/inotify-linux-file-system-event-monitoring/
(作者單位:武昌理工學院)