#check authorization

# ========================
# 认证阶段 (auth)
# ========================

# 1. kysec安全策略
#   - required: 必须成功才能继续后续认证
#   - 如果 pam_kysec.so 失败，整个认证流程终止
auth       required       pam_kysec.so

# 2. 预认证失败锁定检查
#   - preauth: 在用户输入密码前检查失败计数器
#   - deny=3: 连续失败3次触发锁定
#   - even_deny_root: root用户同样受限制
#   - unlock_time=60: 锁定60秒后自动解锁
#   - audit: 记录审计日志
#   - 如果用户已锁定，此模块直接失败并终止流程
auth       required       pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=60

# 3. 标准Unix密码认证
#   - sufficient: 认证成功则跳过后续模块
#   - nullok: 允许空密码（根据需求决定是否保留）
#   - try_first_pass: 尝试复用之前输入的密码（如来自其他模块）
#   - 若成功，标记为认证通过，但不执行后续的 pam_faillock.so authsucc
auth       sufficient     pam_unix.so nullok try_first_pass

# 4. 认证失败处理
#   - authfail: 仅在认证失败时触发（如密码错误）
#   - default=die: 直接终止认证流程（不执行后续模块）
#   - 记录失败次数，若达到阈值则返回锁定状态
auth       [default=die]  pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60

# 5. 认证成功后的计数器重置
#   - authsucc: 仅在认证成功时触发
#   - sufficient: 成功执行后跳过后续模块
#   - 重置用户的失败计数器
#   - 问题：由于 pam_unix.so 已标记为 sufficient，此模块永远不会执行！
auth       sufficient     pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=60

# 6. 安全兜底拒绝
#   - 若前面所有模块未通过，最终拒绝访问
auth       required       pam_deny.so


# ========================
# 账户管理阶段 (account)
# ========================

# 1. 检查Unix账户状态
#   - 验证账户是否过期、是否被锁定
account    required       pam_unix.so

# 2. 二次确认失败锁定状态
#   - 检查 pam_faillock 的锁定状态
account    required       pam_faillock.so

# 3. 默认允许访问
#   - 若前面模块未拒绝，则允许通过
account    required       pam_permit.so
