汪敏
(江蘇科技大學 計算機科學與工程學院,江蘇 鎮(zhèn)江 212003)
基于netlink的linux服務器集群統(tǒng)一外設事件監(jiān)聽機制
汪敏
(江蘇科技大學 計算機科學與工程學院,江蘇 鎮(zhèn)江 212003)
針對大型分布式服務器集群系統(tǒng)中缺乏對于外設事件統(tǒng)一的監(jiān)聽機制,設計了一種對于未經(jīng)允許的可拔插事件、未經(jīng)允許的外部存儲設備分區(qū)事件等外設事件的統(tǒng)一監(jiān)聽機制,首先在被監(jiān)控服務器端啟動過程中加載外設事件接收模塊和服務進程,然后由外設事件處理進程監(jiān)聽netlink多播組,最終由外設事件處理進程將外設事件通過網(wǎng)絡發(fā)送給服務器端監(jiān)控進程。通過本監(jiān)聽機制的設計,提高了服務器集群系統(tǒng)的整體安全性。
計算機網(wǎng)絡;服務器集群;netlink;事件監(jiān)聽
在linux服務器集群中,通常存在多臺服務器終端,而在大型的服務器架構(gòu)中,許多服務器終端是分布在不同的地理位置的,在服務器運行過程中,對于像未經(jīng)允許的可拔插設備訪問事件、未經(jīng)允許的外部存儲設備分區(qū)掛載事件等外設異步事件缺乏有效而又實時的監(jiān)聽方法。文中設計了一種基于netlink通訊的服務器集群統(tǒng)一外設事件監(jiān)聽方法,提高了服務器集群的安全性。
目前,現(xiàn)有技術(shù)中還不存在一種在linux服務器集群內(nèi)部統(tǒng)一的外設事件監(jiān)聽方法。而且,對于單個的服務器內(nèi)部的外設事件監(jiān)聽而言,主要依靠用戶空間的設備文件系統(tǒng)守護進程udevd[1-5]來搜集外設事件來動態(tài)的改變設備文件系統(tǒng)目錄/dev下的設備節(jié)點信息,不存在其他的、單獨的外設事件用戶空間接收程序,而設備文件系統(tǒng)守護進程udevd可定制性較差,難以實現(xiàn)通過改變現(xiàn)有的udevd守護進程來統(tǒng)一的監(jiān)聽服務器集群內(nèi)部的所有的外設事件的方法。
實現(xiàn)對于內(nèi)核空間消息的監(jiān)聽以及內(nèi)核空間與用戶空間的信息傳遞有很多種方法,但是相比較于增加系統(tǒng)調(diào)用[6-10]去實現(xiàn)外設事件監(jiān)聽接口,采用netlink去實現(xiàn)通訊接口,有很多優(yōu)點,比如說不需要增加內(nèi)核代碼,不需要重復編譯內(nèi)核,只需要在啟動系統(tǒng)的時候動態(tài)加載的相應的內(nèi)核模塊,而且netlink協(xié)議本身實現(xiàn)了事件的異步通知,所以能夠保證內(nèi)核事件接收的實時性。
一種基于netlink的linux服務器集群統(tǒng)一外設事件監(jiān)聽方法,包括以下步驟:
1)被監(jiān)控服務器端在系統(tǒng)啟動過程中加載外設事件內(nèi)核接收模塊,同時開啟監(jiān)控進程遠程服務進程,等待多個監(jiān)控服務器端監(jiān)控進程發(fā)來登錄請求;
2)監(jiān)控服務器端的監(jiān)控進程向被監(jiān)控服務器端的遠程服務進程發(fā)送登錄請求;
3)被監(jiān)控服務器端遠程服務進程接收登錄請求并利用fork()系統(tǒng)調(diào)用函數(shù)創(chuàng)建子進程,用于驗證登陸帳戶信息,并由父進程繼續(xù)監(jiān)控端口,查看是否有新的登錄請求;
4)被監(jiān)控服務器端服務進程接收到登錄請求后,創(chuàng)建子進程,子進程開啟外設事件處理進程,利用外設事件處理進程監(jiān)聽相關的netlink多播組,其中子進程與外設事件處理進程通過共享內(nèi)存實現(xiàn)全雙工通訊;
5)外設事件內(nèi)核接收模塊通過內(nèi)核線程統(tǒng)一接收相關外設事件,并按照外設事件先后順序以及優(yōu)先級發(fā)送給相關的netlink多播組;
6)外設事件處理進程將外設事件通過子進程發(fā)送給父進程進而通過網(wǎng)絡發(fā)送給監(jiān)控服務器端監(jiān)控進程。
圖1顯示了系統(tǒng)的總體架構(gòu)以及相關的工作流程。

圖1 系統(tǒng)架構(gòu)圖
在圖1中,監(jiān)控進程遠程服務模塊有兩個子進程,用以處理登錄請求,并且這兩個子進程分別關注不同的外設事件處理程序。圖1中兩個不同的外設事件處理程序,用以監(jiān)聽相同的netlink多播組,能夠?qū)崿F(xiàn)對于相同的外設事件有多個不同外設事件處理程序去處理的實用功能。
內(nèi)核空間的外設事件內(nèi)核接收模塊用于解決最為關鍵的外設事件的統(tǒng)一接收問題,如圖2所示,文中的外設事件內(nèi)核接收模塊主要提供兩部分功能:一是實現(xiàn)hw_event_send(int priority,struct mxc_hw_event new_event)函數(shù)對于驅(qū)動外設事件按照發(fā)生順序以及優(yōu)先級向內(nèi)核線程傳遞的功能;二是實現(xiàn)kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)內(nèi)核線程對于外設事件的接收以及按照它的發(fā)生順序向用戶空間廣播的過程。

圖2 被監(jiān)控端服務器架構(gòu)
對于第一部分功能,文中主要是通過EXPORT_SYMBOL(hw_event_send)將hw_event_send()函數(shù)導出符號,可以在各個外設的驅(qū)動中使用該函數(shù),將外設事件按照它的優(yōu)先級和發(fā)生順序發(fā)送給內(nèi)核線程。設備驅(qū)動在使用該函數(shù)的時候分了兩種情況,如圖3設備驅(qū)動1在使用該函數(shù)傳遞外設事件的時候處于中斷上下文,而設備驅(qū)動2和設備驅(qū)動3在使用該函數(shù)傳遞外設事件的時候處在非中斷上下文中,通過對于in_interrupt()的返回值判斷,能夠知道當前使用該函數(shù)的驅(qū)動是否處在中斷上下文中;通過對于中斷上下文的判斷,如果事件是在中斷上下文中觸發(fā)的,則先直接通過函數(shù)netlink_broadcast去廣播;如果廣播失敗的話,就掛入內(nèi)核線程處理隊列,使用wake_up()函數(shù)喚醒內(nèi)核線程。
圖3顯示了上述過程在Ubuntu Server端中的關鍵執(zhí)行代碼。

圖3 關鍵代碼
在函數(shù)hw_event_send(int priority,struct mxc_hw_event new_event)中包含兩個參數(shù):一個是外設事件的優(yōu)先級,另外一個是外設事件形式參數(shù)的定義。在hw_event_send()函數(shù)中包含著兩層判斷,一層是上面已經(jīng)提到的關于中斷上下文的判斷,一層則是對于外設事件優(yōu)先級的判斷。如果是高優(yōu)先級的外設事件,同樣的,需要首先通過函數(shù)netlink_broadcast去廣播到用戶空間。對于普通優(yōu)先級并且是非中斷上下文觸發(fā)的外設事件,則是由內(nèi)核線程
kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)負責接收的,當在外設事件發(fā)送函數(shù)hw_event_send()中有外設事件需要傳遞給內(nèi)核線程的時候,總是會調(diào)用wake_up()喚醒函數(shù),去喚醒等待隊列,這主要是由于在內(nèi)核線程等待外設事件的時候,總是會 wait_event_interruptible()改變當前的內(nèi)核線程運行狀態(tài)為可中斷睡眠狀態(tài)。
如圖2所示,文中將多播組設置成#define HW_EVENT_ GROUP 2,在內(nèi)核模塊中通過NETLINK_CB(skb).dst_group =HW_EVENT_GROUP初始化多播組為2,這樣在用戶空間就可以設置多個外設事件處理進程來監(jiān)聽該多播組,就可以實現(xiàn)多個監(jiān)控服務器端去監(jiān)聽特定的內(nèi)核事件的功能[11-16]。
如圖4顯示了當沒有拔插事件在被監(jiān)控服務器端發(fā)生的時候,登錄的三號服務器沒有異常的事件發(fā)生,和圖4對比的是當有拔插事件發(fā)生的時候,圖5顯示了當前有西部數(shù)據(jù)的存儲設備插入了被監(jiān)控服務器端。同時顯示了插入的存儲設備具體信息。

圖4 無拔插事件的被監(jiān)控服務器端

圖5 有拔插事件的被監(jiān)控端服務器
文中的目的在于解決大型服務器集群中出現(xiàn)的未經(jīng)授權(quán)外設事件接入所引起的安全問題,進而提出了的一種基于netlink的linux服務器集群統(tǒng)一外設事件監(jiān)聽方法,用以實現(xiàn)對于linux集群內(nèi)部重要的外設事件的監(jiān)聽,具有多終端同時監(jiān)聽、統(tǒng)一和實時接收服務器內(nèi)部外設事件且編程方法簡單易實現(xiàn)等優(yōu)點。
[1]李坤麗,張大方,關洪濤,等.虛擬路由器管控平面的設計與實現(xiàn)[J].計算機工程,2014(5):94-98,102.
[2]宋婉貞,田洪濤.基于Profibus實現(xiàn)netLINK網(wǎng)關與PLC的通訊[J].電子工業(yè)專用設備,2012,41(2):50-53.
[3]尹家生,周健,辜麗川,等.基于Linux的高速網(wǎng)絡流量采集與分析模型研究[J].計算機工程與應用,2006,42(10):151-154.
[4]李惠娟,王汝傳,任勛益,等.基于Netfilter的數(shù)據(jù)包捕獲技術(shù)研究[J].計算機科學,2007,34(6):81-83.
[5]章曉明,杜春燕,陸建德,等.IPsec VPN中Netlink消息通信機制的研究和設計 [J].計算機工程與應用,2006,42(34): 139-141.
[6]李惠娟,王汝傳,任勛益,等.基于Netfilter的數(shù)據(jù)包捕獲技術(shù)研究[J].計算機科學,2007,34(6):81-83.
[7]杜飛,劉心松,邱元杰,等.netlink套接字在系統(tǒng)通信中的應用研究[J].微計算機信息,2006,22(9):95-97,233.
[8]鄭子輝,楊東升,尹震宇,等.數(shù)控現(xiàn)場總線NCSF監(jiān)測分析系統(tǒng)的設計與實現(xiàn)[J].組合機床與自動化加工技術(shù),2011(5):46-50,55.
[9]董昱,馬鑫.基于netlink機制內(nèi)核空間與用戶空間通信的分析[J].測控技術(shù),2007,26(9):57-58,60.
[10]周莉,柯健,顧小晶,等.Netlink套接字在Linux系統(tǒng)通信中的應用研究[J].計算機與現(xiàn)代化,2007(3):109-111.
[11]陳浩.Linux下用戶態(tài)和內(nèi)核態(tài)內(nèi)存共享的實現(xiàn)[J].電腦編程技巧與維護,2011(4):25-27.
[12]劉斌,朱程榮.Linux內(nèi)核與用戶空間通信機制研究[J].電腦知識與技術(shù),2012,8(16):3816-3817,3849.
[13]劉文峰,李程遠,李善平,等.嵌入式Linux操作系統(tǒng)的研究[J].浙江大學學報(工學版),2004,38(4):447-452.
[14]周莉,黃憲,陸建德,等.Linux 2.6內(nèi)核IPSec支持機構(gòu)的研究與分析[J].計算機技術(shù)與發(fā)展,2007,17(5):191-194,198.
[15]郭全生,舒繼武,毛希平,等.基于LVS系統(tǒng)的負載動態(tài)平衡設計與實現(xiàn)[J].計算機研究與發(fā)展,2004,41(6):923-929.
[16]林闖,李寅,萬劍雄.計算機網(wǎng)絡服務質(zhì)量優(yōu)化方法研究綜述[J].計算機學報,2011(1):1-14.
Unified monitoring mechanism of peripheral events based on netlink of Linux server clusters
WANG Min
(College of Computer Science and Engineering,Jiangsu Science and Technology University,Zhenjiang 212003,China)
The large-scale distributed server clusters system are lack of the unified monitoring mechanism of peripheral events .The unpermitted external storage partition and plug events are included in the mechanism.Firstly,peripheral events process and the service process are started by the monitoring server in its starting progress.And then the handling process of peripheral events monitor the netlink communication.At the end,peripheral events handling process send the peripheral events to the monitoring process through the network.The safety of whole large-scale distributed linux server clusters are promoted after the design of this mechanism.
computer network;server cluster;netlink;event monitor
TN91
A
1674-6236(2016)23-0076-03
2015-11-30稿件編號:201511297
汪 敏(1990—),男,江蘇揚州人,碩士。研究方向:信息安全。