我正在为我的操作系统类做一些功课,我们必须使用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,询问用户的用户名,如果用户名是实际登录用户,则询问用户他们的密码,检查它是否是实际用户的密码,如果是,请更改他们输入的新密码。