假设我正在等待一个长时间运行的命令完成。
在我能够输入第二个命令之前,当第一个命令完成并且提示符返回时,输入的文本将被保留(如果我按下回车键,甚至会执行第二个命令)。
这种情况不再发生,我不记得更新 zsh、iTerm Mac OS 客户端或我的 Ubuntu 服务器中的任何东西。
我不知道该用 Google 搜索什么,我也想不出该用什么搜索词。而且我的标签可能会误导我。希望有人能给我指明正确的方向
示例 A:执行第二条命令
期望
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me /media/me/disk<enter>
$ ls -ld /media/me/disk
drwxr-xr-x 2 me me 2 Sep 18 21:37 /media/sarnobat/videos_10G
实际的
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me:me /media/me/disk<enter>
$ ls -ld /media/me/disk
drwxr-xr-x 2 root root 2 Sep 18 21:37 /media/sarnobat/videos_10G
第二条命令未执行。
示例 B:保留第二条命令文本
期望
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me /med
$ sudo chown me /med
实际的
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me /med
$
我在前一个命令完成之前开始输入的不完整命令消失了。
它
sudo
会吃掉过早的输入。它的
use_pty
选项(在 中sudoers
)最近被切换为默认启用,以防止类似 CVE-2005-4890 的攻击。我假设您的系统最近收到了此更改,从而导致行为发生变化。use_pty
需要有一个进程在运行(本身sudo
或其分支),该进程不断在“主机”和“客户机”tty 之间来回转发数据。这种设计必然意味着您输入的任何内容都会被立即使用并转发到正在 下运行的任何内容sudo
。如果该进程退出而不使用它,它就会丢失。吃掉您的输入不是 的故意决定sudo
,而是这种设计的必然副作用。您可以恢复到不分配新 tty 的旧行为。在这种情况下,
sudo
不会消耗过早的输入。但是,您可能会受到涉及 的攻击ioctl(TIOCSTI)
,这种攻击如今已从 Linux 系统中淘汰和删除(但我不确定 macOS 是否如此)。据我了解,根据您的系统,安全问题可能是也可能不是有效的。如果用户对用户
X
执行操作,则恶意应用程序可能会以用户身份运行,从而对用户造成不良影响,这是我们不希望发生的。在这种情况下,这是一个真正的威胁。sudo
Y
Y
X
大概在相当多的单用户系统上,其唯一目的
sudo
是以提升的(root)权限运行某些选定的工具,在这种情况下,如果所述工具是恶意的,那么所有的赌注都已经输了。在这种情况下,它只是在已经打开了许多扇门的地方打开了另一扇门。在这样的设置下,我会放心地禁用该use_pty
选项。免责声明:我不承担任何责任。(更新:另请参阅https://github.com/sudo-project/sudo/issues/338)非常感谢您提出这个问题!多年来,我一直因为
sudo apt-get
过早输入信息而烦恼,现在您促使我去调查并了解发生了什么 :)