使用Ansible lineinfile模块及Python正则修改system-auth文件遇问题
解决Ansible lineinfile模块修改pam.d/system-auth的问题
你的问题出在正则表达式的分组逻辑和替换规则上:
- 当前正则
^((auth).+)((require).+)(pam_env.so)*$的贪婪匹配导致(auth).+捕获了从auth开始到行尾的大部分内容,后续分组没有实际生效; - 替换行
'\1 123'只引用了第一个分组的内容,最终只保留了auth开头的片段,丢失了required pam_env.so部分。
修正后的Playbook配置
- name: CIS Ensure password requirements lineinfile: path: /var/tmp/system-auth backrefs: yes # 匹配目标行并捕获完整内容,兼容行首/行尾的空白符 regexp: ^(\s*auth\s+required\s+pam_env\.so\s*)$ # 在捕获的整行末尾追加内容 line: '\1 123'
关键说明
- 正则表达式
^\s*auth\s+required\s+pam_env\.so\s*$:\s*适配行首、行尾的任意空白缩进,避免因格式差异匹配失败;pam_env\.so中的\.是转义处理,防止点号被正则当作通配符解析。
backrefs: yes确保仅修改匹配到的目标行,不影响其他内容;- 替换行
'\1 123'通过引用捕获的完整行,再追加123,完全符合你的预期结果。
如果需要兼容更宽松的空白格式,可将正则调整为:
^(\s*auth\s+required\s+pam_env\.so)\s*$
替换行保持'\1 123'即可。
内容的提问来源于stack exchange,提问作者user16015449
相关产品推荐
相关产品推荐

