ユーザーがスクリプトで自分のアカウントのパスワードを設定したことを確認します。

ユーザーがスクリプトで自分のアカウントのパスワードを設定したことを確認します。

$userのアカウントにパスワードが設定されていることを確認する必要があるスクリプトを作成しています。どうすればいいですか?

私はこれを知っています:

passwd --status username

アカウントステータス情報を表示します。ステータス情報は7つのフィールドで構成されています。最初のフィールドはユーザーのログイン名です。 2番目のフィールドは、ユーザーアカウントにロックされたパスワード(L)があるか、パスワードがないか(NP)、使用可能なパスワードがあるか(P)を示します。 3番目のフィールドには、最後のパスワード変更日が表示されます。次の4つのフィールドは、パスワードの最小期間、最大期間、警告期間、および非アクティブ期間です。この年齢は日単位で表示されます。

しかし、適応できるものが必要です。if test

コードは次のとおりです。

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

答え1

の出力は、passwd --statusユーザーにパスワードがないか(「パスワードがない(NP)」)かを示すため、次のことが確認できます。

if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
    echo "$i doesn't have a password."
fi

または:

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

答え2

どうですか?

if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi

答え3

/etc/passwordアクセス権があればチェックインもできます。

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

関連情報