指令碼的故事(2)

2021-09-21 19:06:45 字數 3305 閱讀 7115

本頁內容 

知識就是力量 

最後的思考 

知識就是力量 

好了,好了:站在走廊上往下看,看那些手中掌握實權的傢伙們。我們有時很難理解,他們的權利到底和他們所掌握的知識有什麼聯絡。雖然事實如此,但是盡量多地掌握你所能得到的知識和資訊畢竟不是一件壞事,這對於計算機安全這個問題尤其正確。你對於你的計算機以及它的設定知道得越清楚,那麼你也就越有信心。這就是為什麼計算機安全專家們建議大家對自己的計算機進行階段性安全檢查的

原因。那麼現在就剩乙個問題:如何正確地進行這項階段性安全檢查? 

當然,現在你也許在想:"好吧,既然 security analyzer 這麼好用,我決定將它送給老媽作為聖誕禮物算了。但是這和指令碼有什麼關係呢?如果 security analyzer 能夠提供我需要的一切,那我還要指令碼幹什麼?scripting guys,我說的對嗎?" 

事實上,你說的很對:如果 security analyzer 能夠做你所需要的一切,那麼完全不必再使用指令碼了。(或許你也並不是很需要那些救生圈,為什麼不寄給 scripting guys,讓我們來照顧它好了。)但是如果 security analyzer 並不能做你所需要的所有事情的時候怎麼辦?雖然 security analyzer 在收集資訊方面做得很不錯,但是畢竟它不能夠對所收集到的資訊做出任何反應。例如,它能夠檢測所有 5000 臺工作站計算機的情況,並針對每台機子上的來賓帳戶是否已經關閉做出詳細報告(絕大多數機構都選擇關閉來賓帳戶以避免匿名或者沒有授權的使用者登入網路)。假設你的網路中有 2967 臺計算機的來賓帳戶沒有關閉,那麼 security analyzer 會將這一情況報告給你,但是最後還是需要你自己對每台機器進行處理,手動關閉這些機器上的來賓帳戶。 

後者就是指令碼的用武之地。假如你想知道計算機上的來賓帳戶是否已經關閉,你可以寫一段指令碼來完成上述過程,但是如果你只是想要檢查一下這個帳戶的狀態的話,有什麼意義?畢竟 security analyzer 就能夠幫你檢查帳戶的狀態,你完全沒有必要寫指令碼。但是如果你想要做的不僅僅是檢查一下帳戶的狀態而是想把開啟的帳戶全部關閉呢?單單靠 security analyzer 是不能完成上述兩步的,但是你可以通過編寫指令碼來完成。 

這也就是我們想在這裡指出的。(如果你讀過adsi scriptomatic readme也許覺得很難相信,但是 scripting guys 實際上做的還是有點道理的)。指令碼是乙個很有用的工具,因為它可以幫助你得到與安全性相關的資訊,但是它之所以成為必不可少的工具,其原因在於它可以對收集到的資訊進行處理。這就是我們所要展示的:我們將向你展示 security analyzer 檢索的資訊,我們也想你展示如何通過編寫能夠檢索同樣資訊的指令碼。然後,在可能的時候,我們向你展示如何通過修改指令碼來使它能夠對檢索的資訊進行處理。 

完全公布。好了,我們可能說的稍微有點誇張了:考慮到篇幅的原因,我們並不打算在此介紹 security analyzer 的所有功能。所以,

我們會跳過中間的某些步驟,比如校驗 sql 伺服器的帳戶密碼。

希望你沒有什麼意見;bentley 說他沒問題。 

順便說一句,我們可能會在以後的專欄中更加深入地**與安全有關的話題。

例如,我們會解釋(或者至少試著解釋)安全識別符號奇怪而神秘的世界以及如何通過指令碼來控制它。我們也會向你展示指令碼在管理補丁程式和安全補丁方面發揮的作用。但是現在我們暫且先把這些內容擱置一旁。現在,就讓我們不受任何打擾,開始講解 security analyzer 能做什麼以及如何通過指令碼來實現相同的功能。 

注意: 再打擾一下。為了使我們的指令碼片段盡可能短,你在這裡看到的指令碼都是針對單機(本地單機)的。security analyzer 的實力在於它可以針對多機使用。指令碼是否也能夠做到呢?你猜猜看;有關更多詳細資訊請參閱前一期指令碼故事專欄。擦亮你的眼睛,看看 runomatic 是如何貼到指令碼中心的。 

什麼是 runomatic?你不想我們來破壞你自己找到答案時的那種驚奇感,是吧? 

任務1:檢索計算機名 

老實告訴你吧,通過指令碼來檢索計算機名的途徑數不勝數。但是因為 wmi 將要成為檢索資訊的主流技術,所以我們所展示的是一段返回目標計算機名稱的 

wmi 指令碼。 

strcomputer = "." 

set objwmiservice = getobject("winmgmts:\" & strcomputer & "\root\cimv2") 

set colcomputers = objwmiservice.execquery _ 

("select * from win32_computersystem") 

for each objcomputer in colcomputers 

wscript.echo objcomputer.name 

next 

這看起來似乎有點可笑,尤其是這段指令碼只是針對單機執行的時候。但是當它的目標計算機有 100 臺的時候,它能夠幫助我們將各台計算機區分開來。 

任務2:檢索 ip 位址 

通過指令碼實現 ip 位址檢索同樣非常簡單: 

strcomputer = "." 

set objwmiservice = getobject("winmgmts:\" & strcomputer & "\root\cimv2") 

set ipconfigset = objwmiservice.execquery _ 

("select ipaddress from win32_networkadapterconfiguration " _ 

"where ipenabled=true") 

for each ipconfig in ipconfigset 

if not isnull(ipconfig.ipaddress) then 

for each straddress in ipconfig.ipaddress 

wscript.echo straddress 

next 

end if 

next 

在判定一台計算機的 ip 位址時,只要注意兩點。第一,wmi 將包括 vpn 和 ras 連線在內的所有東西都認為是計算機網路介面卡設定的一部分,為此,我們需要使用 where 語句where ipenabled = true來將返回的資訊限定為實際網路介面卡的資訊。 

第二,ip 位址通常以陣列的形式返回,因此我們需要用乙個 for-each 迴圈來獲得真正的 ip 位址。如果我們直接回應 ip 位址屬性值的話,

將會發生"類匹配"錯誤。 

任務3:報告安全檢查進行的日期和時間 

實現這個功能也是非常的容易,但是鑑於我們複製絕大多數 security analyzer 的功能,下面是一行返回日期和時間的**: 

wscript.echo now 

你們有人不是覺得指令碼是非常高深的嗎!其實就這麼簡單。)(未完待序)

管理小故事 2

管理小故事 2 主人頓時醒悟,趕緊去邀請當初給予建議的那個客人來吃酒。心得 一般人認為,足以擺平或解決企業經營過程中的各種棘手問題的人,就是優秀的管理者,其實這是有待商榷的,俗話說 預防重於 能防患於未然之前,更勝於治亂於已成之後,由此觀之,企業問題的預防者,其實是優於企業問題的解決者。故事 秀才買...

愛情故事(2)

愛的故事 男孩和女孩初戀的時候 男孩為女孩折了一千隻紙鶴 掛在女孩 的房間裡。男孩對女孩說 這一千隻紙鶴 代表我一千份心意。那時候 男孩和女孩分分秒秒都在感受著戀愛的甜蜜和幸福。後來女孩漸漸疏遠了男孩。女孩結婚了 去了法國 去了無數次 出現在她夢中的巴黎。女孩和男孩分手的時候 對男孩說 我們都必 須...

C primer plus 字串的故事2

1 每次讀取一行輸入 getline 和get 函式都讀取一行輸入,直到達到換行符,但是getline 將丟棄換行符,get 將換行符保留在輸入序列中 2 首先介紹getline 呼叫方法是cin.getline 如果陣列只有19個字元,餘下空間用於儲存自動在結尾處新增空字元,getline 成員函...