
Ich schreibe ein Skript und muss bei $user prüfen, ob für sein Konto ein Kennwort festgelegt ist. Wie kann ich das tun?
Das kenne ich:
passwd --status username
Zeigt Informationen zum Kontostatus an. Die Statusinformationen bestehen aus 7 Feldern. Das erste Feld ist der Anmeldename des Benutzers. Das zweite Feld gibt an, ob das Benutzerkonto ein gesperrtes Passwort (L), kein Passwort (NP) oder ein verwendbares Passwort (P) hat. Das dritte Feld gibt das Datum der letzten Passwortänderung an. Die nächsten vier Felder sind das Mindestalter, das Höchstalter, die Warnfrist und die Inaktivitätsdauer für das Passwort. Diese Altersangaben werden in Tagen angegeben.
aber ich brauche etwas, das passt in einif test
Hier ist der Code:
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
Antwort1
Da die Ausgabe von passwd --status
angibt, ob der Benutzer kein Passwort hat („has no password (NP)“), können Sie Folgendes überprüfen:
if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
echo "$i doesn't have a password."
fi
Oder:
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
Antwort2
Wie wäre es mit:
if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi
Antwort3
Wir können auch einchecken, /etc/password
wenn wir Zugriff haben.
if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then
echo "User has passwd" ;
else
echo "NO passwd";
fi