如何让我的脚本要求输入密码,像 sudo 一样?

如何让我的脚本要求输入密码,像 sudo 一样?

我正在编写一个脚本,如果以错误的方式运行,可能会有危险。作为一项安全功能,我希望该脚本要求用户首先重新输入密码,就像这样sudo做一样。

那么我该怎么做呢?换句话说,我该怎么做

a)输入密码但不回显,

b) 验证密码,并

c)(为了获得加分)这样做不会将明文密码留在内存中,以便让一些聪明的家伙从 /proc 或类似的东西中抓取?

这是可行的,bash但是如果更简单的话,任何其他标准 Linux shell 变体也可以。

答案1

尝试:

su $USER -c true

然后在$?中测试返回值。例如:

echo "Really delete everything? Enter your password to confirm:"
su $USER -c true && rm -rf $HOME

true只是无操作。

要抑制 su 的输出,你可以重定向 stderr:

echo -n "Enter password for $USER:"
su $USER -c true 2>/dev/null  && echo -e "\nsuccess" || echo -e "\nfailure"

您不能省略 -c [command] 参数,因为这将创建一个新的 bash 交互式实例(无论您是否将其分组到子 shell 中):

$ ((su $USER ) && echo ok) ; echo "exit status:$?"
Password: 
$ echo $SHLVL 
2
$ exit
ok
exit status:0
$ echo $SHLVL 
1

因此下面评论中的例子:

((su $USER >/dev/null 2>&1) && echo ok) || echo no

没有显示任何内容(除非 su 身份验证失败),因为使用正确的密码,您现在正在嵌套 shell 中工作(所有屏幕输出都重定向)。按 CTRL-D(退出 shell),您将看到回显“ok”。

答案2

我认为这里的最佳做法是通过更改文件权限/所有权来要求管理员权限来运行脚本。这样,您可以使用默认实现,而不必通过构建自定义密码检查功能来重新发明轮子(换句话说,您要求用户以 root 身份登录,在 sudoers 列表中并使用sudo或使用su成为 root)。

右键单击脚本,单击“属性”,然后单击“权限”选项卡以更改权限/所有权。或者使用chmod/chown来执行此操作(有关更多信息,请参阅手册页)。以 root 身份执行所有这些操作。

相关内容