$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