如果有人恶意尝试破解你的服务器密码,那么linux对账户的锁定功能就能帮你起到一定的作用,当尝试密码错误超过设定的次数后,就会锁定该账户多长时间(自行设定),时间过后即可自行解锁,这样可以增加攻击者的成本。

linux中可以使用pam的pam_tally2.so模块来实现。


一、备份要操作的三个配置文件

cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak

cp /etc/pam.d/sshd /etc/pam.d/sshd.bak

cp /etc/pam.d/login /etc/pam.d/login.bak


二、确定使用pam_tally2.so模块还是pam_tally.so模块来实现

使用下面命令,查看系统是否含有pam_tally2.so模块,如果没有就需要使用pam_tally.so模块,两个模块的使用方法不太一样,需要区分开来。

# find / -name "pam_tally2.so"

/usr/lib64/security/pam_tally2.so


三、登录失败处理功能策略(su 多次切换失败后锁定用户,服务器终端)

编辑系统/etc/pam.d/system-auth 文件,在#%PAM-1.0的下面,一定要在pam_env.so后面添加如下策略参数:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=40 even_deny_root root_unlock_time=40

注意:
1、添加的位置顺序不要错,在#%PAM-1.0的下面,一定要在pam_env.so(auth        required      pam_env.so)后面
2、onerr=fail       表示定义了当出现错误时的缺省返回值;
3、even_deny_root    表示也限制root用户;
4、deny           表示设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
5、unlock_time      表示设定普通用户锁定后,多少时间后解锁,单位是秒;
6、root_unlock_time   表示设定root用户锁定后,多少时间后自动解锁否则手动,单位是秒;

        以上策略表示:普通帐户和root的帐户登录连续3次失败,普通用户统一锁定时间600秒,root用户锁定600秒,600秒(10分钟)后可以解锁。如果不想限制root帐户,可以把even_deny_root root_unlock_time这两个参数去掉,root_unlock_time表示root帐户的锁定时间,onerr=fail表示连续失败,deny=3,表示超过3次登录失败即锁定。

        用户锁定期间,无论在输入正确还是错误的密码,都将视为错误密码,并以最后一次登录为锁定起始时间,若果用户解锁后输入密码的第一次依然为错误密码,则再次重新锁定。

su错误示例:

---------------------------------------------------
[test1@localhost ~]$ su - root
密码:
su: 鉴定故障
[test1@localhost ~]$ su - root
密码:
su: 鉴定故障
[test1@localhost ~]$ su - root
密码:
su: 鉴定故障
[test1@localhost ~]$ su - root
因为 4 失败登录而锁定帐户

su用户切换锁定后查看:
# pam_tally2 --user test2
Login           Failures Latest failure     From
test2               4    06/06/20 02:14:21  pts/0
------------------------------------------------------


四、登录失败处理功能策略(ssh远程连接登录)

上面只是限制了从终端登陆,如果想限制ssh远程的话,要改的是/etc/pam.d/sshd这个文件,添加的内容跟上面一样!

auth       required     pam_tally2.so  deny=5 unlock_time=300
或
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600

注意添加地点在#%PAM-1.0下一行,即第二行添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!


ssh锁定用户后查看:

# pam_tally2 --user test1
Login     Failures     Latest     failure   From
test1        6        06/06/20   02:18:46  192.168.2.2


五、限制用户从tty登录(本地终端)

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

# vim /etc/pam.d/login
#%PAM-1.0
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600

tty登录锁定后查看:

# pam_tally2 --user root    
Login   Failures Latest   failure   From
root     17    06/06/20 02:10:14  tty1


六、TELNET用户限制

在文件/etc/pam.d/remote中修改,方式与SSH一样

auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600

注意:
1、顺序不要错,一定要在pam_env.so后面
2、deny:拒绝次数
3、even_deny_root:包含root用户
4、unlock_time:解锁时间


七、查看用户失败次数

# pam_tally2          --------------------查看所有用户登录失败次数(有会显示,没有锁定用户无信息)

# pam_tally2 --user root      ------------指定查看登录失败的用户次数


八、手动解锁指定用户

# pam_tally2 –u 账号    查看失败登录

# pam_tally2  -r -u root(账号)    清楚失败登录后可以登录