Linux用户访问控制的核心是PAM,其通过auth、account、password、session四类模块分别处理身份验证、授权检查、密码管理与会话操作;account模块常用于时间与组权限控制,如结合pam_time.so和pam_access.so实现细粒度策略;多模块可按顺序与控制标志构成条件化授权链,调试时需保留root访问、查看日志并模拟登录。

Linux 用户访问控制的核心之一是 Pluggable Authentication Modules(PAM),它不直接管理用户账户,而是为系统服务提供统一、模块化的认证与授权入口。真正实现“灵活的授权策略”,关键在于合理配置 PAM 模块及其控制标志、条件判断和堆叠逻辑。
理解 PAM 的四类模块作用
PAM 将策略拆解为四个职责明确的模块类型,每类处理不同阶段的访问决策:
- auth:验证用户身份(如密码、指纹、OTP),可设置失败重试次数、锁定账户或跳过后续检查
- account:执行授权检查(非认证),例如限制登录时段、Shell 类型、组成员资格、密码过期状态
- password:管理密码更新逻辑,支持多机制并行(如同时校验旧密码强度和新密码复杂度)
- session:在会话建立/结束时触发操作,比如记录登录日志、挂载用户家目录、设置环境变量或限制资源使用
用 account 模块实施细粒度时间与组权限控制
最常用也最易见效的授权策略集中在 account 类模块。例如,禁止某组用户在非工作时间登录:
在 /etc/pam.d/sshd 中添加:
account [default=ignore] pam_time.so
再编辑 /etc/security/time.conf,写入:
*;Al0700-1900;devgroup;Al
表示:所有服务(*)、工作日(Al)、07:00–19:00 之间,仅允许 devgroup 成员通过;其他时间该组用户被拒绝,且不提示具体原因。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
类似地,可用 pam_access.so 控制 IP 或主机名白名单:
account required pam_access.so accessfile=/etc/security/access.conf
组合多个模块实现条件化授权链
PAM 支持按顺序执行多个模块,并通过控制标志(如 [success=ok default=bad])决定是否继续或中断。一个典型场景是:仅当用户属于特定组且满足时间策略时才允许 SSH 登录。
在 /etc/pam.d/sshd 中按顺序配置:
-
account [success=ok default=ignore] pam_succeed_if.so user ingroup admin—— 若是 admin 组成员,跳过后续 account 检查 -
account requisite pam_time.so—— 否则强制执行 time.conf 规则 -
account required pam_deny.so—— 所有未显式放行的请求最终拒绝
这种“先放行特例、再收紧默认”的写法比全盘 deny 更安全、更易维护。
调试与验证 PAM 策略是否生效
策略错误常导致无法登录,因此必须在安全环境下测试:
- 始终保留 root 的本地终端访问(避免完全锁死)
- 用
journalctl -u sshd -n 50 --no-pager查看认证失败的具体模块和返回码 - 临时启用 debug 日志:在对应 PAM 行末尾加
debug参数(如pam_time.so debug) - 用
getent group <groupname>和login -f <username>(需 root 权限)模拟登录流程
注意:修改 /etc/pam.d/ 下文件后,无需重启服务,策略即时生效(但已有会话不受影响)。

















