如何在Linux系统中查找最近修改过密码的用户
如何在Linux系统中查找最近修改过密码的用户
嘿,这个需求太常见了,我给你分享几个Linux里快速找出最近改密码用户的实用方法,都是日常运维里常用的:
方法一:用
chage结合循环批量查询chage是专门管理用户密码有效期的工具,单个用户的密码修改记录用它查很方便,但要批量查的话,我们可以先筛选出普通可登录用户,再循环查询:for user in $(awk -F: '$3 >= 1000 && $7 != "/sbin/nologin" {print $1}' /etc/passwd); do echo -n "$user: " chage -l $user | grep "Last password change" done这个命令会自动排除系统用户(UID小于1000)和无法登录的用户,只显示普通可登录用户的最后密码修改时间,一目了然。
方法二:直接解析
/etc/shadow文件(高效直观)
用户的密码核心信息都存在/etc/shadow里,第三个字段就是密码最后修改的天数(从1970年1月1日开始计算)。我们可以把这个天数转换成易读的日期,再按时间倒序排列:awk -F: '$2 !~ /^\*/ && $2 !~ /^\!/ {print $1, $3}' /etc/shadow | while read user days; do last_change=$(date -d "1970-01-01 + $days days" "+%Y-%m-%d") echo "$user: 最后修改密码时间 $last_change" done | sort -k3,3r这里会过滤掉没设置密码的用户(密码字段以
*或!开头),而且最近修改的用户会排在最前面,找起来特别省心。进阶技巧:只筛选最近N天内修改的用户
如果你只想找比如最近7天内改密码的用户,可以先算出7天前对应的天数,再精准过滤:cutoff=$(($(date +%s) - 7*86400)) cutoff_days=$(($cutoff / 86400)) awk -F: -v cutoff="$cutoff_days" '$2 !~ /^\*/ && $2 !~ /^\!/ && $3 >= cutoff {print $1}' /etc/shadow把命令里的
7换成你需要的天数,就能快速定位目标用户啦。
备注:内容来源于stack exchange,提问作者Uma Nagarajan
相关产品推荐
相关产品推荐

