在针对 RPi 的 Debian 发行版 Raspbian 上,我最终收到以下错误:
$ sudo su -l root -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
...但是,如果我将其更改为sudo su -
,则一切正常。您知道上面的命令行有什么问题吗?这里的主要问题是终端在执行此命令后被中断......
我发现这个错误报告但看起来并没有什么结论。
系统信息
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 7.0 (wheezy)
Release: 7.0
Codename: wheezy
$ dpkg -l |grep sudo
ii libgksu2-0 2.0.13~pre1-6 armhf library providing su and sudo functionality
ii sudo 1.8.5p2-1 armhf Provide limited super user privileges to specific users
笔记
我使用的原因-c /bin/bash
是它实际上看起来更像-c /bin/bash --rcfile /path/to/rcfile
......因此不同于单纯的sudo -i
或sudo su -
等等......
我像上面在问题中那样给出命令行的原因是它是重现问题的最小示例。
答案1
经过一番挖掘,似乎这是目前的预期行为,因为这是一个安全修复。另一方面,我发现它也增加了一个小的安全风险,但在向 Debian 人员报告之前,我必须做更多的挖掘以确保我没有弄错。
这是他们修复的错误:登录:通过 TIOCSTI ioctl 在“su”中可能进行 tty 劫持
我的理解是,该su
命令用于/dev/tty
为被调用的进程保持打开状态,因此该进程即使具有较低的权限也可以在终端中注入代码,这些代码将在su
命令结束后执行。他们通过关闭 tty 来修补它(我想说猴子修补它),这就是新启动的 bash 抱怨的原因。