注意:请阅读本文中途附近以“EDIT”开头的更新信息——这个问题的环境和背景已经改变
我在这里安装了一个标准的 Debian 6.0,我决定将其转移到 Debian 测试存储库。为此,我将 sources.list 中对 Squeeze 存储库的引用换成使用 Testing 存储库。
安装包并重新启动后,尝试 su - 给另一个用户时出现以下错误:
root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
如果我省略 -,则不会发生这种情况。
请注意,用户可以正确成为 root,这似乎只有在从 root 切换到其他人并使用 - 获取该用户的环境时才会发生。
谷歌在这里几乎没用。我唯一能找到的是 2011 年关于sux
软件包的参考资料,这些参考资料似乎同时已修复。
这看起来和闻起来都非常像升级错误,可以通过以正确的方式调整正确的包来修复。我只是不知道从哪里开始 - 除此之外,我的系统完全正常并按预期工作。
编辑
如上所述,这现在发生在我的 Debian稳定机器上。这次没有升级或任何东西,只是直接稳定。
是的,一年后。仍然不知道问题到底是什么。
这是现在的样子(没有太大变化):
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
terraria@skaianet:~$ tty
/dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/0
crw--w---- 1 root root 136, 0 Oct 10 19:21 /dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/
crw--w---- 1 root root 136, 0 Oct 10 19:21 0
crw--w---- 1 root root 136, 2 Sep 22 17:47 2
crw--w---- 1 root root 136, 3 Sep 26 19:30 3
c--------- 1 root root 5, 2 Sep 7 10:50 ptmx
像这样生成的 strace:
root@skaianet:~$ strace -f -o tracelog su terraria -
..也出现了一些令人困惑的行为。这些消息相当混乱。一些选择的线路:
readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
#Error code 10?
15503 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
#Yes there is, and I can interact with it normally
15503 ioctl(255, TIOCGPGRP, [32561]) = -1 ENOTTY (Inappropriate ioctl for device)
我已经链接了这个 strace 会话的完整输出——我所做的只是运行 su 命令,然后立即 ctrl+d 退出终端。
su - username
被您解释su
为“将username的 shell 作为交互式登录 shell 运行”su username -
被您解释为“以用户名su
运行以下非交互式命令 (-
) ”su
将尾随参数传递给sh
进行解析sh
意思是-
“作为登录 shell 运行(读取/etc/profile
,...)”但您真正感兴趣的是:为什么是非交互式的?在有特权的父母和没有特权的孩子之间共享控制终端会使您容易受到“ TTY 回退特权升级”的攻击,也就是
TIOCSTI
错误,所以除非您真的需要它,否则请与它su
分离。当您使用su username -
表单时,su
推断您不需要控制终端。只有具有控制终端的进程才能拥有操纵进程组(进行作业控制)的会话领导者;您提供的跟踪
bash
检测到它不能成为会话负责人。你提到:
忽略
sux
和之类的变体,在 Linux上sudo
至少有三个[1]版本:后者的联机帮助页指出:su
coreutils
util-linux
shadow-utils
Debian 的带有标志
old_debian_behavior
;其他版本可能有类似的编译时/运行时选项。可变性的另一个原因可能是关于是否应该使用这种方式放弃特权以及该 错误是否因此根本就是错误(Redhat 最初将其关闭为“WONTFIX” )存在一些争论[2]。su
TIOCSTI
[1]:编辑:添加
SimplePAMApps
并添加hardened-shadow
到那个。[2]:太阳能设计师在那里有一些(旧的)观点,我认为值得一读。
我会检查 /dev/pts* 的所有权和权限,或者检查与 /dev/pts 设备相关的 udev 的新配置,这些配置在升级过程中没有被替换。
您还可以通过以 root 身份运行来尝试找出是什么 syscal 产生了错误: