“無法設置終端程序組”在 su 到另一個使用者作為登錄 shell
注意:請閱讀這篇文章中途以“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 上,只有第一種形式可以正常工作。
忽略 和 之類的變體
sux
,sudo
至少有三個$$ 1 $$su
Linux 上的版本:,coreutils
以及util-linux
Debianshadow-utils
的來源。後者的聯機幫助頁指出:這個版本的 su 有許多編譯選項,其中只有一些可能在任何特定站點上使用。
並且 Debian 帶有標誌
old_debian_behavior
;其他版本可能有類似的編譯時/執行時選項。可變性的另一個原因可能是存在一些爭論$$ 2 $$至於是否su
應該以這種方式放棄特權,以及該TIOCSTI
錯誤是否因此是一個錯誤(Redhat 最初將其關閉為 “WONTFIX”)。$$ 1 $$: 編輯:添加
SimplePAMApps
和hardened-shadow
。 $$ 2 $$:Solar Designer 有一些(舊的)意見,我認為值得一讀。