debian – “无法在su期间将终端进程组设置为另一个用户作为登录shell

注意:请阅读本文中途附近“编辑”开头的更新信息 – 此问题的环境和背景已更改

在这里安装了一个标准的Debian 6.0标准,我决定将其迁移到Debian Testing存储库.我通过在sources.list中交换对Squeeze repos的引用来改为使用Testing repos.

软件包安装和重新启动后,尝试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)

我已经链接the full output of this strace session – 我所做的只是运行su命令,然后立即ctrl d离开终端.

> su – 用户名被su解释为“将用户名的shell作为交互式登录shell运行”
> su username – 由你的su解释为“运行以下非交互式命令( – )作为用户名
>后者只能起作用,因为:

>你的su将尾随参数传递给sh进行解析
> sh take – 表示“作为登录shell运行(读取/ etc / profile,…)”

但你真正感兴趣的是:为什么不互动?在特权父级和非特权级子级之间共享控制终端会使您容易受到“TTY pushback privilege escalation”(即TIOCSTI错误)的攻击,因此除非您确实需要它,否则请使用su detaches from it.当您使用su用户名 – 表单时,请使用su inferred that you didn’t need a controlling terminal.

只有具有控制终端的进程才能拥有操作进程组的会话负责人(进行作业控制);你给的跟踪是bash检测到它不能成为会话领导者.

你提到:

Where it gets stranger is that both forms work fine on Ubuntu and CentOS 6,however on vanilla Debian,only the first form works without error.

忽略sux和sudo之类的变体,Linux上至少有三个[1]版本的su:coreutils,util-linux和shadow-utils来自Debian.后者的联机帮助指出:

This version of su has many compilation options,only some of which may be in use at any particular site.

和Debian的标志是old_debian_behavior;其他版本可能有类似的编译时/运行时选项.可变性的另一个原因可能是有一些debate [2]关于su是否应该用于以这种方式删除权限以及TIOCSTI bug是否因此是一个bug(Redhat最初是closed it “WONTFIX”).

[1]:编辑:添加SimplePAMApps和hardened-shadow.

[2]:Solar Designer有some (old) opinions there,我认为值得一读.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...