사용자가 스크립트에서 자신의 계정에 대한 비밀번호를 설정했는지 확인하십시오.

사용자가 스크립트에서 자신의 계정에 대한 비밀번호를 설정했는지 확인하십시오.

$user의 계정에 비밀번호가 설정되어 있는지 확인해야 하는 스크립트를 작성하고 있습니다. 어떻게 해야 합니까?

나는이 사실을 알고:

passwd --status username

계정 상태 정보를 표시합니다. 상태 정보는 7개의 필드로 구성됩니다. 첫 번째 필드는 사용자의 로그인 이름입니다. 두 번째 필드는 사용자 계정에 잠긴 비밀번호(L)가 있는지, 비밀번호가 없는지(NP), 사용 가능한 비밀번호가 있는지(P)를 나타냅니다. 세 번째 필드에는 마지막 비밀번호 변경 날짜가 표시됩니다. 다음 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

관련 정보