A senha de um usuário é armazenada no arquivo /etc/shadow
. O arquivo consiste em campos :
-seperated. O segundo campo é a senha. Se uma senha for definida, um hash será mostrado. Se uma conta estiver desativada ou não tiver senha, ela mostrará !
ou nada.
Você pode usar um script como este:
#!/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
Armazene este texto em um arquivo. Torne o arquivo executável com chmod +x filename
e execute o arquivo como usuário root com o nome de usuário como argumento:
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
Este script simples tem a limitação de que, se o argumento fornecido fizer parte de dois ou mais nomes de usuário, ele não terá saída confiável.