在su期间,“不能将terminal进程组”设置为loginshell

注意:请在这篇文章的中间点附近阅读以“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没有错误。

忽略像suxsudo这样的变种,Linux上至less有三个版本的sucoreutilsutil-linuxshadow-utils 。 后者的手册指出:

这个版本的su有许多编译选项,只有其中的一些可能在任何特定的站点使用。

Debian的标志是old_debian_behavior ; 其他版本可能有类似的编译时/运行时选项。 另一个可变性的原因可能是,是否有人会用su这样的方式来放弃特权,以及TIOCSTI bug是否是一个bug(Redhat最初把它closures为“WONTFIX” )。

[1]:编辑:添加SimplePAMAppshardened-shadow

[2]:太阳能devise师有一些我认为值得一读的老观点 。

我将检查/ dev / pts *上的所有权和权限,或者检查与/ dev / pts设备相关的udev的新configuration,这些configuration在升级过程中未被replace。

你也可以尝试通过以root身份运行找出syscal是否产生错误:

 strace -f su - username 2>stderr.log