You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:14:13