检查密码linux用户

时间:2017-10-30 10:33:30

标签: linux bash perl encryption

我在debian 9。 我在脚本中检查linux用户的密码时遇到问题。我意识到用于创建和修改用户密码的不同linux工具在/etc/shadow

中给出了不同模式的结果

创建用户

pwLinux="abcdef1234"
userLinux="toto02"
pwCrypt=$(perl -e 'print crypt($ARGV[0], "zzz")' $pwLinux)
useradd -m -G adm,dip,plugdev,www-data,sudo -p $pwCrypt $userLinux

我在/etc/shadow

toto02:zzDxrNjXuUs3U:17469:0:99999:7:::

在另一个脚本中,我希望检查密码由用户输入

USERNAME="toto02"
PASSWD="abcdef1234"
ORIGPASS=`grep -w "$USERNAME" /etc/shadow | cut -d: -f2`
ORIGPASS=`echo $ORIGPASS | cut -d"$" -f2`

GENPASS=$(perl -e 'print crypt($ARGV[0], "zzz")' $PASSWD)
if [ "$GENPASS" == "$ORIGPASS" ]; then
   echo "Valid Password"
   exit 0
else
   echo "Invalid Password"
   exit 1
fi

没关系 问题从这里开始:如果我想在脚本中更改密码,我会使用

# username "toto02", newPwd "aabbcc"
echo "${username}:${newPwd}" | chpasswd

我不能使用passwd因为一切都必须在没有交互性的情况下完成。

我在/etc/shadow

toto02:$6$rLklwx9K$Brv4lvNjR.S7f8i.Lmt8.iv8pgcbKhwDgINzhT1XwCBbD7XkB98lCtwUK3/4hdylkganoLuh/eIc38PtMArgZ/:17469:0:99999:7:::

如果我想检查此密码,我必须使用其他脚本 第一个问题如何在两种情况下都使用相同的密码模式?

我用:

#!/bin/bash

USERNAME="toto02"
PASSWD="aabbcc"
ORIGPASS=`grep -w "$USERNAME" /etc/shadow | cut -d: -f2`
export ALGO=`echo $ORIGPASS | cut -d"$" -f2`
export SALT=`echo $ORIGPASS | cut -d"$" -f3`
echo "algo: -$ALGO-"
echo "salt: -$SALT-"
echo "pwd entré: -$PASSWD-"
echo "shadow:        -$ORIGPASS-"
GENPASS="$(perl -e 'print crypt("$ENV{PSWD}","\$$ENV{ALGO}\$$ENV{SALT}\$")')" 
echo "pwd généré: -$GENPASS-"

if [ "$GENPASS" == "$ORIGPASS" ]; then
   echo "Valid Password"
   exit 0
else
   echo "Invalid Password"
   exit 1
fi

哪个给:

algo: -6-
salt: -rLklwx9K-
pwd entré: -aabbcc-
shadow:        -$6$rLklwx9K$Brv4lvNjR.S7f8i.Lmt8.iv8pgcbKhwDgINzhT1XwCBbD7XkB98lCtwUK3/4hdylkganoLuh/eIc38PtMArgZ/-
pwd généré: -$6$rLklwx9K$AIX1bUMAK9bwdd2g3ST5VtXTvHlHXHxnh4Xj.fLdxjaEkAAvHeeN5islid0wtmZN5u1zWQBup./IP8IH9i6W7/-
Invalid Password

生成的链不同!为什么? 如何治愈呢?
谢谢

2 个答案:

答案 0 :(得分:0)

PSWD替换为PASSWD,并将PASSWD="aabbcc"替换为export PASSWD="aabbcc"

答案 1 :(得分:0)

现在是好的 我已经好几个小时了,我看不到任何东西!

    #!/bin/bash
USERNAME=$1 # "toto02"
    export PASSWD=$2 # "aabbcc"
    ORIGPASS=`grep -w "$USERNAME" /etc/shadow | cut -d: -f2`
    export ALGO=`echo $ORIGPASS | cut -d"$" -f2`
    export SALT=`echo $ORIGPASS | cut -d"$" -f3`
    echo "algo: -$ALGO-"
    echo "salt: -$SALT-"
    echo "pw entré: -$PASSWD-"
    echo "shadow: -$ORIGPASS-"
    GENPASS="$(perl -e 'print crypt("$ENV{PASSWD}","\$$ENV{ALGO}\$$ENV{SALT}\$")')" 
    echo "pass génére: -$GENPASS-"

    if [ "$GENPASS" == "$ORIGPASS" ]; then
       echo "Valid Password"
       exit 0
    else
       echo "Invalid Password"
       exit 1
    fi


algo: -6-
salt: -rYc.lGtG-
pw entré: -aabbcc-
shadow: -$6$rYc.lGtG$wMHAM.nXHk1J5sDRmcHeBLW1sRQA/xQcjJSZxkls4BratyWf.KoQST14pPjNWDiUKwfegC96Lhjgjbj4YbZoc.-
pass génére: -$6$rYc.lGtG$wMHAM.nXHk1J5sDRmcHeBLW1sRQA/xQcjJSZxkls4BratyWf.KoQST14pPjNWDiUKwfegC96Lhjgjbj4YbZoc.-
Valid Password

非常感谢,但有一种方法可以使用useraddchpasswd

来获得相同类型的密码