Mik*_*e B 5 password terminal su
如果这是一个抽象的问题,请道歉 - 我会尽量具体。
当我在 bash shell 并通过 切换到其他帐户时su - foo,系统会提示我输入密码。我在此密码提示下输入的字符在屏幕上是隐藏的,没有指示我输入了多少个字符或它们是什么。bash(或一般的 Linux)是如何做到这一点的?
我相信su可能打开了/dev/tty,将终端驱动程序设置更改为不回显,然后从/dev/tty的文件描述符中读取。
为了测试这个信念,我strace -o su.out su -在我的 Arch linux 笔记本电脑上运行。strace输出的相关部分:
ioctl(0, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon -echo ...}) = 0
write(2, "Password: ", 10) = 10
read(0, "hahanotthis\n", 511) = 7
ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
Run Code Online (Sandbox Code Playgroud)
我不是 100% 错的。su实际上确实从 stdin 读取,但它确实关闭了使用终端控件在 stdin 上的回显ioctl()。在我输入密码su后,再次打开回显,再次使用ioctl()系统调用。
我知道其他一些程序,ftp特别是客户端,确实用于/dev/tty读取密码,这意味着您不能在命令行上输入密码,或者在“此处的文档”中,您必须使用一些恶作剧。
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |