为什么 chvt 作为普通用户可以在虚拟终端上正常工作,但在 X 下却不行?

为什么 chvt 作为普通用户可以在虚拟终端上正常工作,但在 X 下却不行?

当我以用户“paul”身份登录虚拟终端(例如 /dev/tty2)并输入“chvt 4”时,我就可以正常切换到 /dev/tty4 的虚拟终端。

当我以用户“paul”的身份输入“chvt 7”时,我就切换到了 X 窗口系统。一切正常。

然而...在 xterm 中,如果我以用户“paul”的身份输入“chvt 2”,则会收到以下错误:“无法获取指向控制台的文件描述符”

仅当我以“root”身份运行 xterm 时,chvt 命令才在 xterm 中起作用,在这种情况下,它会很乐意将我切换到虚拟终端。

我觉得这太不合理了。有人知道为什么会这样吗?

答案1

从安全角度来看,回想一下,X 的设计初衷是既可以在网络上使用,也可以在物理控制台上使用。虚拟终端则不然,因此在物理 VT 上登录与在 X 上登录是不同的安全问题。

这个 Debian 错误报告中出现同样的错误。以下是朋友无法从 X 访问它的fgconsole原因分析:chvt

它不仅影响 fgconsole,还影响chvt任何openvt其他尝试获取控制台文件描述符的 kbd 实用程序。这些程序通过尝试打开/ioctl 这些文件来完成它们的工作(按此顺序)

/proc/self/fd/0         (is a pseudo tty in your case)
/dev/tty                (also PTY)
/dev/tty0               (only accessible to root)
/dev/vc/0               (doesn’t exist nowadays)
/dev/console            (root)
std{in,out,err}         (PTY)

由于这些都无法响应 ioctl VT_GETSTATE,因此 fgconsole 和朋友失败。

解决该问题的首选方法是使用sudo。还有其他选项,但由于安全问题,它们在一般情况下不太可取——您可以决定您的情况可以容忍其中一种(强调我的):

那么,如果我不使用 sudo,就没有真正的解决方案吗?

/dev/tty0您无法更改或的权限/dev/console 无需打开巨大的安全漏洞。设置所需程序的 suid 是一种选择,但我会远离它。 sudo更安全并且可以更详细地控制。

相关内容