
Estou escrevendo um script e preciso verificar $user se a conta dele tem uma senha definida, como posso fazer isso?
Eu sei disso:
passwd --status username
Exibir informações de status da conta. As informações de status consistem em 7 campos. O primeiro campo é o nome de login do usuário. O segundo campo indica se a conta do usuário possui senha bloqueada (L), não possui senha (NP) ou possui senha utilizável (P). O terceiro campo fornece a data da última alteração de senha. Os próximos quatro campos são idade mínima, idade máxima, período de aviso e período de inatividade da senha. Essas idades são expressas em dias.
mas preciso de algo que caiba em umif test
Aqui está o código:
userPass()
{
for i in "#@"
do
if [ "$i" = root ]
then
continue
else
echo "Changing password for $i:"
echo $i:$i"YOURSTRONGPASSWORDHERE" | chpasswd
if [ "$?" = 0 ]
then
echo "Password for user $i changed successfully"
fi
fi
done
}
userPass $1 $2 $3
Responder1
Como a saída de passwd --status
indica se o usuário não possui senha ("não possui senha (NP)"), você pode verificar se:
if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
echo "$i doesn't have a password."
fi
Ou:
case $(passwd --status "$i" | awk '{print $2}') in
NP) echo "$i doesn't have a password."
# set password here.
;;
L) echo "$i's account is locked." ;;
P) echo "$i has a password." ;;
esac
Responder2
Que tal:
if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi
Responder3
Também podemos fazer check-in /etc/password
se tivermos acesso.
if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then
echo "User has passwd" ;
else
echo "NO passwd";
fi