Linux中grep正则[\s]*匹配结果及Nessus检测正确性问询
命令匹配逻辑与规则正确性说明
首先看你给出的命令:
/usr/bin/authselect current | /usr/bin/grep 'Profile[\s]*ID:'
grep 默认使用基本正则表达式,这种语法下\s不会被识别为空白字符的元字符,[\s]仅会匹配单个\或者单个s字符。所以你列出的两个结果确实会被命中:
ProfilesID: sssd中Profile后紧跟s,符合匹配规则Profile\ID: sssd中Profile后紧跟\,也符合匹配规则
但authselect current的正常输出里,Profile和ID之间是空白字符,比如默认输出Profile ID: sssd,这种完全符合业务预期的结果反而不会被这条命令匹配到。
如果这条命令是Nessus检测规则的核心匹配逻辑,用来判断系统是否启用了对应profile,那这条规则确实存在错误:
- 正常的合规结果无法被命中,会产生大量漏报
- 不符合预期的异常格式字符串反而会被命中,存在误报风险
正确的写法可以调整正则适配grep默认语法,改为grep 'Profile[[:space:]]*ID:',或者给grep添加-P参数启用PCRE正则支持,让\s可以正常识别为空白元字符。
内容的提问来源于stack exchange,提问作者chabo
相关产品推荐
相关产品推荐

