我正在编写一个Python脚本,用于标记Windows CIS基准的输出。为了做到这一点,我正在使用正则表达式来匹配组策略设置中的值,以查看它们是否符合基准的标准。
对于基准的某些方面,需要在设置中呈现用户列表,但它必须是独占的,并且指定的顺序不必一致。
例如,“调整进程的内存配额”应为
我正在寻找一个可以匹配这些必需值的正则表达式,在任何顺序下类似于this,但仅在没有其他值存在时才匹配。
谢谢, Phil
一行基准csv文件的示例:
如果基准要求未达到,则最终输出将写入CSV文件(或以CSV格式打印在此处),格式为
对于基准的某些方面,需要在设置中呈现用户列表,但它必须是独占的,并且指定的顺序不必一致。
例如,“调整进程的内存配额”应为
Administrators,LOCAL SERVICE,NETWORK SERVICE
,但也可以显示为LOCAL SERVICE,NETWORK SERVICE, Administrators
,但不能为Administrators,LOCAL SERVICE,NETWORK SERVICE,phil
。我正在寻找一个可以匹配这些必需值的正则表达式,在任何顺序下类似于this,但仅在没有其他值存在时才匹配。
谢谢, Phil
编辑:这与使用正则表达式匹配包含两个名称的字符串和使用正则表达式匹配任意顺序的多个单词不同,因为它们不仅匹配这些单词。我想要的是仅匹配所需的名称,但顺序可以任意。
第二次编辑:该脚本从csv文件中加载一组规则,其中包含基准项编号、描述、所需值以及要与组策略设置进行匹配的正则表达式。其背后的思想是,我们将能够为任何基准创建一个包含规则的csv文件,并且脚本不需要预先知道设置是否应为数字、用户名列表、布尔值等。
规则从csv中加载到列表中(在下面的示例中为基准),并且策略设置从tsv中加载到第二个列表中(policy)。这使我尽可能地保持了对于使用哪个基准检查值的不可知性。
for row in benchmark:
if re.match(row[4],policy[row[2]]):
continue
print('"{}","{}","{}","{}"'.format(row[0],row[1],policy[row[2]],row[3]))
一行基准csv文件的示例:
"2.2.5","Ensure 'Adjust memory quotas for a process' is set to 'Administrators,LOCAL SERVICE,NETWORK SERVICE'","Adjust memory quotas for a process","Administrators, LOCAL SERVICE, NETWORK SERVICE","<insert regex here>"
如果基准要求未达到,则最终输出将写入CSV文件(或以CSV格式打印在此处),格式为
项目编号,项目描述,当前值,所需值
。