一種Linux隱藏配置文件的方法
【專利摘要】本發(fā)明提供了一種Linux隱藏配置文件的方法,包括:步驟1,從flash的bootloader中劃出一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他flash分區(qū),將配置文件以非文件形式存儲(chǔ)于所述隱藏分區(qū);步驟2,內(nèi)核啟動(dòng)時(shí),將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中;步驟3,初始化netlink,等待應(yīng)用程序連接。采用本發(fā)明技術(shù)方案后,在flash分區(qū)中的bootloader中的一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他區(qū)域,配置文件在所述隱藏分區(qū)以非文件形式存儲(chǔ),內(nèi)核啟動(dòng)后將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中,應(yīng)用程序跟內(nèi)核的交互采用netlink連接,而netlink自由的自定義字段,使得配置文件對(duì)于非研發(fā)人員來說是不可獲知的,即配置對(duì)用戶來說是隱藏的,保證了系統(tǒng)的安全。
【專利說明】一種L i nux隱藏配置文件的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Linux配置文件的【技術(shù)領(lǐng)域】,尤其涉及一種Linux隱藏配置文件的方法。
【背景技術(shù)】
[0002]—般Linux配置以實(shí)體文件存放于文件系統(tǒng),而文件系統(tǒng)以一定格式存放于flash,如jffs2,ext2,ext3等,通過對(duì)如jffs2文件系統(tǒng)的讀寫,可找到相應(yīng)的配置文件并查看。而對(duì)于一些非常重要的配置文件,我們不希望用戶通過任何Iinux命令直接查看,也不在實(shí)際的文件系統(tǒng)顯示。
[0003]如圖1所示,Iinux的配置文件放于etc目錄,各配置以可見文件形式存放其中,通過直接查看文件內(nèi)容,我們可以了解相應(yīng)的系統(tǒng)配置。對(duì)于有些配置,如涉及到系統(tǒng)安全,我們不希望任何用戶可以看到其中信息,甚至在文件系統(tǒng)中不存在該配置文件。
【發(fā)明內(nèi)容】
[0004]本發(fā)明需解決的技術(shù)問題是克服上述的不足,提供一種Linux隱藏配置文件的方法,其特征在于,包括:
[0005]步驟1,從flash的bootloader中劃出一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他flash分區(qū),將配置文件以非文件形式存儲(chǔ)于所述隱藏分區(qū);
[0006]步驟2,內(nèi)核啟動(dòng)時(shí),將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中;
[0007]步驟3,初始化netlink,等待應(yīng)用程序連接。
[0008]進(jìn)一步的,所述隱藏分區(qū)包括用于檢驗(yàn)配置正確性的配置項(xiàng)頭部和多項(xiàng)配置條目。
[0009]進(jìn)一步的,所述配置條目包括配置名和配置內(nèi)容。
[0010]進(jìn)一步的,所述內(nèi)核啟動(dòng)時(shí),將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中的步驟包括:
[0011]內(nèi)核啟動(dòng)時(shí),內(nèi)核啟動(dòng)時(shí),讀取配置項(xiàng)頭部并檢查其正確性;
[0012]若配置項(xiàng)頭部正確,則將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中,否則將配置設(shè)置為空。
[0013]進(jìn)一步的,配置條目在內(nèi)核以哈稀鏈表方式存儲(chǔ),每個(gè)conf data表示一個(gè)配置條目,查找配置時(shí),以配置名為參數(shù),使用哈稀函數(shù)找到數(shù)組下標(biāo),然后遍歷該下標(biāo)鏈表,即可找到對(duì)應(yīng)配置,所述conf data包含了配置名、配置內(nèi)容以及指向下一個(gè)配置條目的指針。
[0014]進(jìn)一步的,所述netlink報(bào)文自定義字段包括op、Ien以及data三個(gè)字段,分別描述為:
[0015]op:報(bào)文類型,I表示檢查配置,2表示set保存配置,3表示get獲取配置,4表示內(nèi)核回復(fù)報(bào)文,5表示提交配置;
[0016]Ien:數(shù)據(jù)長度,表不data字段報(bào)文長度;
[0017]data:含配置信息,可直接是配置文件或字符串類型等任意格式。
[0018]進(jìn)一步的,還包括:
[0019]當(dāng)應(yīng)用程序啟動(dòng)后,發(fā)送netlink消息給內(nèi)核,檢查配置是否為空;
[0020]若配置為空,則下發(fā)默認(rèn)配置。
[0021]進(jìn)一步的,還包括:
[0022]應(yīng)用程序添加和/或修改內(nèi)核中的配置;
[0023]添加和/或修改的配置保存于內(nèi)存中;
[0024]確定后再寫入flash。
[0025]采用本發(fā)明方法后,在flash分區(qū)中的bootloader中的一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他區(qū)域,配置文件在所述隱藏分區(qū)以非文件形式存儲(chǔ),內(nèi)核啟動(dòng)后將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中,應(yīng)用程序跟內(nèi)核的交互采用net I ink連接,而net I ink自由的自定義字段,使得配置文件對(duì)于非研發(fā)人員來說是不可獲知的,即配置對(duì)用戶來說是隱藏的,保證了系統(tǒng)的安全。
【專利附圖】
【附圖說明】
[0026]圖1是現(xiàn)有技術(shù)中的Iinux文件系統(tǒng);
[0027]圖2是本發(fā)明提供的Linux隱藏配置文件的方法的流程圖;
[0028]圖3是本發(fā)明提供的隱藏分區(qū)的flash格式;
[0029]圖4為本發(fā)明提供的配置項(xiàng)頭部格式;
[0030]圖5為本發(fā)明提供的netlink的報(bào)文字段;
[0031]圖6為應(yīng)用程序啟動(dòng)的流程圖。
【具體實(shí)施方式】
[0032]為了使本領(lǐng)域相關(guān)技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面將結(jié)合本發(fā)明實(shí)施方式的附圖,對(duì)本發(fā)明實(shí)施方式中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施方式僅僅是本發(fā)明一部分實(shí)施方式,而不是全部的實(shí)施方式。
[0033]下面結(jié)合附圖和實(shí)施方式對(duì)本發(fā)明作進(jìn)一步說明。
[0034]參閱圖2,為本發(fā)明提供的一種實(shí)施方式的Linux隱藏配置文件的方法,本方法包括:
[0035]步驟S100,從flash的bootloader中劃出一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他flash分區(qū),將配置文件以非文件形式存儲(chǔ)于所述隱藏分區(qū);
[0036]在Linux系統(tǒng)中,flash分為3個(gè)區(qū),包括bootloader、kernel以及fs三個(gè)分區(qū),bootloader相當(dāng)于我們的b1s,kernel為內(nèi)核,fs為文件系統(tǒng)。從bootloader分區(qū)中劃出一塊連續(xù)區(qū)域,該區(qū)域隱藏于其他flash,將配置文件以非文件形式存儲(chǔ)于隱藏分區(qū)。劃出來的區(qū)域不被用戶獲知。本實(shí)施例中,該隱藏區(qū)域?yàn)閎ootloader分區(qū)最后一段連續(xù)的區(qū)域。
[0037]參閱圖3,隱藏分區(qū)包括用于檢驗(yàn)配置正確性的配置項(xiàng)頭部和多項(xiàng)配置條目,配置條目包括配置名和配置內(nèi)容,一般采用配置名=配置內(nèi)容的方式存儲(chǔ),例如password =123456。本實(shí)施例中,配置項(xiàng)頭部如圖4所示,它以4字節(jié)長度Magic魔數(shù)為標(biāo)示,Len為4字節(jié)整形數(shù),表示除配置項(xiàng)頭部外的配置條目長度,crc則記錄從配置條目I到η的crc校驗(yàn)和,保證配置的正確性。
[0038]步驟S200,內(nèi)核啟動(dòng);
[0039]步驟S300,讀取配置項(xiàng)頭部并檢查其正確性;
[0040]步驟S400,若配置項(xiàng)頭部不正確,則將配置設(shè)置為空;
[0041]步驟S500,若配置項(xiàng)頭部正確,則將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中;
[0042]配置條目在內(nèi)核以哈稀鏈表方式存儲(chǔ),每個(gè)conf data表示一個(gè)配置條目,查找配置時(shí),以配置名為參數(shù),使用哈稀函數(shù)找到數(shù)組下標(biāo),然后遍歷該下標(biāo)鏈表,即可找到對(duì)應(yīng)配置,所述conf data包含了配置名、配置內(nèi)容以及指向下一個(gè)配置條目的指針。
[0043]步驟S600,初始化netlink,等待應(yīng)用程序連接。
[0044]netlink可自定義字段,本實(shí)施例中,所述netlink報(bào)文自定義字段包括op、Ien以及data三個(gè)字段,分別描述為:
[0045]op:報(bào)文類型,I表示檢查配置,2表示set保存配置,3表示get獲取配置,4表示內(nèi)核回復(fù)報(bào)文,5表示提交配置;
[0046]Ien:數(shù)據(jù)長度,表不data字段報(bào)文長度;
[0047]data:含配置信息,可直接是配置文件或字符串類型等任意格式。
[0048]上述步驟表明,Linux隱藏配置文件的關(guān)鍵步驟在于在內(nèi)核啟動(dòng)后,也將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中,只是普通用戶看不見,需要用特定的方式才可以讀取配置文件并應(yīng)用。
[0049]上述步驟SlOO?步驟S600,隱藏分區(qū)的內(nèi)容即配置已經(jīng)讀取到內(nèi)核中,且netlink初始化,等待應(yīng)用程序連接。
[0050]參閱圖6,應(yīng)用程序連接內(nèi)核包括:
[0051]步驟S10,應(yīng)用程序啟動(dòng);
[0052]步驟S20,發(fā)送netlink消息給內(nèi)核,檢查配置是否為空;
[0053]步驟S30,若配置為空,則下發(fā)默認(rèn)配置。
[0054]在配置不為空,則應(yīng)用程序通過netlink正常獲取配置。
[0055]應(yīng)用程序獲取配置的方式如下:
[0056]A)填充并發(fā)送圖5所示的netlink報(bào)文,其中op字段為3,Ien字段為data數(shù)據(jù)長度,data為配置名,當(dāng)data為空時(shí)表示獲取所有配置;
[0057]B)內(nèi)核接收到netlink報(bào)文后,若配置名非空,則通過該名在哈稀鏈表找到相應(yīng)配置,以“配置名=配置內(nèi)容”為數(shù)據(jù),填充報(bào)文并返回給應(yīng)用程序。若配置名為空,則表明獲取所有配置,需遍歷哈稀鏈,將所有數(shù)據(jù)填充到data區(qū)域,返回給應(yīng)用程序。
[0058]C)應(yīng)用程序收到配置后做相應(yīng)處理。
[0059]內(nèi)核接收到報(bào)文后,若配置名非空,則通過該名在哈稀鏈表找到相應(yīng)配置,以’配置名=配置內(nèi)容’為數(shù)據(jù),填充報(bào)文并返回給應(yīng)用程序。若配置名為空,則表明獲取所有配置,需遍歷哈稀鏈,將所有數(shù)據(jù)填充到data區(qū)域,返回給應(yīng)用程序。
[0060]應(yīng)用程序收到配置后做相應(yīng)處理。
[0061]我們還可以采用netlink報(bào)文對(duì)配置進(jìn)行添加和/或修改。
[0062]1、填充并發(fā)送圖5所示的netlink報(bào)文,op字段為2,Ien字段為data長度,data為“配置名=配置內(nèi)容”。
[0063]2、內(nèi)核收到報(bào)文后,以配置名為參數(shù),通過哈稀函數(shù)找到對(duì)應(yīng)數(shù)組下標(biāo),遍歷對(duì)應(yīng)鏈表,如找到配置名,則直接修改conf_data數(shù)據(jù);若未找到,則新建conf_data結(jié)點(diǎn),填寫結(jié)點(diǎn)配置名和配置內(nèi)容,最后添加到鏈表中。
[0064]內(nèi)核保存的配置在內(nèi)存中,斷電后無法保存,而如果每次修改配置,都燒寫Flash,會(huì)容易引起flash頻繁燒寫,減少flash壽命。為了延長flash壽命,一般應(yīng)用程序添加和/或修改內(nèi)核中的配置時(shí),如下操作:
[0065]應(yīng)用程序添加和/或修改內(nèi)核中的配置;
[0066]添加和/或修改的配置保存于內(nèi)存中;
[0067]確定后再寫入flash。
[0068]采用本發(fā)明方法后,在flash分區(qū)中的bootloader中的一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他區(qū)域,配置文件在所述隱藏分區(qū)以非文件形式存儲(chǔ),內(nèi)核啟動(dòng)后將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中,應(yīng)用程序跟內(nèi)核的交互采用net I ink連接,而net I ink自由的自定義字段,使得配置文件對(duì)于非研發(fā)人員來說是不可獲知的,即配置對(duì)用戶來說是隱藏的,保證了系統(tǒng)的安全。
[0069]以上僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種Linux隱藏配置文件的方法,其特征在于,包括: 步驟I,從flash的bootloader中劃出一塊連續(xù)區(qū)域,所述區(qū)域隱藏于其他flash分區(qū),將配置文件以非文件形式存儲(chǔ)于所述隱藏分區(qū); 步驟2,內(nèi)核啟動(dòng)時(shí),將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中; 步驟3,初始化netlink,等待應(yīng)用程序連接。
2.根據(jù)權(quán)利要求1所述Linux隱藏配置文件的方法,其特征在于,所述隱藏分區(qū)包括用于檢驗(yàn)配置正確性的配置項(xiàng)頭部和多項(xiàng)配置條目。
3.根據(jù)權(quán)利要求2所述的Linux隱藏配置文件的方法,其特征在于,所述配置條目包括配置名和配置內(nèi)容。
4.根據(jù)權(quán)利要求2所述的Linux隱藏配置文件的方法,其特征在于,所述內(nèi)核啟動(dòng)時(shí),將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中的步驟包括: 內(nèi)核啟動(dòng)時(shí),讀取配置項(xiàng)頭部并檢查其正確性; 若配置項(xiàng)頭部正確,則將隱藏分區(qū)的內(nèi)容讀取到內(nèi)存中,否則將配置設(shè)置為空。
5.根據(jù)權(quán)利要求3所述的Linux隱藏配置文件的方法,其特征在于,配置條目在內(nèi)核以哈稀鏈表方式存儲(chǔ),每個(gè)conf data表示一個(gè)配置條目,查找配置時(shí),以配置名為參數(shù),使用哈稀函數(shù)找到數(shù)組下標(biāo),然后遍歷該下標(biāo)鏈表,即可找到對(duì)應(yīng)配置,所述conf data包含了配置名、配置內(nèi)容以及指向下一個(gè)配置條目的指針。
6.根據(jù)權(quán)利要求5所述的Linux隱藏配置文件的方法,其特征在于,所述netI ink報(bào)文自定義字段包括op、Ien以及data三個(gè)字段,分別描述為: op:報(bào)文類型,I表示檢查配置,2表示set保存配置,3表示get獲取配置,4表示內(nèi)核回復(fù)報(bào)文,5表示提交配置; Ien:數(shù)據(jù)長度,表示data字段報(bào)文長度; data:含配置信息,可直接是配置文件或字符串類型等任意格式。
7.根據(jù)權(quán)利要求6所述的Linux隱藏配置文件的方法,其特征在于,還包括: 當(dāng)應(yīng)用程序啟動(dòng)后,發(fā)送netlink消息給內(nèi)核,檢查配置是否為空; 若配置為空,則下發(fā)默認(rèn)配置。
8.根據(jù)權(quán)利要求6所述的Linux隱藏配置文件的方法,其特征在于,還包括: 應(yīng)用程序添加和/或修改內(nèi)核中的配置; 添加和/或修改的配置保存于內(nèi)存中; 確定后再寫入flash。
【文檔編號(hào)】G06F21/78GK104463031SQ201410717425
【公開日】2015年3月25日 申請(qǐng)日期:2014年12月1日 優(yōu)先權(quán)日:2014年12月1日
【發(fā)明者】王東華, 黃沁宇, 劉馳 申請(qǐng)人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司