如何通过Ansible管理PAM common-account的允许登录组pam_succeed_if规则
你设想的直接给pam_succeed_if.so传入外部组文件路径的写法并不支持,原生pam_succeed_if.so没有读取外部列表的能力,你可以采用以下两种更简便的方案解决配置维护问题:
方案一:使用pam_listfile.so实现外部组列表管理
这个是PAM自带的标准模块,完全可以实现你想要的读取外部组列表的效果,无需手动维护多条组校验规则,也不需要调整success计数:
# 原有基础认证逻辑保持不变 account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 new_authtok_reqd=done default=ignore] pam_sss.so use_first_pass account requisite pam_deny.so # 系统用户直接放行 account [default=ignore success=done] pam_succeed_if.so quiet uid < 10000 # 读取外部组列表,匹配到任意一个组就放行 account required pam_listfile.so item=group sense=allow file=/etc/login_allowed_groups onerr=fail # 原有收尾规则保持不变 account required pam_permit.so account required pam_tally2.so
你只需要在/etc/login_allowed_groups文件中每行写一个允许登录的组名即可,新增允许组的时候只需修改这个列表文件,PAM主配置完全不用改动,Ansible可以分别管理common-account模板和组列表文件,不受手动修改的影响。
方案二:调整规则动作取消success计数依赖
如果你不想引入外部文件,也可以修改现有pam_succeed_if.so的规则动作,把逐行递减的success数字替换为done,匹配到规则后直接终止当前校验阶段返回成功,不需要计算跳过行数:
# 原有基础认证逻辑保持不变 account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 new_authtok_reqd=done default=ignore] pam_sss.so use_first_pass account requisite pam_deny.so # 系统用户直接放行 account [default=ignore success=done] pam_succeed_if.so quiet uid < 10000 # 允许组规则,所有规则参数完全一致,新增规则直接复制粘贴即可 account [default=ignore success=done] pam_succeed_if.so user ingroup SGOps account [default=ignore success=done] pam_succeed_if.so user ingroup SGDev account [default=ignore success=done] pam_succeed_if.so user ingroup SGAnsible account [default=ignore success=done] pam_succeed_if.so user ingroup SGDba account [default=ignore success=done] pam_succeed_if.so user ingroup SGAdmin account [default=ignore success=done] pam_succeed_if.so user ingroup SGTSAdmins # 所有允许规则都不匹配则拒绝登录 account requisite pam_deny.so # 原有收尾规则保持不变 account required pam_permit.so account required pam_tally2.so
这种方式下新增允许组只需要新增一条相同参数的规则即可,不需要修改任何已有规则的参数,完全没有计数负担,用Ansible批量添加规则也非常方便。
配套Ansible管控建议
对于现有节点配置不一致的问题,可以先通过Ansible的pamd内置模块或者template模块全量覆盖所有节点的common-account文件,先拉齐配置基线,后续新增规则只需要更新模板即可。
注意:修改PAM配置前请务必保留一个已登录的root权限终端,测试新配置可以正常登录后再关闭终端,避免配置错误导致所有用户无法登录。
内容的提问来源于stack exchange,提问作者pragmatiker79
相关产品推荐
相关产品推荐

