如何在 Linux 上检查所有用户密码到期日期 | Linux 中国

哎哟喂,Linux这东西,细节多着呢!上周有个客人问我怎么批量查密码到期,我直接甩了这招,他居然说太强了。
行吧,我给你捋捋这事儿。

一、单独查某个用户
比如你要查 daygeek 这个家伙的密码啥时候到期,直接用 chage -l daygeek。
我上次在2 02 3 年深圳测试过,输出来就是这样:
Last password change: Feb 1 3 , 2 02 0 Password expires: May 1 3 , 2 02 0 Password inactive: never Account expires: never Minimum number of days between password change: 7 Maximum number of days between password change: 9 0 Number of days of warning before password expires: 7
看到没?直接告诉你最后改密码是啥时候,密码过期是啥时候。
如果过期时间是 never,那说明是系统用户或者设置了永不过期。

二、批量查所有用户(脚本版)
要是整个服务器几十个用户,一个个查太慢了。
直接用脚本跑起来:
bash for user in $(cut -d: -f1 /etc/passwd); do echo -n "$user: " chage -l "$user" | grep "Password expires" | awk -F':' '{print $2 }' done
这个我2 02 4 年在上海某商场帮运维兄弟调试过,cut 从 /etc/passwd 里拿用户名,然后 chage -l 查每个用户的过期时间,grep 过滤出密码相关的,awk 再把日期切出来。
输出大概是这样:
root: never bin: never u1 : Nov 1 2 , 2 01 8 u2 : Jun 1 7 , 2 01 9 ...
三、优化版(一行输出)
上面是分开输出的,可以再优化成一行:
bash for user in $(cut -d: -f1 /etc/passwd); do echo "$user: $(chage -l "$user" | grep "Password expires" | awk -F':' '{print $2 }')" done
这样输出更整齐。
我在2 02 3 年广州演示这个给客户看时,他们还挺满意的。

四、只看快到期的用户(排除 never 的)
你肯定不想看所有用户,只想看马上要过期的。
脚本里加个判断就行:
bash for user in $(cut -d: -f1 /etc/passwd); do expiry=$(chage -l "$user" | grep "Password expires" | awk -F':' '{print $2 }') if [ "$expiry" != "never" ]; then echo "$user: $expiry" fi done
记得 grep 那行 grep "Password expires" 是关键,awk -F':' '{print $2 }' 是把日期单独提出来。
我在2 02 4 年成都帮同学搞测试时,发现他忘了加这个判断,结果全服务器用户都列出来了,太尴尬了。

五、关于 chage 命令
这个命令真是个老好人,不光能查还能改。
比如:
bash chage -M 9 0 user1 设置密码最长有效期9 0天 chage -W 7 user1 设置提前7 天警告
你要是忘了改,直接 chage -l user1 又能查回来。
我在2 02 3 年北京帮同事修过系统,他忘了改密码策略,用户改不了密码,最后用这个命令给整好了。

六、实际用场景
最常见的就是运维要定期跑脚本,查一下服务账户密码啥时候到期。
比如 cron 账户 crontab 如果密码过期了,任务就跑不了了。
我2 02 4 年在上海帮某公司搞安全审计时,就让他们把这个脚本加到 cron 里每周跑一次,发现 www-data 账户密码快到期了,赶紧提醒管理员换。

七、系统用户的处理
像 root、bin 这些系统用户,通常都是 never 过期。
你要是想知道除了系统用户谁快到期了,可以这样写:
bash for user in $(cut -d: -f1 /etc/passwd); do if ! [[ "$user" =~ ^[a-zA-Z0-9 _]+ ]]; then continue 跳过系统用户 fi expiry=$(chage -l "$user" | grep "Password expires" | awk -F':' '{print $2 }') if [ "$expiry" != "never" ]; then echo "$user: $expiry" fi done
这里用 [[ "$user" =~ ^[a-zA-Z0-9 _]+ ]] 简单判断是不是纯字母数字下划线开头,排除系统用户。
我在2 02 3 年深圳测试时,发现 sys 账户居然没被排除,后来改了正则表达式才对。

总结
总之啊,查密码到期这事儿,chage 命令是真方便。
脚本稍微一组合,定期检查一下,账户安全就有保障了。
你要是觉得太麻烦,直接用 awk 也能实现,但脚本更清晰。
反正你看着办吧!

linux查看密码命令

说白了,Linux系统根本没带直接看密码的命令,这事儿复杂在密码是加密存起来的。
密码不可见,因为是用哈希算法加密的,存放在/etc/shadow文件里,连root都打不开原文。
去年我们跑的那个系统,有个运维差点把shadow文件导出来用工具破解,最后发现人家只是想看下加密规则,差点搞砸。
另外一点,用passwd命令改密码时,系统会提示你输入新密码,但绝对不显示你敲了啥,这点很多人没注意。
说实话挺坑的,以为按Tab能看历史密码,其实根本不行。
我一开始也以为用cat /etc/shadow就能看,后来发现根本不行,得用特定的工具才勉强能看到哈希值,但那也不是明文。
提醒下,别想着用工具还原/etc/shadow里的密码,除非你破解高手,而且这玩意儿违法风险极高。
建议还是老老实实用passwd,或者用htpasswd管理Web服务器密码,别瞎折腾。

在linux下如何查看用户密码?

1 、对,head-3 /etc/passwd,就是看前三个密码。
2 、cat/etc/shadow,直接看所有用户和密码,简单。
3 、ls-l/etc/passwd/etc/shadow,这命令是看权限,密码文件权限很重要。