带-S的sudo仍然要求在控制台上输入密码并清除鞭尾盒

时间:2016-11-05 23:25:30

标签: bash shell scripting sudo whiptail

我正在为我的操作系统类做一些功课,我们必须使用bash脚本创建一个登录流程,我遇到问题,因为我想用GUI做这个,所以我开始使用whiptail但是当我检查对于用户在etc / shadow文件夹中输入的密码的有效性,即使我使用-S参数将密码传递给它,sudo仍会在控制台上询问密码。这是我正在做的事情的一个例子

realUser=$(whoami)
user=$(whiptail --title "Change password" --inputbox "Please enter your password" 10 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
  if [ "$user" == "$realUser" ]
  then
    currentPass=$(whiptail --title "Current Password" --passwordbox "Please enter your current password" 10 60 3>&1 1>&2 2>&3)
    exitstatus=$?
    if [ $exitstatus = 0 ]; then
     password=$( sudo -S <<< $currentPass grep -w $realUser /etc/shadow | cut -d: -f2)
     userId=$(echo "$password" | cut -f2 -d$)
     userSalt=$(echo "$password" | cut -f3 -d$)
     userPassword=$(echo "$password" | cut -f4 -d$)
     encryptedPass=$(perl -e "print crypt('$currentPass','\$$userId\$$userSalt\$'); \n")
     if [ "$currentPass" == "$encryptedPass" ]
     then
      #Do change the password
 .....

问题是我执行此命令时

password=$( sudo -S <<< $currentPass grep -w $realUser /etc/shadow | cut -d: -f2)

它会清除whiptail并询问sudo通常会做的用户密码,但不是-S <<< $currentPass通过stdin传递密码所以它不需要它吗?

我不知道我是否明确指出,我想要做的是,使用whiptail,询问用户的用户名,如果用户名是实际登录用户,则询问用户他们的密码,检查它是否是实际用户的密码,如果是,请更改他们输入的新密码。

0 个答案:

没有答案