已复制
全屏展示
复制代码

linux 检测密码是否正确方法

· 1 min read

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"  
🔗

文章推荐