ubuntu加防,用户登陆时连续N次输入错误密码进行自动锁定N分钟

ubuntu加防,用户登陆时连续N次输入错误密码进行自动锁定N分钟

 

在线上的服务器有时需要限制用户登录次数.这个功能可以通过pam的pam_tally2.so模块来实现

PAM模块是用sun提出的一种认证机制

pam_tally2.so模块

一.格式

  • pam_tally2.so [file=/path/to/counter] [onerr=[fail|succeed]] [magic_root] [even_deny_root] [deny=n] [lock_time=n] [unlock_time=n]
  • [root_unlock_time=n] [serialize] [audit] [silent] [no_log_info]

  参数:

    file:指定统计次数用的文件,默认是/var/log/tallylog

    magic_root:如果用户uid=0,在帐户认证时调用该模块发现失败时,不计入统计

    even_deny_root:root用户一样被锁定

    deny:普通用户锁定次数

    lock_time:普通用户锁定后等待的时间

    unlock_time:普通用户锁定后解锁要等待的时间

二.实例

  auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300

  

/etc/pam.d/login中配置只在本地文本终端上做限制

/etc/pam.d/kde在配置时在kde图形界面调用时限制

/etc/pam.d/sshd中配置时在通过ssh连接时做限制

  /etc/pam.d/system-auth中配置凡是调用 system-auth 文件的服务,都会生效

三.查看命令

    查看root用户的登录失败的次数

      pam_tally2   –user root

    重置计数器,即手动解锁

      pam_tally2   –user root –reset

 

1、编辑PAM的配置文件

sudo vim /etc/pam.d/login

在第二行添加

auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10

参数介绍

even_deny_root 也限制root用户;

deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;

unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;

root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;

fca32a1c8ab34baa13915743a585b365.png

此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。

注意

在第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!

2、修改sshd文件

这个只是限制了用户从tty登录,而没有限制远程登录,如果想限制远程登录,需要改sshd文件

sudo vim /etc/pam.d/sshd

继续在第二行上添加

auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10

ad2d92912b8d9029eb15e8a226b92827.png

 

sudo reboot 重启服务器

查看用户登录失败的次数:

sudo pam_tally2 –user

结果

ubuntu@VM-0-5-ubuntu:~$ sudo pam_tally2 –user

Login Failures Latest failure From

root 3 09/29/19 15:53:24 45.119.212.105

ubuntu 9 09/29/19 15:46:58 223.107.140.84

解锁指定用户:

sudo pam_tally2 -r -u ubuntu

ubuntu@VM-0-5-ubuntu:~$ sudo pam_tally2 -r -u ubuntu

Login Failures Latest failure From

ubuntu 15 09/29/19 15:58:49 223.107.140.84

备注:

1、此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 模块可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。

2、也可以直接在 system-auth 文件中直接添加这些命令,修改完成后,凡是调用 system-auth 文件的服务,都会生效。因为有自动解锁时间,所以,不用担心全部限制后,会出现永远无法登陆的”尴尬”情况。

3、可以使用 pam_tally2 -r -u username 命令,手动清除某用户记录次数。

二、设置Linux用户连续N次登陆失败时,自动锁定X分钟(pam_tally)

1、如果想在所有登陆方式上,限制所有用户,可以在 /etc/pam.d/system-auth 中增加2行

auth required pam_tally.so onerr=fail no_magic_root

account required pam_tally.so deny=3 no_magic_root even_deny_root_account per_user reset

deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;

no_magic_root 连root用户也在限制范围,不给root特殊权限。

详细参数的含义,参见 /usr/share/doc/pam-xxxx/txts/README.pam_tally

如果不想限制root用户,可以将 even_deny_root_account 取消掉。

2、针对不同服务来限制不同登陆方式

#只在本地文本终端上做限制,可以编辑如下文件,添加的内容和上方一样。

vim /etc/pam.d/login

#只在远程telnet、ssh登陆上做限制,可以编辑如下文件,添加的内容和上方也一样。

vim /etc/pam.d/remote

vim /etc/pam.d/sshd

3、手动解除锁定:

#查看某一用户错误登陆次数:

pam_tally –user username

#例如,查看work用户的错误登陆次数:

pam_tally –user work

#清空某一用户错误登陆次数:

pam_tally –user username –reset

#例如,清空 work 用户的错误登陆次数,

pam_tally –user work –reset

faillog -r 命令亦可。

4、pam_tally没有自动解锁功能

因为pam_tally没有自动解锁的功能,所以,在设置限制时,要多加注意,万一全做了限制,而 root用户又被锁定了,就只能够进单用户模式解锁了,当然,也可以添加crontab任务,达到定时自动解锁的功能,但需要注意的是,如果在/etc /pam.d/system-auth 文件中添加了pam_tally的话,当root被锁定后,crontab任务会失效,所以,最好不要在system-auth 文件中添加pam_tally。
————————————————

拓宽知识:

在linux系统中,用户多次登录失败会被锁定,一段时间内将不能再登录系统,这是一般会用到Pam_Tally2进行账户解锁。

了解PAM

Linux-PAM (Pluggable Authentication Modules for Linux)可插拔认证模块。Linux-PAM是一套适用于Linux的身份验证共享库系统,它为系统中的应用程序或服务提供动态身份验证模块支持。在Linux中,PAM是可动态配置的,本地系统管理员可以自由选择应用程序如何对用户进行身份验证。PAM应用在许多程序与服务上,比如登录程序(login、su)的PAM身份验证(口令认证、限制登录),passwd强制密码,用户进程实时管理,向用户分配系统资源等。

PAM的主要特征是认证的性质是可动态配置的。PAM的核心部分是库(libpam)和PAM模块的集合,它们是位于文件夹/lib/security/中的动态链接库(.so)文件,以及位于/etc/pam.d/目录中(或者是/etc/pam.conf配置文件)的各个PAM模块配置文件。/etc/pam.d/目录中定义了各种程序和服务的PAM配置文件,其中system-auth文件是PAM模块的重要配置文件,它主要负责用户登录系统的身份认证工作,不仅如此,其他的应用程序或服务可以通过include接口来调用它(该文件是system-auth-ac的软链接)。此外password-auth配置文件也是与身份验证相关的重要配置文件,比如用户的远程登录验证(SSH登录)就通过它调用。而在Ubuntu、SuSE Linux等发行版中,PAM主要配置文件是common-auth、common-account、common-password、common-session这四个文件,所有的应用程序和服务的主要PAM配置都可以通过它们来调用。

使用如下命令判断程序是否使用了PAM:
root@test~ # ldd /usr/bin/passwd | grep libpam

libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fb74f748000)

libpam.so.0 => /lib64/libpam.so.0 (0x00007fb74eb45000)

如看到有类似的输出,说明该程序使用了PAM,没有输出,则没有使用。

pam_tally2模块用于某些数对系统进行失败的ssh登录尝试后锁定用户帐户。 此模块保留已尝试访问的计数和过多的失败尝试。

pam_tally2模块有两个部分,一个是pam_tally2.so,另一个是pam_tally2。 它是基于PAM模块上,并且可以被用于检查和调节计数器文件。 它可以显示用户登录尝试次数,单独设置计数,解锁所有用户计数。

PAM身份验证配置文件

/etc/pam.d/目录包含应用程序的PAM配置文件。例如,login程序将其程序/服务名称定义为login,与之对应的PAM配置文件为/etc/pam.d/login。

PAM配置文件语法格式
每个PAM配置文件都包含一组指令,用于定义模块以及控制标志和参数。每条指令都有一个简单的语法,用于标识模块的目的(接口)和模块的配置设置,语法格式如下:

module_interface control_flag module_name module_arguments
如在/etc/pam.d/password-auth-ac配置文件中(CentOS),其中一行PAM模块接口定义如下
多次登录失败用户被锁定及使用Pam_Tally2解锁

PAM身份验证安全配置实例
一、强制使用强密码(用户密码安全配置)

PAM配置文件:/etc/pam.d/system-auth-ac

模块名称:pam_cracklib(仅适用于password模块接口)

模块参数:

minlen=12 密码字符长度不少于12位(默认为9)

lcredit=-1 至少包含1个小写字母

ucredit=-1 至少包含1个大写字母

dcredit=-1 至少包含1个数字

ocredit=-1 至少包含1个特殊字符

retry=3 配置密码时,提示3次用户密码错误输入

difok=6 配置密码时,新密码中至少6个字符与旧密码不同(默认为5)

其他常用参数:

reject_username 新密码中不能包含与用户名称相同的字段

maxrepeat=N 拒绝包含超过N个连续字符的密码,默认值为0表示此检查已禁用

maxsequence=N 拒绝包含大于N的单调字符序列的密码,例如’1234’或’fedcb’,默认情况下即使没有这个参数配置,一般大多数这样的密码都不会通过,除非序列只是密码的一小部分

maxcla***epeat=N 拒绝包含相同类别的N个以上连续字符的密码。默认值为0表示此检查已禁用。

use_authtok 强制使用先前的密码,不提示用户输入新密码(不允许用户修改密码)

例 修改配置/etc/pam.d/system-auth-ac文件,在password模块接口行修改或添加配置参数如下:

password requisite pam_cracklib.so try_first_pass retry=3 type= reject_username minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 difok=6

需要注意的是,我在这里展示的是在RHEL/CentOS下的配置,passwd程序的PAM配置文件涉及主配置文件/etc/pam.d/passwd和/etc/pam.d/system-auth-ac(也可以是/etc/pam.d/password-auth-ac),其中/etc/pam.d/passwd配置文件默认只包含了/etc/pam.d/system-auth-ac配置文件,因此对于以上PAM身份验证密码模块配置,只修改/配置该文件即可。或者在Ubuntu中,配置文件包括:/etc/pam.d/common-password、/etc/pam.d/common-account、/etc/pam.d/common-auth、/etc/pam.d/common-session。

修改如下文件:

/etc/pam.d/sshd    (远程ssh)

/etc/pam.d/login    (终端)

在第一行下即#%PAM-1.0的下面添加:
auth    required    pam_tally2.so    deny=3    unlock_time=600 even_deny_root root_unlock_time=1200

各参数解释:
even_deny_root    也限制root用户;

deny           设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户

unlock_time        设定普通用户锁定后,多少时间后解锁,单位是秒;

root_unlock_time      设定root用户锁定后,多少时间后解锁,单位是秒;

手动解除锁定:
查看某一用户错误登陆次数:
pam_tally –user
例如,查看work用户的错误登陆次数:
pam_tally –user work
清空某一用户错误登陆次数:
pam_tally –user –reset
例如,清空 work 用户的错误登陆次数,
pam_tally –user work –-reset

如果使用pam_tally没生效的话,也可以使用pam_tally2命令:

pam_tally2 –u tom –reset将用户的计数器重置清零(SLES 11.2和12版本下用此命令才重置成功)

查看错误登录次数:pam_tally2 –u tom

faillog -r 命令清空所有用户错误登录次数
在服务器端以root用户登录
执行命令:
# faillog –a          ////查看用户登录错误次数

faillog -u user –r       ////清空指定用户user的错误登录次数

如果超过三次的话,用户不能登录并且此后登录用户错误登录次数还是会增加。
在登录错误次数不满三次时,登录成功后,则这个用户登录错误值将清零,退出后重新telnet登录将采用新的计数。
其他例子:
Pam_tally2锁定SSH登录

默认情况下,pam_tally2模块已经安装在大多数Linux发行版,它是由PAM包本身的控制。 本文演示如何锁定和深远的登录尝试的失败一定次数后解锁SSH帐户。

如何锁定和解锁用户帐户
使用“/etc/pam.d/password-auth”配置文件来配置的登录尝试的访问。 打开此文件并以下AUTH配置行举行的“ 身份验证 ”部分的开头添加到它。

auth required pam_tally2.so file=/var/log/tallylog deny=3 even_deny_root unlock_time=1200
接下来,添加以下行“ 账户 ”部分。

account required pam_tally2.so
参数
文件= /无功/日志/ tallylog -默认的日志文件是用来保持登录计数。
否认= 3 -拒绝后,3次尝试访问和锁定用户。
even_deny_root -政策也适用于root用户。
unlock_time = 1200 -帐户将被锁定,直到20分钟 。 (如果要永久锁定,直到手动解锁,请删除此参数。)
一旦你使用上面的配置完成,现在尽量尝试使用任何“ 用户名 ”3失败的登录尝试到服务器。 当你取得了超过3次,你会收到以下消息。

[root@test01 ~]# ssh test01@172.16.25.126
test01@172.16.25.126’s password:
Permission denied, please try again.
test01@172.16.25.126’s password:
Permission denied, please try again.
test01@172.16.25.126’s password:
Account locked due to 4 failed logins
Account locked due to 5 failed logins
Last login: Mon Apr 22 21:21:06 2017 from 172.16.16.52
现在,使用以下命令验证或检查用户尝试的计数器。

[root@test01 ~]# pam_tally2 –user=test01
Login Failures Latest failure From
test01 15 04/22/17 21:22:37 172.16.16.52
如何重置或解锁用户帐户以再次启用访问。

[root@test01 pam.d]# pam_tally2 –user=test01 –reset
Login Failures Latest failure From
test01 15 04/22/13 17:10:42 172.16.16.52
验证登录尝试已重置或解锁

[root@test01 pam.d]# pam_tally2 –user=test01
Login Failures Latest failure From
test01 0
PAM模块是所有Linux发行版中都有的, 在命令行中执行“ 人pam_tally2”可更多地了解它。

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论