
Estoy escribiendo un script y necesito verificar $user si su cuenta tiene una contraseña establecida, ¿cómo puedo hacer esto?
Sé sobre esto:
passwd --status username
Mostrar información del estado de la cuenta. La información de estado consta de 7 campos. El primer campo es el nombre de inicio de sesión del usuario. El segundo campo indica si la cuenta de usuario tiene una contraseña bloqueada (L), no tiene contraseña (NP) o tiene una contraseña utilizable (P). El tercer campo proporciona la fecha del último cambio de contraseña. Los siguientes cuatro campos son la edad mínima, la edad máxima, el período de advertencia y el período de inactividad de la contraseña. Estas edades se expresan en días.
pero necesito algo que pueda caber en unif test
Aquí está el 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
Respuesta1
Dado que el resultado de passwd --status
indica si el usuario no tiene contraseña ("no tiene contraseña (NP)"), puede verificar que:
if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
echo "$i doesn't have a password."
fi
O:
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
Respuesta2
Qué tal si:
if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi
Respuesta3
También podemos registrarnos /etc/password
si tenemos acceso.
if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then
echo "User has passwd" ;
else
echo "NO passwd";
fi