Debian

“無法設置終端程序組”在 su 到另一個使用者作為登錄 shell

  • June 16, 2014

注意:請閱讀這篇文章中途以“EDIT”開頭的更新資訊——這個問題的環境和背景已經改變

我在這里安裝了一個沼澤標準 Debian 6.0,我決定將其側級到 Debian 測試儲存庫。我通過在我的 sources.list 中交換對 Squeeze 儲存庫的引用來使用測試儲存庫來做到這一點。

安裝包並重新啟動後,嘗試 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 切換到其他人並使用 - 獲取該使用者的環境時。

Google在這裡幾乎沒用。我能找到的唯一東西是 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意思是-“作為登錄外殼執行(讀取/etc/profile,…)”

但你真正感興趣的是:為什麼非互動式?在特權父母和非特權孩子之間共享控制終端會使您容易受到“ TTY pushback privilege escalation ”的影響,也就是TIOCSTI錯誤,所以除非您真的需要它,否則它su 會與它分離。當您使用su username -表單時,su 推斷您不需要控制終端

只有具有控制終端的程序才能擁有操縱程序組(進行作業控制)的會話領導者;您提供的跟踪bash檢測到它不能成為會話負責人。

你提到:

奇怪的是,這兩種形式在 Ubuntu 和 CentOS 6 上都可以正常工作,但是在 vanilla Debian 上,只有第一種形式可以正常工作。

忽略 和 之類的變體suxsudo至少有三個$$ 1 $$suLinux 上的版本:,coreutils以及util-linuxDebianshadow-utils的來源。後者的聯機幫助頁指出:

這個版本的 su 有許多編譯選項,其中只有一些可能在任何特定站點上使用。

並且 Debian 帶有標誌old_debian_behavior;其他版本可能有類似的編譯時/執行時選項。可變性的另一個原因可能是存在一些爭論$$ 2 $$至於是否su應該以這種方式放棄特權,以及該 TIOCSTI錯誤是否因此是一個錯誤(Redhat 最初將其關閉為 “WONTFIX”)。

$$ 1 $$: 編輯:添加SimplePAMAppshardened-shadow。 $$ 2 $$:Solar Designer 有一些(舊的)意見,我認為值得一讀。

引用自:https://serverfault.com/questions/411307