PAM规则似乎不起作用

目标

对于移动设备,我们希望通过在sshlogin时要求PIN码来增加额外的安全层。 移动访问只是一个便利的服务(用户可以随时取出笔记本电脑),并且在PIN码三次尝试(pipe理员可以解锁一个账户)后,账户应该永久locking。 pipe理员将在解锁时生成一个随机的新PIN。

方法

为了在公钥authentication之后提示input密码,我在/etc/ssh/sshd_config添加了以下内容:

 Match Group RequireSSHPassword AuthenticationMethods publickey,password 

除了公钥authentication之外,RequireSSHPassword组中的任何用户都将被要求input密码。 UsePAM在configuration文件中设置为yes 。 尝试添加到Match结果sshd无法启动(“指令”UsePAM“不允许在一个匹配块”)。

对于locking,PAM模块pam_tally2似乎是要走的路。
这是失败的工作。

根据超级用户的这个问题 ,我在/etc/pam.d/common-password添加了以下几行:

 auth required pam_tally2.so file=/var/log/tallylog deny=3 onerr=fail account required pam_tally2.so 

我也尝试添加只有auth行,或者添加一个或两个到/etc/pam.d/sshd ,或者添加account行到/etc/pam.d/common-account ,或者洗牌行的顺序,所有无济于事。 环境是Debian Stretch(testing)。

尝试使用不正确的密码login时,不会创build/var/log/tallylog文件。 在使用命令pam_tally2 --user=test ,文件被创build并且是空的。 在使用命令pam_tally2 --user=test --reset=3 ,文件被64K二进制数据填充。 使用pam_tally2 --user=test现在显示3次没有源的失败尝试(如预期的那样)。

当帐号设置为3(因此用户应该被locking)而尝试login时,我不能。 没有给出错误,它只是说login尝试失败(就像我使用了一个无效的密码)。 所以它实际上似乎工作。 但是,在将计数器重设为0时,我可以用错误的密码进行3次尝试,并在第4次尝试时仍然login。 使用pam_tally2 --user=test ,即使我尝试使用不正确的密码,然后closuresssh连接,失败次数仍为0。

当我手动更新计数器计数器时,限制似乎有效,但是如果我正确解释事件,计数器计数器不会更新。

/var/log/auth.log我可以看到失败的用户login尝试。 在所有testing中, auth.log有两条消息来自计数器:

 Mar 6 11:36:17 HOST sshd[18906]: pam_tally2(sshd:auth): user test (1xxx) tally 4, deny 3 Mar 6 12:49:40 HOST sshd[20392]: pam_tally2(sshd:account): option deny=3 allowed in auth phase only 

后者是当我试图指定account行上的选项时(除了auth行)。 前者可能来自尝试login后手动重置失败login为3。

改变统计模式为0777 ,它是世界可写的错误。 在模式0774所有者更改为sshd不会改变任何东西(只是在ssh没有tallylog写权限的情况下,默认情况下,它是在拥有者和组root模式0600下)。

由于日志消息以及使用--reset=3之后的locking,我相信该模块正在使用中。 出于某种原因,它似乎没有注意到login失败,或无法更新tallylog 。 我怎么能debugging呢? 还是应该用别的东西呢?


顺便说一句, fail2ban是我已经审查过的另一个常见的解决scheme。 然而,最新版本(0.8)的手册提到它通过每秒扫描日志文件来工作。 正如手册所说,“许多syslog守护进程缓冲它们的输出。” 最重要的是,许多login尝试可以在一秒钟内通过并行执行。 在这种情况下,Fail2ban不适用,在这种情况下,不是要阻止对普通账户的暴力破解,而是阻止已经拥有我的私钥的专业攻击者,现在需要暴露几个数字。