![我如何检查本地帐户是否已启用密码?](https://linux22.com/image/1534690/%E6%88%91%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E6%9C%AC%E5%9C%B0%E5%B8%90%E6%88%B7%E6%98%AF%E5%90%A6%E5%B7%B2%E5%90%AF%E7%94%A8%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我需要编写一个脚本来检查本地帐户是否启用了密码或仅仅是空白密码。我猜它们是同一件事,是吗?
我在 Google 上搜索并尝试了密码 -S 用户命令,但得到的只是一个错误。我必须在本地终端控制台上运行它吗?还是有办法将其转换为脚本?
我是新手,所以我对脚本的概念仍然有点困惑。基本上我必须在其中一个文本编辑器中编写脚本,将其保存为.sh 文件,授予它 RWX 权限,然后通过终端运行它,对吗?
答案1
用户的密码存储在/etc/shadow
文件中。该文件由 - 分隔的字段组成:
。第二个字段是密码。如果设置了密码,则会显示哈希值。如果帐户被禁用或没有密码,则会显示!
或不显示任何内容。
您可以使用如下脚本:
#!/bin/bash
input="$1"
passwordField=$(cat /etc/shadow | grep "$1" | cut -d ':' -f 2)
echo "Password field contains: ${passwordField}"
if [[ "${passwordField}x" == "x" || "$passwordField" == '!' ]]; then
echo "Password is not set or account is disabled"
else
echo "Password is set"
fi
将此文本存储在文件中。使用以下命令使文件可执行chmod +x filename
,并以 root 用户身份运行该文件,并使用用户名作为参数:
root@frisbee:~# ./checkpw.sh test1
Password field contains: $6$WLmjys98$70x/mzE/syE4CGgK9GvcN0Bz1b9.6Ka.JsZQ7W9OFwvTx17MKtQegQKVweaRl5M3X.Wm/EDdBOEEfdalDR225/
Password is set
root@frisbee:~# passwd -d test1
passwd: password expiry information changed.
root@frisbee:~# ./checkpw.sh test1
Password field contains:
Password is not set or account is disabled
这个简单的脚本确实有一个限制,如果提供的参数是两个或多个用户名的一部分,它将没有可靠的输出。