微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 为什么密码输入在管道sudo命令中工作?

如果我做:
sudo cat /etc/resolv.conf | less

它会提示我输入密码,即使较少(可能)需要密码.什么fd是显示的密码提示,它是如何获得输入的?

解决方法

实际上,典型的sudo调用根本不会从stdin读取密码.相反,sudo将直接访问控制终端(tty或pty,通过/ dev / tty特殊文件)并输出提示并直接读取字符.这可以在sudo源代码中的tgetpass.c文件中看到.

还有一些其他方案:

>如果指定了askpass程序,例如在-A param中,将调用该程序.
>否则,如果您特别请求sudo从stdin读取,例如使用-S标志 – 它还会将提示写入stderr.这是MadHatter’s answer适用的情况.
>否则,如果没有tty可用

>如果禁用密码echo(认情况下,由sudoers中的visiblepw标志控制),sudo将报告错误:no tty present并且没有指定askpass程序
>否则,即使没有特别要求,sudo也会回退到使用stdin和stderr. MadHatter’s answer也适用于此.

原文地址:https://www.jb51.cc/linux/402923.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐