Submitted by firehack on 2007, December 9, 5:32 AM. Collection
組策略是建立Windows安全環境的重要手段,尤其是在Windows域環境下。一個出色的系統管理員,應該能熟練地掌握並應用組策略。在窗口界面下訪問組策略用gpedit.msc,命令行下用secedit.exe。
先看secedit命令語法:
secedit /analyze
secedit /configure
secedit /export
secedit /validate
secedit /refreshpolicy
5個命令的功能分別是分析組策略、配置組策略、導出組策略、驗證模板語法和更新組策略。其中secedit /refreshpolicy 在XP/2003下被gpupdate代替。這些命令具體的語法自己在命令行下查看就知道了。
與訪問註冊表只需reg文件不同的是,訪問組策略除了要有個模板文件(還是inf),還需要一個安全數據庫文件(sdb)。要修改組策略,必須先將模板導入安全數據庫,再通過應用安全數據庫來刷新組策略。來看個例子:
假設我要將密碼長度最小值設置爲6,並啓用“密碼必須符合複雜性要求”,那麼先寫這麼一個模板:
[version]
signature="$CHICAGO$"
[System Access]
MinimumPasswordLength = 6
PasswordComplexity = 1
保存爲gp.inf,然後導入:
secedit /configure /db gp.sdb /cfg gp.inf /quiet
這個命令執行完成後,將在當前目錄產生一個gp.sdb,它是“中間產品”,你可以刪除它。
/quiet參數表示“安靜模式”,不產生日誌。但根據我的試驗,在2000sp4下該參數似乎不起作用,XP下正常。日誌總是保存在%windir%/security/logs/scesrv.log。你也可以自己指定日誌以便隨後刪除它。比如:
secedit /configure /db gp.sdb /cfg gp.inf /log gp.log
del gp.*
另外,在導入模板前,還可以先分析語法是否正確:
secedit /validate gp.inf
那麼,如何知道具體的語法呢?當然到MSDN裏找啦。也有偷懶的辦法,因爲系統自帶了一些安全模板,在%windir%/security/templates目錄下。打開這些模板,基本上包含了常用的安全設置語法,一看就懂。
再舉個例子——關閉所有的“審覈策略”。(它所審覈的事件將記錄在事件查看器的“安全性”裏)。
echo版:
echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Event Audit] >>1.inf
echo AuditSystemEvents=0 >>1.inf
echo AuditObjectAccess=0 >>1.inf
echo AuditPrivilegeUse=0 >>1.inf
echo AuditPolicyChange=0 >>1.inf
echo AuditAccountManage=0 >>1.inf
echo AuditProcessTracking=0 >>1.inf
echo AuditDSAccess=0 >>1.inf
echo AuditAccountLogon=0 >>1.inf
echo AuditLogonEvents=0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log /quiet
del 1.*
也許有人會說:組策略不是保存在註冊表中嗎,爲什麼不直接修改註冊表?因爲不是所有的組策略都保存在註冊表中。比如“審覈策略”就不是。你可以用 regsnap比較修改該策略前後註冊表的變化。我測試的結果是什麼都沒有改變。只有“管理模板”這一部分是完全基於註冊表的。而且,知道了具體位置,用哪個方法都不復雜。
比如,XP和2003的“本地策略”-》“安全選項”增加了一個“本地帳戶的共享和安全模式”策略。XP下默認的設置是“僅來賓”。這就是爲什麼用管理員帳號連接XP的ipc$仍然只有Guest權限的原因。可以通過導入reg文件修改它爲“經典”:
echo Windows Registry Editor Version 5.00 >1.reg
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa] >>1.reg
echo "forceguest"=dword:00000000 >>1.reg
regedit /s 1.reg
del 1.reg
而相應的用inf,應該是:
echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Registry Values] >>1.inf
echo MACHINE/System/CurrentControlSet/Control/Lsa/ForceGuest=4,0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log
del 1.*
關於命令行下讀取組策略的問題。
系統默認的安全數據庫位於%windir%/security/database/secedit.sdb,將它導出至inf文件:
secedit /export /cfg gp.inf /log 1.log
沒有用/db參數指定數據庫就是採用默認的。然後查看gp.inf。
不過,這樣得到的只是組策略的一部分(即“Windows設置”)。而且,某個策略如果未配置,是不會被導出的。比如“重命名系統管理員帳戶”,只有被定義了纔會在inf文件中出現NewAdministratorName="xxx"。對於無法導出的其他的組策略只有通過訪問註冊表來獲得了。
此辦法在XP和2003下無效——可以導出但內容基本是空的。原因不明。根據官方的資料,XP和2003顯示組策略用RSoP(組策略結果集)。相應的命令行工具是gpresult。但是,它獲得的是在系統啓動時被附加(來自域)的組策略,單機測試結果還是“空”。所以,如果想知道某些組策略是否被設置,只有先寫一個inf,再用secedit /analyze,然後查看日誌了。
轉載請以鏈接形式註名來源:SEO雜碎 - Secedit:命令行下操作組策略找工具