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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:54:05