Salt-stack 与 Pam.d 一起工作

Salt-stack working with Pam.d

所有系统运行宁RHEL6 因此,我的最终目标是能够拥有状态控制的 pam 配置(system-authpassword-auth)。这也不会干扰可能需要在本地系统到系统的基础上发生的更改。

本质上,我想为 pam_cracklib 之类的东西添加行到 pam 配置文件,而不必用 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,因此 appendingprependingfile.replace 的限制会导致问题。

另一个例子是 pam_faillock.so,它需要插入到非常特定的行中。 IE 在其他重要的 pam 模块之前或之后。

我考虑过硬着头皮使用 file.managed 为我的系统强制执行一个统一的 pam 文件,然后根据需要创建例外以保持其他功能正常运行,但这感觉很像绘画我自己陷入了困境。

关于处理特定项目位置放置而不强制执行整个文件的方法有什么建议吗?在 sed 中,我可以使用 () 和转义符 </code>、<code> 来保留部分模式,并结合 newlines 等等,我可以寻找一种模式并替换一行上方或下方的文本,然后继续。但据我所知,file.replace 无法做到这一点。我想我可以简单地用 cmd.run 发出一个 sed 命令,但是我不得不对每次执行状态时它都会 运行 的事实感到恼火。

  • 听说Auegas is supposed to address generic read-write access to various configuration files - Salt has its module. There is a PAM lense
  • 另一个指针是 file.managed with marker_start and marker_end parameters. This approach works perfectly for simple configurations like hosts file,其中手动维护的部分与自动强制执行的部分分开。

一般说明

支持系统上各种配置文件的语法自动修改是一个根本性的难题。完全覆盖目标文件的模板提供了具有您所述限制的通用方法。如果需要读取目标文件并有条件地对其原始内容应用一些修改,则通用方法的复杂性会爆炸式增长。

考虑自动更改(手动编写)源代码,同时保持其可读性并保证运行时语义正确,对所有排名前 10 的编程语言都这样做。

即使一般格式很简单(例如文本行),仍然无法满足使用此配置的软件的期望。行的顺序重要吗?重复的行是非法的吗?是否应保留评论?