Ssh
login-shell 是否需要創建 utmp 條目?
我的觀察:
- 如果我打開一個新終端*(gnome/lx)* :
- 使用新的**/dev/pts/X**
who
沒有列出這些echo $0
is not的第一個字元-
,因此它不是登錄外殼。
- 如果我
ssh
用同一個使用者進入同一台機器
- 使用新的**/dev/pts/X**
who
列出這些echo $0
is的第一個字元-
,所以它是一個登錄外殼。
- 如果我打開一個新的tty (ctrl-alt-Fxx)
- 使用新的**/dev/** ttyXX
who
列出這些echo $0
is的第一個字元-
,所以它是一個登錄外殼。
- 如果我跑
su -
- 使用相同的**/dev/pts/X** (在哪裡
su -
發布)who
沒有列出這些echo $0
is的第一個字元-
,所以它是一個登錄外殼。結論:
- 創建新 pty 不會自動在 utmp (?) 中創建條目
問題:
- 如果
who
顯示目前登錄使用者的列表,那麼它應該顯示每個登錄外殼 (?) 的條目。但是它不顯示root使用者登錄的條目su -
,為什麼?**編輯:**此時我可以得出的另一件事是:“它必須是一個新的 pty/tty 和一個登錄 shell,然後在 utmp 中只創建一個新條目”
首先,
who
不關心登錄 shell 或類似的東西。它只是轉儲utmp
條目。您可以擁有非登錄終端的條目;用於圖形會話;用於 FTP 連接(具有完全組成的 tty “線路”名稱);幾乎任何東西。其次,utmp 條目是手動創建的——只有在處理您的登錄的程序呼叫時,您才會獲得一個條目
pututline(…)
。例如, sshd 總是這樣做,終端仿真器經常這樣做(但不總是),su
從不這樣做。(請記住,
su
它不會分配新的 pty,因此它也不能添加 utmp 條目 - 否則您最終會為同一個 tty 獲得多個條目,這可能會使一些程序感到困惑。)