本地組策略與安全策略的自動導入
http://blog.csdn.net/wzsy/article/details/5754894
昨天接到一個需求,由於公司要求服務器要部署必需的一些安全策略,但是對於未加入域的服務器希望能有一個便捷的部署辦法。
首先,提取出需要部署的策略中能通過組策略或安全策略實施的項如表所示(部分演示):
序號 | 要求 |
1 | “密碼必須符合復雜性要求”選擇“已啟動” |
2 | “密碼最長存留期”設置為“90天” |
3 | “賬戶鎖定閥值”設置為小於或等於 6次 |
4 | “從遠端系統強制關機”設置為“只指派給Administrtors組” |
5 | “關閉系統”設置為“只指派給Administrators組” |
6 | “取得文件或其它對象的所有權”設置為“只指派給Administrators組” |
7 | 審核登錄事件,設置為成功和失敗都審核。 |
8 | “審核策略更改”設置為“成功” 和“失敗”都要審核 |
9 | “審核對象訪問”設置為“成功”和“失敗”都要審核 |
10 | “審核目錄服務器訪問”設置為“成功” 和“失敗”都要審核 |
11 | “審核目錄服務器訪問”設置為“成功” 和“失敗”都要審核 |
12 | “審核系統事件”設置為“成功” 和“失敗”都要審核 |
13 | “審核賬戶管理”設置為“成功” 和“失敗”都要審核 |
14 | “審核過程追蹤”設置為 “失敗”需要審核 |
15 | “Microsoft網絡服務器”設置為“在掛起會話之前所需的空閑時間”為15分鍾。 |
16 | 啟用屏幕保護程序,設置等待時間為“5分鍾”,啟用“在恢復時使用密碼保護”。 |
17 | 所有驅動器均“關閉自動播放” |
上表中前15項屬於安全策略,第16項屬於組策略中的計算機配置策略,第17項屬於用戶配置策略。下面僅對Windows 2003平台的操作進行了分析與測試。
一、 對於安全策略,可以用以下步驟進行應用部署:
::在測試用機上,先使用gpedit.msc手工更改策略(如表中前15面),再用以下命令導出當前策略
secedit /export /cfg sec.inf
::用文本編輯器編輯sec.inf文件,去除不需要調整的內容,僅保留要定制策略
表中15條策略對應的inf文件內容如下:
[Unicode] |
::用命令生成一個sdb文件
secedit /configure /db sec.sdb /cfg sec.inf
::用命令把定制策略更新到目標服務器,不能用/overwrite參數,否則除定制策略外的其它策略丟失
secedit /configure /db sec.sdb
::刷新組策略
gpupdate /force
二、其他組策略的應用
以前曾經研究過利用gpcvreg與gpscript命令行程序來應用組策略,並且寫了autoit3腳本的UDF,這次正好可以利用。
使用gpedit.msc在測試機修改16/17兩條策略,在不關閉gpedit.msc的同時用regedit查看HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Group Policy Objects下,分析得到相應設置並存成Reg文件
machine.reg, 禁用所有驅動器自動播放
[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer] "NoDriveTypeAutoRun"=dword:000000FF |
user.reg,定制屏幕保護設置
[HKEY_CURRENT_USER/Software/Policies/Microsoft/Windows/Control Panel/Desktop] "ScreenSaverIsSecure"="1" "ScreenSaveActive"="1" "ScreenSaveTimeOut"="300" "SCRNSAVE.EXE"="scrnsave.scr" |
三、批量應用腳本
有了sec.sdb、machine.reg及user.reg文件,然后利用以前寫的poledit.au3 UDF ,只需要以下腳本就可以進行前文所列出的策略的自動應用了。
#RequireAdmin
#NoTrayIcon
#include "PolEdit.au3"
If FileExists("sec.sdb") Then RunWait(@ComSpec & " /c " & "secedit /configure /db sec.sdb", @ScriptDir, @SW_HIDE)
_RegWriteToPol("machine.reg", "MACHINE", 1)
_RegWriteToPol("user.reg")
_gpupdate()