Search Posts

标签: linux

/etc/pam.d/system-auth-ac 写法错误导致root用户无法执行passwd命令的问题解决记录

问题产生过程

某用户 希望设置linux 在任何用户输入密码错误次数超过6次的情况下能触发 用户账号锁定40秒的防护功能(锁后root用户无法登录)。等40秒后,登录界面输入 root用户的正确密码,看能否登陆。但用户自行修改系统配置文件后,系统出现故障:root用户无法执行passwd命令。passwd命令执行后出现如下图的报错:

故障线索分析

注意 其中的一个关键错误:

passwd: module is unknown

illegal module type : root_unlock_time

看起来跟识别模块异常有关。以 module is unkonw 和 illegal module type : root_unlock_time 作为关键词,搜索查到跟 /etc/pam.d/system-auth-ac 相关。



根据/etc/pam.d/system-auth-ac 这个信息,打开文件查看内容。

初步解决验证尝试

给文件的 /etc/pam.d/system-auth-ac 的passwd相关的2行加了注释。
注释后这个文件的第3-4行内容是:

#auth required pam_tally2.so  onerr=fail  deny=6  unlock_time=40 even_deny_root   
#root_unlock_time=30 

注释后就不存在passwd执行后提示passwd: module is unknown的问题了。

但这些语句在 /etc/pam.d/system-auth-ac 文件中本来就有的,为什么突然会报错呢?

经过跟 纯净安装的 /etc/pam.d/system-auth-ac 文件原始内容比对,发现了原因: root_unlock_time=30 并不是单独成行的,用户不小心手动将 它换行,就不符合该文件的语法要求。这个system-auth-ac 文件因为语法错误就无法正常被解析,是本文错误的根源。

最终解决过程记录

请在 linux系统的单用户模式下,使用nano编辑器修正 system-auth-ac 文件内容:

nano   /etc/pam.d/system-auth-ac

以修改 /etc/pam.d/system-auth-ac 文件。
把原来的第3-4行改成:
auth required pam_tally2.so onerr=fail deny=6 unlock_time=40 even_deny_root root_unlock_time=30
(修改后就只剩一行,也就是把原来3-4行合并到一起) 注意even_deny_root root_unlock_time=30这是两个参数,它们之间至少要有用一个空格。

这样就启用了 rhel 5系统的 PAM方式防密码破解防护功能

如何验证是否生效

reboot命令,正常重启系统,如果能进入图形桌面,登录。就说明修改生效。

验证/etc/pam.d/system-auth-ac 修改后是否达到了账号密码错误超过6次后自动锁定的防护效果

root用户,桌面登录之前,输入密码错误次数超过6次,则触发 锁用户的防护(锁后root用户无法登录)。等40秒后,登录界面输入 root用户的正确密码,看能否登陆。

参考文档

根据 man pam_tally2帮助说明文档 ,上述

auth required pam_tally2.so
查看余下内容

书籍《Linux高效运维实战》推荐的一些Linux性能检测工具

linux下的性能监控工具命令

htop 命令

htop的优势是可以直接看到进程的启动命令。而且可以看进程树。支持水平、垂直方向 滚动。直接对该进程进行管理操作。

smem 命令

smem 是一款linux下的内存使用情况报告工具。能够给出linux下的内存使用的多种报告。和其他传统内存报告工具不通的是,有一个独特功能:报告PSS,即物理内存使用情况。

因为linux使用的虚拟内存,要准确计算一个进程实际使用的物理内存就不容易。但只知道一个进程的虚拟内存大小也并没有太大用处,因为还无法获取到实际占用的物理内存大小。

RSS (Resident Set Size)

使用top命令可以看到。表示进程占用的物理内存大小。但是将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。

PSS:(Proportional Set Size)

所有使用某共享库的程序均分该共享库的内存。显然所有进程的PSS之和就是系统的内存使用量。他会更准确一些,它将共享内存的大小进行平均后,再分摊到各个进程上去。

USS(Unique Set Size)

进程独自占用的内存。它只计算了进程独自占用的内存大小,不包含任何任何共享的部分。

smem 使用例子:

smem -p (百分比的形式查看内存使用情况)

smem -u (查看每个用户的内存使用情况)

smem -P nginx ( 查看某个进程占用内存大小)

smem -k -P nginx ( 查看某个进程占用内存大小) 

vmstat 命令可以看cpu 和内存(swap)、io占用情况。注意其中swap 即使有占用的话也要根据 si和so  来判断swap是否合理。

《linux高效运维实战》中,对swap占用的说明提到 ,vmstat 命令查询资源占用结果(以上第二图)里面 memory 列内的 swap列 表示切换到内存交换区的内存数量(KB 为单位)。如果swap值不为0,或者比较大,那么只要si 和so 的值长期 为0即没有影响 ( si 、 so全称是 swap in 和 swap out ,即换入 和 换出 的 交换内存量,即换入换出多的话会对IO产生实际压力)。这种情况下一般不用担心,不会影响系统性能。(如果si/so 长期不为0, 表示系统内存不足,需要增加系统内存)

iotop 可以监控磁盘I/O使用状况,检测到哪一个程序使用的磁盘I/O异常。

网络检测工具:

mtr 网络检测

mtr是linux 一个非常棒的网络连通性判断工具,结合了 ping traceroute,nslookup的相关特性。

列含义:

loss%是对应IP行的丢包率,值得一提的是,只有最后的目标丢包才算是真正的丢包。

Last列是最后一次返回的延迟,按毫秒计算的。

Avg列是所有返回延时的平均值。

Best列是最快的一次返回延时。

Wrst 是最差。

StDev列是标准偏差。

tcpdump 网络抓包分析工具命令

tcpdump 命令抓包分析:

参数:

-i 指定网卡,默认是eth0

-n线上IP,而不是hostname

-c 指定抓到多少个包后退出。

-A 以ASCII方式显示包的内容。这个选项对文本格式的协议包很有用。

-x 以16进制显示包的内容。

-vvv显示详细信息。

-s 按长包截取数据。默认是60字节,如何包大于60字节,则抓包会出现丢数据现象。所以一般会设置-s 0,这样会按照包的大小截取数据。并且抓到的是完整的包数据。

-r 从文件中读取(与-w 对应,例如,tcpdump -w test.out… 查看余下内容

« 上一页
加好友请备注:chinaoss
您可以在微信公众号联系我们
我们将24小时内回复。
取消