最近需要写一些 Windows 相关的安全加固脚本,Alliot 批处理写的不多,在这过程中遇到了一些小坑,本文对此做一些记录。
编码
批处理
编码一直是个遭天杀的东西,Windows 下的批处理在包含中文字符的时候,应该使用 ANSI 的编码,编码字符集选择中文 - GB2312(Simplified),否则在运行的时候会出现乱码的情况。
.inf编码
与上面不同,组策略导出的 .inf 文件的编码为 Unicode(UTF-16)LE带签名,而不是 UTF-8。否则通过导入 .inf 配置文件来配置组策略的时候会出现失败或不生效的情况。
注册表与组策略
先来看二者的定义:注册表(registry)是 Windows 下储存系统与应用程序配置设置信息的数据库;组策略(Group Policy)是用来定义并控制程序、网络资源及操作系统行为的主要工具。其实说白了就是 Windows 大部分的系统、软件配置,是通过操作注册表来实现的,但是注册表不是很方便阅读,就出现了组策略这个东西,绝大部分的组策略都有相对应的注册表键值。
注册表操作
在 “HKEY_CURRENT_USER\Control Panel\Desktop” 下添加一个类型为 “REG_SZ” 的ScreenSaveActive” 注册表,数值为 “1”(存在则修改):1
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d "1" /f
其中 “HKEY_CURRENT_USER\Control Panel\Desktop” 表示注册表路径,”/v” 表示注册表 Value
(名称),”/t” 表示类型,”/d” 表示数值,”/f” 表示强制。
每个注册表对应的含义到哪里找呢?
微软的文档
组策略操作
批处理对组策略修改,推荐使用将现有的策略导出后进行修改。
导出现有的组策略
1 | secedit /export /cfg gp.inf |
组策略 .inf 语法检查
1 | 组策略 .inf 语法检查 |
导入组策略(这里要注意 .inf 文件的编码)
1 | secedit /configure /db 1.sdb /cfg 1gp.inf /log 1.log /quiet |
其中 “/db” 指定用来执行安全性配置的数据库,”/cfg” 指定在配置次计算机前要导入到数据库的安全性模板,”/log” 指定要记录配置操作状态的文件,”/quiet” 指定配置操作的执行不需要提示用户进行任何确认。
强制刷新组策略
1 | gpupdate /force |