如何使用pam_tally启用帐户锁定?

我正在尝试使用pam_tally在ubuntu中实现帐户锁定。 我尝试在/etc/pam.d/common-auth中添加以下行

auth required pam_tally.so deny=3 account required pam_tally.so 

故障被记录,但即使达到最大故障,帐户也不会被锁定。 我通过直接登录(GNOME登录屏幕)来尝试这个。

有什么建议吗? 我是否还需要添加pam.d / gdm或登录文件?

我看了这个已经有一段时间,但是

我想你需要编辑/etc/pam.d/common-auth

将其添加到文件的顶部 (规则的顺序很重要)。

 auth required pam_tally.so per_user magic_root onerr=fail 

然后,您可以设置允许的尝试次数

 sudo faillog -m 3 

解锁帐户

 faillog -u login_name -r 

有关其他详情,请参阅

我的博客http://blog.bodhizazen.com/linux/ubuntu-how-to-faillog/

或者男人pam_tally

普通认证背后的解释

如果您只是想快速解决问题,请转到如何配置common-auth以锁定


希望这有助于了解/etc/pam.d/common-auth如何配置锁定。

如果您删除/etc/pam.d/common-auth所有注释,则会留下以下内容:

 auth [success=1 default=ignore] pam_unix.so nullok_secure auth requisite pam_deny.so auth required pam_permit.so 

我们来看看这个文件的每一行以及它是如何使用的。


 auth [success=1 default=ignore] pam_unix.so nullok_secure 

读取密码输入。 如果密码正确,则跳过文件的下一行(带有pam_deny.so )。 您可以通过设置success=1的值来更改跳过的行数。

 auth requisite pam_deny.so 

立即失败登录尝试。 这里requisite的单词告诉身份validation在失败时立即退出。 其他行使用required ,它等到模块结束以发出故障信号。

 auth required pam_permit.so 

允许登录尝试。 这是使用pam_permit.so完成的。


一旦建立,可以更好地理解配置模块以锁定用户。

如何配置common-auth以锁定

对于Ubuntu:

在pam_deny.so之后和pam_permit.so之前添加以下行:

 auth required pam_tally2.so onerr=fail deny=3 unlock_time=1800 

将pam_deny.so行更改为以下内容:

 auth required pam_deny.so 

整个文件看起来像这样:

 auth [success=1 default=ignore] pam_unix.so nullok_secure auth required pam_deny.so auth required pam_tally2.so onerr=fail deny=3 unlock_time=1800 auth required pam_permit.so 

您可以配置以下选项以满足您的需求:

  • deny=3 – 锁定前允许的尝试次数。
  • unlock_time=1800 – 允许您再次尝试登录之前的秒数。 (附加说明:如果系统在一系列故障后解锁,并且您再次无法进行身份validation,则您再没有2次尝试进行身份validation。系统会让您 再次 等待 unlock-time 。)

大多数资源建议将此行添加到文件的顶部,强调订单的重要性; 但是,在Ubuntu桌面系统上,此配置可能会阻止您退出GUI登录屏幕。

为什么会这样? 看来,当您在Ubuntu的登录屏幕上选择用户时,PAM模块会立即开始,并在继续之前等待pam_unix.so行(密码输入行)。 如果将pam_tally2.so行放在此“停止点”之前,则锁定立即变为活动状态,如果您通过按箭头键导航离开用户,则模块会发出登录失败和pam_tally2递增的信号。 即使没有输入密码,您很快就会遇到类似下面的情况:

典型的Ubuntu登录屏幕,其中包含错误配置的common-auth文件。

pam_tally2.so行放在文件的底部可以解决此问题。 在此配置中保持适当的顺序; 第一行根据密码有效性跳转到pam_deny.sopam_permit.so ,到达pam_tally2.so时,已经指示了任何不正确的密码条目。

即使无论输入了密码,都达到了pam_deny.so如果pam_deny.so达到pam_deny.so ,模块也将始终失败。 这是因为pam_deny.so行包含required ; 它将允许其余的线路运行,但模块本身最终会失败。

有关PAM如何工作的更多信息,您可以谷歌“PAM如何工作”或只是去这里: http : //www.tuxradar.com/content/how-pam-works


应该这样做!