spr*_*aff 6 linux unix bash passwords password-protection
我正在编写一个脚本,如果以错误的方式运行,它可能会很危险。作为一项安全功能,我希望脚本要求用户首先重新输入他们的密码,就像这样sudo做一样。
那么我该怎么做呢?换句话说,我如何
a) 输入密码而不回显,
b) 验证密码,以及
c)(为了奖励积分)这样做时不会将明文密码留在内存中,以便一些聪明的人从 /proc 或类似的东西中刮出来?
这是在,bash但如果这更容易的话,任何其他标准的 Linux shell 变体都可以。
尝试:
su $USER -c true
Run Code Online (Sandbox Code Playgroud)
然后测试 $? 中的返回值。例如:
echo "Really delete everything? Enter your password to confirm:"
su $USER -c true && rm -rf $HOME
Run Code Online (Sandbox Code Playgroud)
该true是有单独作为无操作。
要抑制 su 的输出,您可以重定向 stderr:
echo -n "Enter password for $USER:"
su $USER -c true 2>/dev/null && echo -e "\nsuccess" || echo -e "\nfailure"
Run Code Online (Sandbox Code Playgroud)
您不能省略 -c [command] 参数,因为这将创建一个新的 bash 交互式实例(无论您是否将其分组到子外壳中):
$ ((su $USER ) && echo ok) ; echo "exit status:$?"
Password:
$ echo $SHLVL
2
$ exit
ok
exit status:0
$ echo $SHLVL
1
Run Code Online (Sandbox Code Playgroud)
所以下面评论中的例子:
((su $USER >/dev/null 2>&1) && echo ok) || echo no
Run Code Online (Sandbox Code Playgroud)
没有显示任何内容(除非 su 身份验证失败),因为使用正确的密码,您现在正在嵌套的 shell 中工作(重定向所有屏幕输出)。按CTRL-D(退出shell),你会看到“ok”回显。
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |