◆孫濤
(北京無線電測量研究所 北京 100854)
現(xiàn)代作戰(zhàn)系統(tǒng)的控制終端一般采用基于通用操作系統(tǒng)開發(fā)顯控軟件的形式。Windows 由于開發(fā)資源豐富,在以前較長的時(shí)間內(nèi)是主流選用的操作系統(tǒng)。Linux 作為Windows 的競爭者,由于其開源、自主可控等優(yōu)勢,已成為現(xiàn)階段作戰(zhàn)系統(tǒng)控制終端指定選用的操作系統(tǒng)。但Linux 作為通用桌面系統(tǒng)而非嵌入式領(lǐng)域?qū)S玫牟僮飨到y(tǒng),因此易感染病毒、不能抵抗異常斷電的沖擊。作戰(zhàn)系統(tǒng)終端往往還有直接斷電關(guān)機(jī)和隨時(shí)可進(jìn)行硬復(fù)位操作的需求,就更無法滿足。
此外,作戰(zhàn)系統(tǒng)終端軟件往往需要存儲(chǔ)武器系統(tǒng)很多配置參數(shù),而文件的寫入操作如果不進(jìn)行專門設(shè)計(jì),也存在較大風(fēng)險(xiǎn)。這是在常用操作系統(tǒng)Windows、Linux、VxWorks 下都存在的問題。
上述兩類問題涉及了系統(tǒng)級安全性和數(shù)據(jù)級安全性兩大范疇,無論系統(tǒng)崩潰或配置文件損壞,都是作戰(zhàn)控制系統(tǒng)所不能允許的。通過研究可知,系統(tǒng)級安全性問題主要是因?yàn)橄到y(tǒng)區(qū)龐大并長期處于可寫狀態(tài),易因異常掉電導(dǎo)致配置單元處于不一致狀態(tài),重啟時(shí)發(fā)現(xiàn)其中具有無法解釋的數(shù)據(jù),從而啟動(dòng)失敗[1],或出現(xiàn)因網(wǎng)絡(luò)病毒導(dǎo)致系統(tǒng)文件被感染的情況;而數(shù)據(jù)級安全性不強(qiáng)的主要原因則是文件系統(tǒng)以異步方式工作[2],這種非立即寫入的方式可引起文件損壞或數(shù)據(jù)丟失。
與Windows 相比,Linux 提供了內(nèi)核支持壓縮文件系統(tǒng)映像、內(nèi)存盤(即RamDisk)和初始化內(nèi)存盤(即ⅠnitRD)這三項(xiàng)專有的技術(shù)。本方案通過結(jié)合使用這三項(xiàng)技術(shù),可使Linux 的啟動(dòng)基于初始化內(nèi)存盤,并可將一塊內(nèi)存用作根文件系統(tǒng),即:將Linux 完全放到內(nèi)存里然后再運(yùn)行,運(yùn)行時(shí)無須訪問硬盤。它的主要思想是構(gòu)建一個(gè)虛擬操作平臺,所有針對磁盤的操作都只針對內(nèi)存盤。本方案可以很好地預(yù)防Linux 系統(tǒng)文件被損壞或病毒感染的問題。
RamDisk的概念是將一部分系統(tǒng)內(nèi)存模擬為硬盤來使用,在其上像使用硬盤一樣來存放文件,其設(shè)計(jì)初衷是因?yàn)樵L問內(nèi)存的速度要遠(yuǎn)快于硬盤,從而能夠以此來提升性能;為了保護(hù)系統(tǒng),采用將Linux的根文件系統(tǒng)在RamDisk中進(jìn)行建立的方法[3],把生成文件系統(tǒng)所需的文件、庫文件、shell及基本命令和內(nèi)核等使用頻繁且必需的系統(tǒng)文件制作生成為壓縮的文件系統(tǒng),并制作成鏡像。以后每當(dāng)開機(jī)啟動(dòng)時(shí),鏡像均解壓縮到RamDisk,形成Linux操作系統(tǒng)的根文件系統(tǒng)。
為使RamDisk功能可用,需要通過make menuconfig命令,進(jìn)入到配置Linux內(nèi)核的狀態(tài)。檢查Block Device中的RamDisk選項(xiàng)和General Setup中的ⅠnitRD支持選項(xiàng),如果沒有選中,需要選中后重新編譯生成內(nèi)核。
應(yīng)按照具體應(yīng)用的需要,建立功能最小化的文件系統(tǒng)。例如要實(shí)現(xiàn)的功能是雷達(dá)終端軟件,就只需保留使Linux啟動(dòng)和后期維護(hù)所需的庫文件、配置文件、腳本和基本命令,以及運(yùn)行終端軟件本身所需的文件即可。
創(chuàng)建一個(gè)名為/radarLinux的目錄,在其下建立文件系統(tǒng)。在bin下存放原系統(tǒng)同一目錄下的維護(hù)用工具;在sbin下存放原系統(tǒng)同目錄下的常用命令;在usr/bin下存放其他工具和終端軟件的可執(zhí)行程序。lib目錄下的內(nèi)容則由可執(zhí)行程序所需的動(dòng)態(tài)鏈接庫確定。凡所需的原etc目錄下存放的配置文件及dev目錄下存放的設(shè)備文件都應(yīng)保留[4]。然后,即可向RamDisk中拷入文件系統(tǒng), 再將RamDisk生成為映像,
并生成壓縮的文件系統(tǒng)映像ram.img.gz。
建立文件系統(tǒng)映像的過程可以總結(jié)為:
(1)建立文件目錄并將考入所需要的文件;
(2)將大小適宜的EXT 相關(guān)類型文件系統(tǒng)建立于RamDisk;
(3)向本地硬盤掛載已完成格式化的RamDisk;
(4)將已建立的文件目錄拷貝至RamDisk;
(5)將RamDisk 從本地硬盤卸載;
(6)將RamDisk 中的文件寫成映像文件;
(7)生成壓縮的映像文件。
接下來仿照建立文件系統(tǒng)映像,建立一個(gè)與應(yīng)用無關(guān)的,放置系統(tǒng)啟動(dòng)文件和用于引導(dǎo)RamDisk可執(zhí)行腳本文件的目錄,生成壓縮的ⅠnitRD映像initrd.img.gz。
最后,將兩個(gè)映像文件拷入Linux所在盤以外的盤,修改
GRUB(GRand Unified Bootloader) 的配置文件grub.conf,通過GRUB把系統(tǒng)啟動(dòng)信息寫入該盤主引導(dǎo)區(qū)MBR,重啟時(shí)即實(shí)現(xiàn)了ⅠnitRD方式的系統(tǒng)加載。
對于需要用戶動(dòng)態(tài)寫入的數(shù)據(jù)文件,一方面由于存放在非保護(hù)分區(qū),另一方面由于操作系統(tǒng)的異步寫入策略和對FLASH 介質(zhì)的磨損均衡策略,所以正?;蚍钦5臄嚯娂皬?fù)位都有可能使其損壞。這些文件往往非常重要并且數(shù)據(jù)項(xiàng)目繁多,例如作戰(zhàn)系統(tǒng)配置參數(shù)表。如果損壞將極大影響作戰(zhàn)任務(wù),必須采取有效的預(yù)防措施,使損壞不發(fā)生或影響降到最低。有人在實(shí)踐中總結(jié)出關(guān)機(jī)前一次寫入法,為需要寫入的文件設(shè)置專用分區(qū),僅在關(guān)機(jī)前加載該分區(qū),寫操作限制在收到關(guān)機(jī)指令的時(shí)候[5]。這種方法雖然可大大減少故障點(diǎn),但不允許直接斷電關(guān)機(jī)和隨時(shí)硬復(fù)位,而本文方案則能夠滿足,簡述如下。
現(xiàn)代操作系統(tǒng)對磁盤寫入均提供了內(nèi)存緩沖機(jī)制,分為直寫和回寫兩種方式。直寫是操作系統(tǒng)確保數(shù)據(jù)寫到磁盤中才返回;回寫是數(shù)據(jù)寫到內(nèi)存磁盤緩沖中即返回,由操作系統(tǒng)決定在合適的時(shí)間寫到磁盤上,方式為系統(tǒng)的一個(gè)守護(hù)進(jìn)程定時(shí)清空塊緩沖并寫入磁盤。操作系統(tǒng)為不同類型、不同屬性的存儲(chǔ)介質(zhì)分配了不同的寫入周期,一般為幾秒至幾十秒,如VxWorks5.5 默認(rèn)最長為15 秒,并可進(jìn)行修改。
雖然回寫是操作系統(tǒng)對文件寫入操作的默認(rèn)策略,但在各平臺下均能夠找到磁盤直寫的方法,對于任務(wù)相對單一的雷達(dá)應(yīng)用,直寫使操作系統(tǒng)損失的效率可忽略不計(jì),卻對文件安全性帶來了極大好處。除適用于雷達(dá)配置參數(shù)文件外,直寫還很適用于寫日志類文件,日志類文件寫操作較為頻繁,文件需要一直處于打開狀態(tài),斷電或復(fù)位會(huì)使日志丟失。采用直寫方法后,文件一直處于打開狀態(tài)也能使日志全部保存。
不同平臺直寫的APⅠ有所不同。對于Linux 平臺,實(shí)現(xiàn)代碼為:
其中,O_SYNC 選項(xiàng)使數(shù)據(jù)部分實(shí)時(shí)寫入,fsync 函數(shù)(需要包含fcntl.h)使文件的屬性也同步更新。使用Qt 自帶類實(shí)現(xiàn)時(shí),可使用system(sync)取代fsync(fd),即相當(dāng)于在Shell 下執(zhí)行Linux專用系統(tǒng)命令sync 來清空內(nèi)存緩沖。
其他平臺下也具有類似的實(shí)現(xiàn)接口,如Windows 下使用CreateFile 時(shí)注意使用FⅠLE_FLAG_WRⅠTE_THROUGH 選項(xiàng)(使數(shù)據(jù)部分實(shí)時(shí)寫入),然后再使用FlushFileBuffers()函數(shù)(使文件的屬性也同步更新);而VxWorks 下只需在write 操作后增加ioctl(fd,F(xiàn)ⅠOFLUSH,0)即可。
將初始的雷達(dá)配置參數(shù)文件設(shè)置為雙份(文件a 和文件b),放置于不同分區(qū),以后有數(shù)據(jù)更新需求時(shí),交替寫入其中一個(gè)文件,除了寫入數(shù)據(jù)外,還在文件頭中寫入更新序號,以使下次訪問時(shí)能夠確定最新文件。由于每次只同時(shí)對其中一個(gè)文件進(jìn)行寫入,且寫入完成前不接受下一次寫入,所以確保了每次寫入至少有一個(gè)文件是安全的。寫入操作流程如圖1 所示。
文件中的參數(shù)只在終端軟件啟動(dòng)后讀取一次,讀取時(shí)做異常處理,首先通過比較文件頭,讀取最新文件中的參數(shù),如果訪問參數(shù)表發(fā)現(xiàn)異常(如:參數(shù)有殘缺或超值域),說明文件被損壞,此時(shí)加載另一個(gè)文件,并在界面中給出“已恢復(fù)最近一次正確配置”提示。此外,應(yīng)在只讀分區(qū)內(nèi)放置文件的初始副本,如果文件a、b 被其他原因破壞,將加載初始副本,并給出“已恢復(fù)出廠參數(shù)”提示。選取文件及讀取操作的流程如圖2 所示。
通過綜合使用上述兩類措施,在系統(tǒng)文件受到保護(hù)的基礎(chǔ)上,使軟件動(dòng)態(tài)存儲(chǔ)的數(shù)據(jù)文件也得到了有效保護(hù)。
圖1 文件寫入操作流程
通過對系統(tǒng)級安全性范疇和數(shù)據(jù)級安全性范疇的改進(jìn)設(shè)計(jì),真正提升了作戰(zhàn)控制終端軟件系統(tǒng)的安全性,并且滿足了隨時(shí)可進(jìn)行系統(tǒng)硬復(fù)位及直接斷電關(guān)機(jī)的嚴(yán)苛需求。某系列作戰(zhàn)系統(tǒng)控制終端研制初期未采用本文系統(tǒng)級和數(shù)據(jù)級安全性提升方案時(shí),經(jīng)常出現(xiàn)病毒感染、系統(tǒng)崩潰和參數(shù)文件損壞情況,采取本文設(shè)計(jì)方案后,經(jīng)過了大量的試驗(yàn)和軍方用戶的驗(yàn)證,沒有再出現(xiàn)過同類問題。本文方案對于作戰(zhàn)系統(tǒng)控制終端及其他類型的控制終端均具有廣泛的實(shí)用價(jià)值。
圖2 選取文件及讀取操作流程
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2020年7期