秦子實(shí)
摘要:隨著企業(yè)內(nèi)網(wǎng)業(yè)務(wù)的增多,接入的計(jì)算機(jī)規(guī)模也逐漸增大,網(wǎng)絡(luò)拓?fù)湟搽S之逐漸復(fù)雜,這種現(xiàn)象使得企業(yè)運(yùn)維部門對(duì)接入計(jì)算機(jī)的管控難度越來(lái)越高。而使用域策略等靜態(tài)管理方法僅能滿足部分需求,難以直接進(jìn)行計(jì)算機(jī)的運(yùn)行時(shí)狀態(tài)管控。因此,運(yùn)維部門需要一種更加通用且較為動(dòng)態(tài)的自動(dòng)化計(jì)算機(jī)管控方法,不僅能夠設(shè)置靜態(tài)策略,還可以獲取運(yùn)行時(shí)數(shù)據(jù),并遠(yuǎn)程執(zhí)行一些特定的運(yùn)行時(shí)操作。本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于WMI的計(jì)算機(jī)運(yùn)行時(shí)管理方法,通過(guò)Windows自帶的WMI讀寫特定的屬性,或執(zhí)行特定腳本,以實(shí)現(xiàn)動(dòng)態(tài)的自動(dòng)化計(jì)算機(jī)管理。該方法具有容易開發(fā)、方便部署等特點(diǎn),適合運(yùn)維部門在局域網(wǎng)中自定義解決方案。
關(guān)鍵詞:WMI;終端管理;Python
中圖分類號(hào):TP393 ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)28-0070-02
1 概述
在企業(yè)內(nèi)部辦公網(wǎng)絡(luò),特別是安全級(jí)別較高且存在物理隔離的局域網(wǎng)中,由于辦公網(wǎng)絡(luò)規(guī)模的擴(kuò)大,對(duì)計(jì)算機(jī)的控制要求也在逐漸增加,普通的通過(guò)域策略控制計(jì)算機(jī)的靜態(tài)管理辦法已經(jīng)難以滿足運(yùn)維部門的管理要求。為了滿足一些安全級(jí)別較高的新標(biāo)準(zhǔn),局域網(wǎng)計(jì)算機(jī)管理應(yīng)能夠?qū)崿F(xiàn)實(shí)時(shí)監(jiān)控終端進(jìn)程、讀寫系統(tǒng)屬性或注冊(cè)表、執(zhí)行腳本、啟停服務(wù)等功能。同時(shí),為了滿足管控的通用性、靈活性,以節(jié)約運(yùn)維人力成本,不應(yīng)該使用給每臺(tái)計(jì)算機(jī)安裝監(jiān)控客戶端的方法,而應(yīng)該直接使用系統(tǒng)自帶功能通過(guò)網(wǎng)絡(luò)直接獲取,從而降低管理的復(fù)雜度并減少疏漏。
本文針對(duì)上述需求,利用Windows自帶的WMI,配合SNMP和域策略的使用,設(shè)計(jì)并實(shí)現(xiàn)了通往網(wǎng)絡(luò)直接采集計(jì)算機(jī)的運(yùn)行時(shí)數(shù)據(jù),并實(shí)時(shí)執(zhí)行運(yùn)維腳本、配置系統(tǒng)屬性,做到易開發(fā)、易部署、易拓展,提升網(wǎng)絡(luò)整體安全性,并降低運(yùn)維成本。
2WMI簡(jiǎn)介
2.1 WMI技術(shù)
WMI,全稱為Windows Management Instrumentation,即Windows管理工具,是微軟Windows系列操作系統(tǒng)從NT時(shí)代就自帶的一種管理工具,支持通過(guò)網(wǎng)絡(luò)對(duì)計(jì)算機(jī)進(jìn)行遠(yuǎn)程管控。通過(guò)WMI連接到目標(biāo)計(jì)算機(jī),我們可以監(jiān)視計(jì)算機(jī)中幾乎所有資源和狀態(tài),包括但不限于進(jìn)程運(yùn)行時(shí)狀態(tài)、內(nèi)存/硬盤資源、網(wǎng)絡(luò)使用、安全策略、用戶和組等。此外,WMI還支持遠(yuǎn)程執(zhí)行程序或腳本,網(wǎng)絡(luò)管理者通過(guò)此功能即可執(zhí)行任何期望的操作。
2.2 WMI網(wǎng)絡(luò)環(huán)境
通過(guò)WMI監(jiān)控局域網(wǎng)中的計(jì)算機(jī),需要域控制器和支持SNMP的交換機(jī)進(jìn)行簡(jiǎn)單配合。常見(jiàn)的局域網(wǎng)接入拓?fù)淙缦聢D所示:
其中,域控制器需要設(shè)置一些安全策略,包括開放WMI對(duì)應(yīng)的防火墻135端口,保證WMI能夠建立連接;設(shè)置統(tǒng)一的administrators組的賬號(hào)密碼供WMI能夠成功認(rèn)證。支持SNMP的交換機(jī)用于實(shí)時(shí)獲取ARP信息,是一種簡(jiǎn)便且可靠的獲取當(dāng)前在線計(jì)算機(jī)IP列表的方法。
3實(shí)現(xiàn)方案
3.1 WMI連接
本文選擇Python下的wmi庫(kù)實(shí)現(xiàn)。需要注意的是,wmi依賴pywin32庫(kù)與com組件進(jìn)行交互,因此需要先安裝pywin32,而該庫(kù)是平臺(tái)相關(guān)的,正常情況下需要通過(guò)源碼進(jìn)行平臺(tái)編譯。本文使用簡(jiǎn)便方法,即從互聯(lián)網(wǎng)上直接下載非官方的已編譯wheel文件安裝,下載時(shí)注意自己的Python版本和系統(tǒng)平臺(tái)版本即可,比如Python 3.6用戶在Windows 2012服務(wù)器上部署,則下載諸如“pywin32-224-cp36-cp36m-win_amd64.whl”的文件即可。
WMI運(yùn)行環(huán)境準(zhǔn)備完畢后,通過(guò)從交換機(jī)SNMP的ARP數(shù)據(jù)中,可以確定當(dāng)前在線的所有計(jì)算機(jī)。接下來(lái)使用域控制器下發(fā)的本地管理員賬號(hào)密碼進(jìn)行連接,例如某在線計(jì)算機(jī)IP為“192.168.10.11”,其所在域下發(fā)的本地管理員賬號(hào)密碼為“administrator/passw0rd”,則wmi連接該計(jì)算機(jī)的代碼為:
若連接完成后無(wú)異常拋出,則可以通過(guò)上例中的變量“c”得到目標(biāo)計(jì)算機(jī)的WMI根實(shí)例。
3.2 WMI常用方法
根實(shí)例中的所有可用WMI功能類存放在“c.classes”中,用戶可以根據(jù)場(chǎng)景選擇相應(yīng)的功能。對(duì)于計(jì)算機(jī)的狀態(tài)監(jiān)控,運(yùn)維部門最常用的是運(yùn)行時(shí)進(jìn)程、內(nèi)存/硬盤資源、網(wǎng)絡(luò)資源、安全策略、用戶和組等信息。
1)進(jìn)程:通過(guò)WMI查看運(yùn)行時(shí)進(jìn)程,需要使用“c.Win32_Process()”,該方法返回運(yùn)行時(shí)進(jìn)程列表,可以直接通過(guò)for循環(huán)遍歷。每個(gè)WMI獲取的進(jìn)程實(shí)例包含進(jìn)程ID、名稱、命令行等詳細(xì)信息,基本滿足各種場(chǎng)景需求。例如,在某場(chǎng)景中,運(yùn)維人員需要了解目標(biāo)計(jì)算機(jī)是否運(yùn)行了特定安防軟件,或是是否運(yùn)行了禁止使用的軟件,則可以通過(guò)“process.CommandLine”屬性獲取到該進(jìn)程的完整命令行。如用戶使用Word編輯“D:\test.docx”的進(jìn)程,其命令行為“"C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE" /n "D:\test.docx"”。
2)操作系統(tǒng)概況:通過(guò)WMI查看操作系統(tǒng)詳細(xì)信息,需要使用“c.Win32_OperatingSystem()”,該方法返回當(dāng)前操作系統(tǒng)概況詳情,包括系統(tǒng)名稱、版本、啟動(dòng)盤路徑、計(jì)算機(jī)名、空余內(nèi)存、當(dāng)前進(jìn)程數(shù)等信息。例如,在某場(chǎng)景中,運(yùn)維人員需要了解目標(biāo)計(jì)算機(jī)操作系統(tǒng)類型及安裝日期,則可以通過(guò)“c.Win32_OperatingSystem()[0].Name”和“c.Win32_OperatingSystem()[0].InstallDate”獲取,其返回值為“'Microsoft Windows 7 旗艦版 |C:\\Windows|'”和“'20170421143026.000000+480'”。
3)磁盤空間:通過(guò)WMI查看各磁盤狀態(tài),需要使用“c.Win32_LogicalDisk()”,該方法返回目標(biāo)計(jì)算機(jī)邏輯磁盤列表,可以直接使用for循環(huán)遍歷。每個(gè)WMI獲取的邏輯磁盤實(shí)例包含卷名、總空間、剩余空間、文件系統(tǒng)等詳細(xì)信息。例如,在某場(chǎng)景中,運(yùn)維人員需要了解目標(biāo)計(jì)算機(jī)各硬盤剩余空間:
4)用戶和組:通過(guò)WMI查看各計(jì)算機(jī)上的用戶,需要使用“c.Win32_Account()”,該方法返回目標(biāo)計(jì)算機(jī)的所有用戶列表,可以直接使用for循環(huán)遍歷。每個(gè)WMI獲取的賬號(hào)實(shí)例包含賬號(hào)屬主及屬組、所屬域、賬號(hào)及密碼狀態(tài)等詳細(xì)信息。例如,在某場(chǎng)景中,運(yùn)維人員需要掌握來(lái)賓賬戶狀態(tài),則可以通過(guò)遍歷列表,查找“account.Name =='Guest'”,若“account.Status == 'Degraded'”則可以確定來(lái)賓賬戶已禁用。
5)服務(wù):通過(guò)WMI查看各計(jì)算機(jī)上的服務(wù),需要使用“c.Win32_Service()”,該方法返回目標(biāo)計(jì)算機(jī)的所有注冊(cè)的服務(wù)列表,可以直接使用for循環(huán)遍歷。每個(gè)WMI獲取的服務(wù)實(shí)例包含命令行路徑、進(jìn)程ID、當(dāng)前狀態(tài)、啟動(dòng)模式等詳細(xì)信息。例如,在某場(chǎng)景中,運(yùn)維人員需要查看瑞星殺毒服務(wù)運(yùn)行狀態(tài),則可以通過(guò)遍歷列表,查找“service.Name =='RavService'”,若“account.Started== 'TRUE'”則可以確定瑞星殺毒服務(wù)已啟動(dòng)。
6)啟動(dòng)項(xiàng):通過(guò)WMI查看各計(jì)算機(jī)上的啟動(dòng)項(xiàng),需要使用“c.Win32_StartupCommand()”,該方法返回目標(biāo)計(jì)算機(jī)的啟動(dòng)項(xiàng)列表,可以直接使用for循環(huán)遍歷。每個(gè)WMI獲取的啟動(dòng)項(xiàng)實(shí)例包含完整命令行、注冊(cè)表項(xiàng)、所屬用戶等詳細(xì)信息。例如,在某場(chǎng)景中,運(yùn)維人員需要確認(rèn)身份認(rèn)證系統(tǒng)是否安裝且注冊(cè),則可以通過(guò)遍歷列表,若存在“startup.Caption=='GM3000PCSCMon'”則可以確定身份認(rèn)證Key已安裝并注冊(cè)為啟動(dòng)項(xiàng),可以通過(guò)“startup.Location”查看具體注冊(cè)表項(xiàng)。
3.3 WMI執(zhí)行程序
上文中的“c.Win32_Process()”方法可以返回進(jìn)程列表,而“c.Win32_Process”則返回一個(gè)名為“Win32_Process”的類,該類具有名為“create()”的方法用于遠(yuǎn)程創(chuàng)建進(jìn)程。該函數(shù)的參數(shù)有三個(gè):命令行、工作路徑(可選)、啟動(dòng)信息(可選),其返回值為進(jìn)程ID和進(jìn)程返回值。例如,在某場(chǎng)景下,運(yùn)維人員需要在指定計(jì)算機(jī)上下載并運(yùn)行位于服務(wù)器上的補(bǔ)丁程序“http://192.168.100.10:8888/xxx.exe”,則可以分為兩步實(shí)施。第一步,利用“certutil.exe”進(jìn)行下載,該程序?yàn)镹T時(shí)代的Windows自帶程序,可以用于命令行下載遠(yuǎn)程連接,我們通常將程序下載至“C:/Windows/Temp”臨時(shí)文件夾中,以便于管理、刪除:
如果預(yù)計(jì)所執(zhí)行的程序或腳本運(yùn)行時(shí)間較長(zhǎng),則可以通過(guò)進(jìn)程ID建立“watch”函數(shù),監(jiān)控函數(shù)將在進(jìn)程結(jié)束后返回:
4 結(jié)束語(yǔ)
本文介紹了通過(guò)WMI遠(yuǎn)程獲取指定計(jì)算機(jī)狀態(tài)、下載并執(zhí)行程序的簡(jiǎn)便方法,該方法不需要預(yù)裝任何客戶端或程序,運(yùn)維人員只需要掌握計(jì)算機(jī)的本地管理員密碼,就可以方便地對(duì)局域網(wǎng)中的在線計(jì)算機(jī)進(jìn)行遠(yuǎn)程運(yùn)維。這是一種低成本、高可靠、維護(hù)方便的計(jì)算機(jī)運(yùn)維管理方法。
【通聯(lián)編輯:梁書】