Überprüfen Sie in einem Skript, ob der Benutzer für sein Konto ein Kennwort festgelegt hat

Überprüfen Sie in einem Skript, ob der Benutzer für sein Konto ein Kennwort festgelegt hat

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 --statusangibt, 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/passwordwenn wir Zugriff haben.

if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then 
   echo "User has passwd" ; 
else 
   echo "NO passwd";
fi

verwandte Informationen