pam_tally2 添加额外的失败登录

pam_tally2 添加额外的失败登录

我正在尝试pam_tally2/etc/pam.d银河系中使用

我将sshd更改为以下内容

#%PAM-1.0
auth     required       pam_securetty.so
auth     required       pam_tally2.so deny=3 unlock_time=600
auth     required       pam_env.so
auth     required       pam_unix.so
auth     required       pam_nologin.so
account  required       pam_unix.so
password required       pam_unix.so
session  required       pam_limits.so
session  required       pam_unix.so
session  required       pam_lastlog.so nowtmp
session  optional       pam_mail.so standard

我创建了一个测试帐户;登录之前,我测试了登录失败次数:

pam_tally2 -u tst3402
(empty)

现在我使用正确的密码登录(这是由expect脚本完成的,密码类似于aaa12BBB,

spawn ssh -l tst3402 172.9.2.1
Password:
No mail.
Last login: Tue Mar 20 14:25:17 2018 from 172.2.2.2
tst3402@hostname:~>

status OK

在哪里

  • 状态正常发送者:expect

我重新检查失败计数

pam_tally2 -u tst3402
Login           Failures Latest failure     From
tst3402             1    03/20/18 14:25:17  172.2.2.2

这意味着在成功登录 3 次后,该帐户将被锁定。

问题

为什么登录成功后pam_tally2看到1次失败?

通常的嫌疑人:

  • 我知道我可以使用 ssh 密钥,但我受到了 ISAE3420 的诅咒

  • 使用 ssh -vvv -l ...我看到两个交换..我应该看到 2 个失败?

    debug3: send packet: type 50
    debug3: receive packet: type 51
    
  • 没有 SELinux

  • 我在 security.SE 中没有找到任何 pam_tally2 问题

答案1

问题

我在我的一台机器上看到类似的行为:使用sudo正确的密码会在pam_tally2计数器中生成一个条目。

语境

pam.d/sudo条目是默认条目,非常简单:

session    required   pam_env.so readenv=1 user_readenv=0
session    required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
@include common-auth
@include common-account
@include common-session-noninteractive

在 中,我在顶部行之前common-auth添加了行:pam_tally2.sopam_unix.so

auth    required                    pam_tally2.so onerr=fail audit deny=5 unlock_time=900

# here are the per-package modules (the "Primary" block)
auth    [success=1 default=ignore]  pam_unix.so nullok_secure

# here's the fallback if no module succeeds
auth    requisite           pam_deny.so

# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required            pam_permit.so

# and here are more per-package modules (the "Additional" block)
auth    optional            pam_cap.so

解释

手册pam_tally2页指出(重点是我的):

身份验证阶段首先增加尝试登录计数器并检查是否应拒绝用户访问。如果用户已通过身份验证并且登录过程在调用 pam_setcred(3) 时继续它重置尝试计数器。

所以,到目前为止,我相信堆栈没有正确调用pam_setcred.没有文件pam.d被调用pam_setcred(它甚至没有安装在我的系统上)。

解决方案

在示例中,手册页指出(强调我的):

该模块不必被调用在账户阶段因为登录正确调用了 pam_setcred(3)。

因此,如果没有调用pam_setcred,则需要在该account阶段调用该模块。

我编辑了pam.d/common-account文件并在顶部添加了:

account required                        pam_tally2.so

当用户设法进行身份验证时,这将重置计数器。

去做

如果用户取消身份验证(例如,在提示输入密码时按 Ctrl+C),则计数器会增加而不减少,因此无法将其与失败的尝试区分开来。

相关内容