You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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'

关键说明

  1. 正则表达式^\s*auth\s+required\s+pam_env\.so\s*$:
    • \s*适配行首、行尾的任意空白缩进,避免因格式差异匹配失败;
    • pam_env\.so中的\.是转义处理,防止点号被正则当作通配符解析。
  2. backrefs: yes确保仅修改匹配到的目标行,不影响其他内容;
  3. 替换行'\1 123'通过引用捕获的完整行,再追加123,完全符合你的预期结果。

如果需要兼容更宽松的空白格式,可将正则调整为:

^(\s*auth\s+required\s+pam_env\.so)\s*$

替换行保持'\1 123'即可。

内容的提问来源于stack exchange,提问作者user16015449

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:23:23