策略要求 一
在一个小时内用户累积失败5次后账户被锁定600秒(10分钟)。账户在锁定期间正确密码也无法登录。
password-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
# 在认证之前检查失败尝试。如果一个账户在未认证的情况下已经累计了三次失败尝试,那么该账户将被锁定两分钟(120秒)
auth requisite pam_faillock.so preauth silent audit deny=5 unlock_time=120 fail_interval=3600 # 新增
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
# 确保在密码验证失败后更新失败尝试的记录。
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=120 fail_interval=3600 # 新增
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
# 系统会检查账户是否因密码输错过多而被锁定,并阻止被锁定账户的登录。
account required pam_faillock.so # 新增
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth requisite pam_faillock.so preauth silent audit deny=3 unlock_time=120 fail_interval=3600 #新增
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=120 fail_interval=3600 #新增
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
account required pam_faillock.so # 新增
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
策略要求 二
用户累积失败5次后账户被锁定600秒(10分钟)。账户在锁定期间正确密码可以正常登录。
pass
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
# 指明在 pam_unix.so 模块成功后应该跳过一个后续模块,直接执行下下一个模块。
auth [success=1 default=ignore] pam_unix.so nullok # 新增
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=120 # 新增
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
account required pam_faillock.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
password-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth [success=1 default=ignore] pam_unix.so nullok # 新增
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=120 # 新增
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
account required pam_faillock.so # 新增
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
查看日志输出
# tail -f /var/log/secure
Apr 28 06:50:48 localhost sshd[4647]: Failed password for yunwei from 192.168.174.130 port 44938 ssh2
Apr 28 06:50:48 localhost unix_chkpwd[4650]: password check failed for user (yunwei)
Apr 28 06:50:50 localhost sshd[4647]: Failed password for yunwei from 192.168.174.130 port 44938 ssh2
Apr 28 06:50:51 localhost unix_chkpwd[4651]: password check failed for user (yunwei)
Apr 28 06:50:53 localhost sshd[4647]: Failed password for yunwei from 192.168.174.130 port 44938 ssh2
Apr 28 06:50:53 localhost sshd[4647]: Connection closed by 192.168.174.130 port 44938 [preauth]
Apr 28 06:50:53 localhost sshd[4647]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.174.130 user=yunwei
Apr 28 06:51:04 localhost sshd[4652]: reverse mapping checking getaddrinfo for bogon [192.168.174.130] failed - POSSIBLE BREAK-IN ATTEMPT!
Apr 28 06:51:07 localhost sshd[4652]: Accepted password for yunwei from 192.168.174.130 port 44940 ssh2
Apr 28 06:51:07 localhost sshd[4652]: pam_unix(sshd:session): session opened for user yunwei by (uid=0)
查看锁定用户信息
查看所有锁定用户信息
# faillock
yunwei:
When Type Source Valid
2024-04-28 06:50:23 RHOST 192.168.174.130 V
2024-04-28 06:50:25 RHOST 192.168.174.130 V
2024-04-28 06:50:28 RHOST 192.168.174.130 V
查看指定锁定用户
# faillock --user yunwei
yunwei:
When Type Source Valid
2024-04-28 06:50:23 RHOST 192.168.174.130 V
2024-04-28 06:50:25 RHOST 192.168.174.130 V
2024-04-28 06:50:28 RHOST 192.168.174.130 V
解除用户锁定
解除所有用户锁定
# faillock --reset
解除指定用户锁定
# faillock --user yunwei --reset
PAM 关键字说明
required: 这个关键字指定了所列模块是必须的,如果标记为required的模块失败,则认证或授权将立即失败。
requisite: 类似于required,但如果requisite模块失败,PAM会立即返回失败,不再检查其他模块。
sufficient: 如果sufficient模块成功,它会返回“成功”,然后PAM会继续检查其他模块。如果所有sufficient模块都失败,则PAM会继续检查required和requisite模块。
optional: 标记为optional的模块被视为可选的。即使optional模块失败,认证或授权也可以继续。
suggested: 该关键字并非PAM配置中的标准关键字,可能是某些特定系统或应用程序中添加的定制关键字。通常用于建议性的策略和模块。
preauth: 指明模块应在进行实际身份验证之前执行,对用户进行先前的验证。
account: 用于检查用户账户是否可用的模块,例如检查密码期限、用户活动等。
password: 用于更改用户密码的模块。
session: 处理用户会话建立和终止的模块,如在用户登录时启动会话或在用户注销时结束会话。
silent: 当模块失败时,不会产生错误消息或警告。
even_deny_root: 即使是root用户也将受到锁定的影响。
permanent_lockout = false: 设置账户暂时锁定,而非永久锁定。
authfail:认证失败时触发 faillock。
success:是一个控制指令,用于定义在一个模块成功完成后,PAM 应该跳过多少个后续模块而继续执行认证流程。如果指定了 success=1,PAM 将会跳过下一个模块,直接执行下下一个模块。如果指令是 success=2,那么在一个成功状态后,将会跳过两个模块,以此类推。
audit: 用于记录认证事件和日志的审计模块,可以将关键事件和信息写入系统的安全日志中。这些事件可以包括成功或失败的认证尝试、账户锁定、密码更改等。
reset_time=3600: 设置重置失败计数的时间间隔为3600秒(1小时),以实现累积失败次数的设定。
default: default 关键字用于指定当没有其他更具体的条件或情况匹配时应采取的默认行为。它通常与条件语句一起使用,用于定义在所有其他条件均未匹配时所应使用的行为。
default=ignore: 当未匹配任何其他规则时,default=ignore 表示忽略此模块,即不执行任何操作。
default=die: 当未匹配任何其他规则时,default=die 表示立即中止认证或授权过程,并返回失败状态。
default=bad: 在未匹配其他规则时,default=bad 表示返回失败状态,但允许继续尝试其他模块。
default=ok: 当未匹配任何其他规则时,default=ok 表示认证或授权成功,继续进行后续操作。
system-auth 文件说明
PAM配置文件用于控制用户身份验证、账户检查、密码更改等活动的策略。在CentOS系统中,PAM框架负责管理这些策略。
#%PAM-1.0 %PAM-1.0:标识这个文件遵循PAM 1.0的规范。这个文件是自动生成的,如果使用authconfig工具重新配置PAM,用户所做的更改将会被覆盖。
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
# 认证(auth)
auth required pam_env.so # 加载环境变量。
auth required pam_faildelay.so delay=2000000 # 在身份验证失败后延迟2秒再进行下一次尝试。
auth sufficient pam_unix.so nullok try_first_pass # 使用Unix标准认证,nullok允许空密码,try_first_pass尝试使用之前的密码。
auth requisite pam_succeed_if.so uid >= 1000 quiet_success # 仅当用户ID大于等于1000时认证才继续,quiet_success在成功时不输出信息。
auth required pam_deny.so # 默认拒绝所有认证,除非之前的某个模块已经成功。
# 账户管理(account)
account required pam_unix.so # 使用Unix账户管理。
account sufficient pam_localuser.so # 如果是本地用户,则此模块足够进行账户管理。
account sufficient pam_succeed_if.so uid < 1000 quiet # 对于UID小于1000的用户,此模块足以满足账户管理需求,quiet在成功时不输出信息。
account required pam_permit.so # 无条件允许。
# 密码管理(password)
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= # 强制密码质量要求,try_first_pass尝试使用前一密码,local_users_only只适用于本地用户,retry=3重试3次。
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok # 使用Unix密码管理,sha512使用SHA-512散列,shadow使用阴影密码文件,nullok允许空密码,use_authtok使用更新的认证令牌。
password required pam_deny.so # 默认拒绝所有密码更改请求。
# 会话管理(session)
session optional pam_keyinit.so revoke # 初始化关键会话并在会话结束时撤销它。
session required pam_limits.so # 应用限制,如文件大小、进程数等。
-session optional pam_systemd.so # 为会话启动systemd用户切片。
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid # 如果会话是由crond服务启动,则此模块成功执行,不输出信息,使用UID
session required pam_unix.so # 加载Unix风格会话管理。