linux 上用户的密码是加密后存储在/etc/shadow里面的,如果我们要判断某个用户的密码是否正确,需要一些取巧的方法来实现,我们要判断密密码是否匹配,密码是否正确有两种方法:shell、python。
- 第一步:使用 root 用户或者 sudo 来查看 /etc/shadow 里面的指定用户密码,可以看到用户work相关的密码信息,比如:
work:$6$pLp6FrN3$260/6XiDC3L9GRmiXqW6mILGBvu8bt0diVEiM6I5DwUZ02rmXXawgDLuU992weCVDaIamAm3IzlEoykslOV370:18390:0:99999:7:::
- 第二步:使用相同的加密算法计算新的密码,然后判断是否相同,比如:
echo "FlowPass123" | openssl passwd -6 -salt pLp6FrN3 -stdin
- shell 脚本判断密码是否相同
check_pass(){
given_user=$1
given_pass=$2
exist_line=$(sudo grep "^${given_user}:" /etc/shadow)
[ $? != 0 ] && echo "$given_user check is Failed." && exit 1
exist_pass=$(echo $exist_line | awk -F: '{print $2}')
a=$(echo $exist_pass | awk -F\$ '{printf($2)}')
b=$(echo $exist_pass | awk -F\$ '{printf($3)}')
new_pass=$(echo $given_pass | openssl passwd -$a -salt $b -stdin)
if [ "$new_pass" == "$exist_pass" ];then
echo "$given_user check is OK." && exit 0
else
echo "$given_user check is Failed." && exit 1
fi
}
check_pass userxxx passwordxxx
- python 脚本生成密码指定算法的密码
password="givenpass"
salt='$6$xv31PqFfpwun8yzF$'
python -c "import crypt,getpass,pwd,sys; print(crypt.crypt(sys.argv[1], sys.argv[2]))" "$password" "$salt"