注意:请在这篇文章的中间点附近阅读以“EDIT”开头的更新信息 – 这个问题的环境和背景已经改变
我已经在这里安装了一个bog标准的Debian 6.0,我决定把它放在Debian Testing软件库。 我通过replacesources.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
如果我省略 – ,这不会发生。
请注意,用户可以成为正确的根,这似乎只发生在从根目录切换到其他人,并使用 – 获取该用户的环境。
谷歌在这里大多是无用的。 我能find的唯一的东西就是2011年对sux
软件包的sux
,这些软件似乎在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 -
..也变成一些混乱的行为。 这些消息相当混乱。 一些select的行:
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离开terminal。
su - username
被你的su
解释为“把用户名的shell作为交互式loginshell” su username -
被你的su
解释为“运行下面的非交互式命令( -
)作为用户名 ” su
传递结尾的参数来parsing sh
采取-
意思是“作为loginshell运行(读/etc/profile
,…)” 但是你真正感兴趣的是:为什么非互动 ? 共享特权父母和非特权孩子之间的控制terminal使您容易遭受“ TTY推回特权升级 ”,也就是TIOCSTI
错误,因此除非您确实需要将其从此分离 。 当你使用su username -
forms时, su
推断你不需要控制terminal 。
只有拥有控制terminal的进程才能拥有会话负责人,负责处理进程组(进行作业控制); 你给的踪迹是bash
发现它不能成为会议的领导者。
你提到:
更糟的是,这两种forms在Ubuntu和CentOS 6上都能正常工作,但在Debian中,只有第一种forms没有错误。
忽略像sux
和sudo
这样的变种,Linux上至less有三个版本的su
: coreutils
, util-linux
和shadow-utils
。 后者的手册指出:
这个版本的su有许多编译选项,只有其中的一些可能在任何特定的站点使用。
Debian的标志是old_debian_behavior
; 其他版本可能有类似的编译时/运行时选项。 另一个可变性的原因可能是,是否有人会用su
这样的方式来放弃特权,以及TIOCSTI
bug是否是一个bug(Redhat最初把它closures为“WONTFIX” )。
[1]:编辑:添加SimplePAMApps
和hardened-shadow
。
[2]:太阳能devise师有一些我认为值得一读的老观点 。
我将检查/ dev / pts *上的所有权和权限,或者检查与/ dev / pts设备相关的udev的新configuration,这些configuration在升级过程中未被replace。
你也可以尝试通过以root身份运行找出syscal是否产生错误:
strace -f su - username 2>stderr.log