AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 411307
Accepted
Mikey T.K.
Mikey T.K.
Asked: 2012-07-26 18:22:22 +0800 CST2012-07-26 18:22:22 +0800 CST 2012-07-26 18:22:22 +0800 CST

su 期间“无法设置终端进程组”到另一个用户作为登录 shell

  • 772

注意:请阅读本文中途附近以“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 退出终端。

debian
  • 2 2 个回答
  • 35823 Views

2 个回答

  • Voted
  1. Best Answer
    ZakW
    2014-06-17T05:29:10+08:002014-06-17T05:29:10+08:00
    • su - username被您解释su为“将username的 shell 作为交互式登录 shell 运行”
    • su username -被您解释为“以用户名su运行以下非交互式命令 ( -) ”
    • 后者之所以有效,是因为:
      • 您su将尾随参数传递给sh进行解析
      • sh意思是-“作为登录 shell 运行(读取/etc/profile,...)”

    但您真正感兴趣的是:为什么是非交互式的?在有特权的父母和没有特权的孩子之间共享控制终端会使您容易受到“ TTY 回退特权升级”的攻击,也就是TIOCSTI错误,所以除非您真的需要它,否则请与它su 分离。当您使用su username -表单时,su 推断您不需要控制终端。

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

    你提到:

    奇怪的是,这两种形式在 Ubuntu 和 CentOS 6 上都可以正常工作,但是在普通的 Debian 上,只有第一种形式可以正常工作。

    忽略sux和之类的变体,在 Linux上sudo至少有三个[1]版本:后者的联机帮助页指出:sucoreutilsutil-linuxshadow-utils

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

    Debian 的带有标志old_debian_behavior;其他版本可能有类似的编译时/运行时选项。可变性的另一个原因可能是关于是否应该使用这种方式放弃特权以及该 错误是否因此根本就是错误(Redhat 最初将其关闭为“WONTFIX” )存在一些争论[2]。suTIOCSTI

    [1]:编辑:添加SimplePAMApps并添加hardened-shadow到那个。

    [2]:太阳能设计师在那里有一些(旧的)观点,我认为值得一读。

    • 34
  2. Mircea Vutcovici
    2012-07-26T19:22:40+08:002012-07-26T19:22:40+08:00

    我会检查 /dev/pts* 的所有权和权限,或者检查与 /dev/pts 设备相关的 udev 的新配置,这些配置在升级过程中没有被替换。

    您还可以通过以 root 身份运行来尝试找出是什么 syscal 产生了错误:

    strace -f su - username 2>stderr.log
    
    • 1

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve