题 dump / output / list所有用户的Linux密码到期信息


上下文

所以我建立了一个新的Debian服务器并为网络空间等增加了一些用户,这是常见的事情。

向前跳过180天,用户开始抱怨他们的登录无法正常工作。鉴于不止一个人提起它,我检查了auth日志和...... BOOM。密码到期导致登录失败。党!

愚蠢的我没有考虑这个特定服务器上的密码到期策略。

注意,这些用户没有shell权限,但可以通过sftp登录来管理他们的Web空间。因此,即使他们知道,他们也不会被提醒有关到期或有能力更改密码。据我所知,错误只是被记录在服务器端。客户端这是一个通用的auth错误。

如何轻松询问服务器以获取所有用户的密码到期信息?

一旦有了这些信息,我就可以很容易地看到哪些用户正在受影响以及将来会受到影响的用户。


5
2017-07-28 16:19




你有没有办法设置密码到期?在Debian帐户默认情况下不会过期。 - Zoredache
嘿,我想这可能是PAM的执行,我必须检查一下。也许这是用户添加的具体方式以及PAM强制执行某些规则的方式。我记得相当严格地设置了PAM。 - Kyle
好的,所以在服务器中 /etc/login.defs 以下是真的 PASS_MAX_DAYS 180。这可以作为强化指南的一部分完成,我在安装后跟着:) - Kyle


答案:


这样的命令应该显示您的所有帐户的到期状态 /etc/passwd

cut -f 1 -d: /etc/passwd | xargs -n 1 -I {} bash -c " echo -e '\n{}' ; chage -l {}"

重要的命令是 chage -l username。这是返回用户的到期状态的命令。 恰克 也是用于修改过期规则的命令。您可能需要添加 sudo 之前 chage 取决于您的系统设置。


6
2017-07-28 16:29



嘿!很好的答案。我发现它最优秀。完全符合我的需求和更多。也好又短!我一直在玩这个,你怎么看? for user in $(cat /etc/passwd |cut -d: -f1); do expiry=$(chage -l $user | fgrep 'Password expires'); if ! echo $expiry | fgrep -q never; then echo -e "$user\t"$expiry; fi; done | column -t - Kyle
感谢您帮助我改进技术,这就是我要去的地方: cut -f 1 -d: /etc/passwd | xargs -n 1 -I {} bash -c ' echo -n {}" "; chage -l {} | fgrep "Password expires"' | column -t - Kyle
最近我也发现了它的用处 passwd -S 这是一个很好的单线 cut -d: -f1 /etc/passwd | xargs -n1 -- passwd -S - Kyle
@Kyle sudo passwd -Sa - Walf


您也可以使用这个简单的命令:

awk -F':' '{ system("echo " $1 " && chage -l " $1) }' /etc/passwd

运用 awk 和 system 让它更简单。

1。  awk -F':' 这里 : 是现场分离器 /etc/passwd 文件作为输入。

2。  system("echo " $1 " && chage -l " $1) 这将首先回应 $1 和用户的密码到期信息 chage -l


1
2018-05-28 08:22