【发布时间】:2015-11-19 17:36:53
【问题描述】:
所有系统运行RHEL6
所以,我的最终目标是能够拥有状态控制的 pam 配置(system-auth 和 password-auth)。这也不会干扰可能需要在本地系统到系统基础上发生的更改。
基本上我想在 pam 配置文件中添加诸如 pam_cracklib 之类的行,而不必用 file.managed 覆盖整个文件
当前system-auth的示例(不是完整示例,已删除一些项目)
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass
auth requisite pam_succeed_if.so uid >= 100 quiet
auth required pam_deny.so
account required pam_unix.so broken_shadow
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=24
password required pam_deny.so
一个示例问题:
我需要这条线:
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 minlen=12 ucredit=-1 ocredit=-1 lcredit=-1 difok=3
使用这些设置出现在pam_unix.so 条目的password 行上方,如下所示:
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 minlen=12 ucredit=-1 ocredit=-1 lcredit=-1 difok=3
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=24
在某些情况下,pam_cracklib 可能已经存在,我可以简单地使用file.replace 状态为pam_cracklib 找到pattern 并将其替换为好的行。在其他情况下,可能需要添加 pam_cracklib,因此 file.replace 或 appending 或 prepending 的限制会导致问题。
另一个例子是pam_faillock.so,它需要插入到非常具体的行上。 IE 在其他重要的 pam 模块之前或之后。
我考虑过硬着头皮使用file.managed 将统一的pam 文件强制执行到我的系统中,然后根据需要进行异常以保持其他功能正常运行,但这感觉就像把自己逼到角落里一样.
关于在不强制执行整个文件的情况下处理特定项目位置放置的方法有什么建议吗?在sed 中,我可以使用() 和escape 的\1、\2 来保留部分模式,并结合newlines 等等,我可以查找模式并替换文本高于或低于一条线,然后继续前进。但据我所知,file.replace 无法做到这一点。我想我可以简单地使用cmd.run 发出一个sed 命令,但是我不得不对每次强制执行状态时都会运行的事实感到恼火。
【问题讨论】:
标签: regex linux sed salt-stack rhel6