指令碼的故事(2)
本頁內容
知識就是力量
最後的思考
知識就是力量
好了,好了:站在走廊上往下看,看那些手中掌握實權的傢伙們。我們有時很難理解,他們的權利到底和他們所掌握的知識有什麼聯絡。雖然事實如此,但是儘量多地掌握你所能得到的知識和資訊畢竟不是一件壞事,這對於電腦保安這個問題尤其正確。你對於你的計算機以及它的設定知道得越清楚,那麼你也就越有信心。這就是為什麼電腦保安專家們建議大家對自己的計算機進行階段性安全檢查的
原因。那麼現在就剩一個問題:如何正確地進行這項階段性安全檢查?
事實上, Microsoft 已經發布了一款小巧實用的工具——Microsoft Baseline Security Analyzer——它能夠幫助你完成這項安全檢查。(我希望你已經下載了這個免費的小工具,如果還沒有,請點選此處下載。)這款小工具的功能如其名稱所示:它能夠對一臺計算機(如果你願意,也可以是多臺)進行分析,指出潛在的安全隱患,例如沒有安裝的安全補丁或者密碼設定過於簡單(甚至完全沒有密碼)的本地帳戶。此軟體個頭雖小但卻非常有用,無論是在家裡還是辦公室它都是必備軟體。
當然,現在你也許在想:”好吧,既然 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 & ”
ootcimv2″)
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 & ”
ootcimv2″)
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
知識就是力量
最後的思考
知識就是力量
好了,好了:站在走廊上往下看,看那些手中掌握實權的傢伙們。我們有時很難理解,他們的權利到底和他們所掌握的知識有什麼聯絡。雖然事實如此,但是儘量多地掌握你所能得到的知識和資訊畢竟不是一件壞事,這對於電腦保安這個問題尤其正確。你對於你的計算機以及它的設定知道得越清楚,那麼你也就越有信心。這就是為什麼電腦保安專家們建議大家對自己的計算機進行階段性安全檢查的
原因。那麼現在就剩一個問題:如何正確地進行這項階段性安全檢查?
事實上, Microsoft 已經發布了一款小巧實用的工具——Microsoft Baseline Security Analyzer——它能夠幫助你完成這項安全檢查。(我希望你已經下載了這個免費的小工具,如果還沒有,請點選此處下載。)這款小工具的功能如其名稱所示:它能夠對一臺計算機(如果你願意,也可以是多臺)進行分析,指出潛在的安全隱患,例如沒有安裝的安全補丁或者密碼設定過於簡單(甚至完全沒有密碼)的本地帳戶。此軟體個頭雖小但卻非常有用,無論是在家裡還是辦公室它都是必備軟體。
當然,現在你也許在想:”好吧,既然 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 & ”
ootcimv2″)
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 & ”
ootcimv2″)
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
你們有人不是覺得指令碼是非常高深的嗎!其實就這麼簡單。)(未完待序)
本文轉自starger51CTO部落格,原文連結:http://blog.51cto.com/starger/20188 ,如需轉載請自行聯絡原作者
相關文章
- 指令碼的故事(4)指令碼
- 用指令碼來講一個技術生活的故事指令碼
- DBA指令碼 (2)指令碼
- wrk(2)- Lua 指令碼的使用指令碼
- shell指令碼例項(2)指令碼
- ORACLE常用SQL指令碼2OracleSQL指令碼
- 2. 指令碼、模組、包指令碼
- 【DB2學習】db2profile的指令碼DB2指令碼
- [Oracle] rman備份指令碼(2)Oracle指令碼
- 指令碼迴圈基礎(2)指令碼
- 用Ant構建指令碼(2)指令碼
- [Unity2D]指令碼的使用規則Unity指令碼
- 【python】簡單的備份指令碼2Python指令碼
- 《程式碼之美》的故事
- 【位元熊故事匯】2月MVP英雄故事|有愛的開源MVP
- 生成insert指令碼的指令碼指令碼
- 主題 2 Shell工具和指令碼指令碼
- db2巡檢小指令碼DB2指令碼
- Python指令碼典型報錯(2)Python指令碼
- DB2多次抓取快照指令碼DB2指令碼
- 理解 shell 指令碼中的常見用法: 2>&1指令碼
- DB2的一些管理用指令碼DB2指令碼
- SQL指令碼生成的一些BUG(2)(轉)SQL指令碼
- go原始碼解析-Println的故事Go原始碼
- 開始你的第一個JMeter指令碼:利用Jmeter錄製指令碼的2種方法彙總JMeter指令碼
- 解剖Nginx·自動指令碼篇(2)設定初始變數指令碼 auto/initNginx指令碼變數
- 2.awd初階_指令碼掃描指令碼
- db2 如何模擬indobt transactions 用到的指令碼DB2指令碼
- RAC 節點2刪除自己的歸檔指令碼指令碼
- 精讀Nginx原始碼·自動指令碼篇(2)設定初始變數指令碼 auto/initNginx原始碼指令碼變數
- dyld背後的故事&原始碼分析原始碼
- 程式碼故事:漢德的救贖
- Redis的指令碼Redis指令碼
- 【DBA 指令碼】查詢current open cursor的指令碼指令碼
- Sqlserver查詢alwayson同步情況指令碼(2)SQLServer指令碼
- shell指令碼中/dev/null 2>&1詳解指令碼devNull
- DB2日常監控指令碼DB2指令碼
- 監控DB2資料庫指令碼DB2資料庫指令碼