ubuntu关于pam_tally2计数器在每次sudo时都增加的bug

使用pam_tally2模块来实现用户多次输入密码错误后锁住账号的需求,在/etc/pam.d/common-auth中增加pam_tally2的rule

auth        required      pam_tally2.so deny=5

配置完成后先用login或者ssh的方式验证一下,当用户错误输入密码5次后,账户都会被锁住10秒钟;账户解锁后输入正确的密码,pam_tally2的计数器清零。
查看计数器的命令如下:

pam_tally2 -u admin

显示结果如下:

 pam_tally2 -u  admin 
 Login           Failures Latest failure     From admin               2    04/10/14 11:21:16  /dev/pts/0

但是在使用sudo的时候发现计数器不能正常清零,只要执行sudo,计数器就一直累加,不清零,除非使用命令手工清零

pam_tally2 -u admin --reset

锁定的行为也变得无章可循,执行几次后账户就会被锁住。

[[email protected] root]$ sudo bash -c "echo aaa" [sudo] password for admin:  Sorry, try again. [sudo] password for admin:  Sorry, try again. [sudo] password for admin:  Sorry, try again. [sudo] password for admin:  aaa [[email protected] root]$ sudo bash -c "echo aaa" [sudo] password for admin:  Sorry, try again. Your account is locked. Maximum amount of failed attempts was reached. [sudo] password for admin:

可以看到我在第四次的时候已经正确输入了密码,屏幕打印出“aaa",但是当我再次输入错误密码时,我的账号还是被锁住了。查看计数器失败次数已经超过5次

#pam_tally2 -u admin 
Login           Failures Latest failure     From admin               6    04/10/14 11:27:14  /dev/pts/0

这个问题是redhat的一个bug,能够找到bug号,里面有一个临时解决方案,最新的sudo版本应该已经解决了这个问题

https://bugzilla.redhat.com/show_bug.cgi?id=707660

解决办法是在system-auth配置文件的account段增加下面一行配置

account     required      pam_tally2.so

这样可以让计数器在每次sudo输入正确密码后清零。pam_tally2的文档这样解释:

Account phase resets attempts counter if the user is not magic root.This phase can be used optionally for services which don‘t call pam_setcred(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules."

这个问题一个可能的原因是sudo模块在执行具体动作之前关闭了pam的session,没有正确调用pam_setcred(),导致返回失败的错误码,pam_tally2计数器累加。

这个问题是redhat的一个bug,能够找到bug号,里面有一个临时解决方案,最新的sudo版本应该已经解决了这个问题

https://bugzilla.redhat.com/show_bug.cgi?id=707660

解决办法

在common-auth配置文件的

"auth        required      pam_tally2.so deny=5"行后面加

account段增加下面一行配置

account     required      pam_tally2.so

补充一下发现的另一个问题:

似乎sudo和pam_tally2配合有很多问题,最近有问题说在输入错误密码5次后,账户被锁,等待超时,超时结束后第一次即使输入了正确密码,也还是提示“sorry, try again",第二次输入才通过。实验了半天,没看pam_tally的代码, 感觉似乎还是有bug,但是有解决方案,就是将后面的pam_uinx提到pam_tally前,因为它是sufficient的,所以只要通过,就不会再走pam_tally,问题解决。但是交换位置后会导致pam_tally的计数器不会清零,可能有其他副作用。

还有,之前配置有一个错误,rhel5的pam_tally不支持"no_magic_root"参数,去掉了

时间: 2024-10-29 03:00:19

ubuntu关于pam_tally2计数器在每次sudo时都增加的bug的相关文章

解决Git 每次提交时都要输入用户名和密码的缓存机制的设置

/*********************************************************************  * Author  : Samson  * Date    : 05/23/2015  * Test platform:  *              gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2  *              GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu)

确保 Xcode 每次 Build 时都自己主动更新资源

參考:http://quick.cocoachina.com/?p=22 刚建立的quickproject.每次修改lua代码,都得清理一下.非常麻烦.參照着quick官网上改了改,要适配自己的项目 _TARGET_BUILD_CONTENTS_PATH=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH echo _TARGET_BUILD_CONTENTS_PATH: $_TARGET_BUILD_CONTENTS_PATH echo PWD: $PWD echo

献给那些每次调试时都要启动很多WEB项目的苦逼程序猿

当一个解决方案包含多个WEB项目的时候,只要按F5调试,其它用不着的WEB项目也会自动添加到托盘里.很多新手都不知道如何解决这个问题,我也是刚知道. 在网上找了很多资料看到有2种解决方法: 1.把WEB项目设置为使用IIS调试, 把ASP.NET网站项目设置为使用自定义服务器调试,并指定iis配置的URL. 然后可以任意设置某个WEB项目为启动项目来调试: 2.选中要设置的项目,不要右击里面的属性,而是按F4时显示的属性,下面总是在调试时启动设为false. 个人感觉第二种方法比较适合自己.

Ubuntu 12.04 12.10每次开机后都弹出"检测到系统程序出现问题"的一个解决方法

打开终端,输入 sudo gedit /etc/default/apport 把里面的enabled=1改成enabled=0,保存

Appium——解决每次启动时都安装setting和unlock app方法

找到appium安装目录 C:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android 修改代码,注释掉弹出setting和unlock的代码 重启下appium,问题解决

ubuntu中vim下按上下左右键时输入A、B、C、D的问题

ubuntu下使用vi 进行编辑文件时,按上下左右键时,会输入A.B.C.D,这个用起来很不方便.网上查得此问题的原因是: ubuntu系统自带的 vi 不完整导致,解决方法:安装完整的vi $ sudo apt-get install vim-gtk 不安装更新的情况下或可如下设置: 在insert模式中,按上下左右箭头时会出现ABCD,只要输入: :set term=cons25 但是这样的话,每次都需要这样改,但是使用如下方法可以解决: 在你的home目录下创建一个.vimrc文件(如果你

VMware上的Ubuntu在构建超过2TB的文件系统时的建议

1 .Ubuntu所在的分区,也就是/dev/sda的那个盘(如果想直观看到,请在Ubuntu的应用市场里面搜索gparted,好评最多的那个就是,安装好了以后,点super/win键,搜索gparted就出来了,看下图),一定安装到SSD硬盘里面,因为这样速度快很多很多,之后准备HDD硬盘存放数据. 2.我在笔记本(win10)上原本有一个40G的镜像,插了一个4.5T的外置硬盘,我想给Ubuntu扩容,结果走了个弯路.我试着给硬盘扩展容量,然后用自带的扩展工具,那么就出错了.因为原先的分区表

决Ubuntu使用`make menuconfig`配置Linux 内核时,出现缺少'ncurses-devel'库支持。

*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. ***  1. 问题状况 一般情况下使用系统自带的软件管理器apt-get就可以安装了(`sudo apt-get install 

【安卓】数据库基于脚本的"增量更新",每次更新时不需修改java代码、!

思路: 1.当然是基于SQLiteOpenHelper.onCreate(第一次安装程序时调用).onUpdate(升级程序时调用) 2.用"脚本"(脚本制作具体方法问度娘)做数据库升级,文件名标识对应版本,java中根据"上一版本.当前版本"选择执行的脚本. 升级时,修改DB_VERSION(当前版本)即可. DBManager.java: package com.example.test; import java.io.ByteArrayOutputStream