Ssh

login-shell 是否需要創建 utmp 條目?

  • August 28, 2017

我的觀察:

  1. 如果我打開一個新終端*(gnome/lx)* ​​:
  • 使用新的**/dev/pts/X**
  • who沒有列出這些
  • echo $0is not的第一個字元-,因此它不是登錄外殼。
  1. 如果我ssh用同一個使用者進入同一台機器
  • 使用新的**/dev/pts/X**
  • who列出這些
  • echo $0is的第一個字元-,所以它是一個登錄外殼。
  1. 如果我打開一個新的tty (ctrl-alt-Fxx)
  • 使用新的**/dev/** ttyXX
  • who列出這些
  • echo $0is的第一個字元-,所以它是一個登錄外殼。
  1. 如果我跑su -
  • 使用相同的**/dev/pts/X** (在哪裡su -發布)
  • who沒有列出這些
  • echo $0is的第一個字元-,所以它是一個登錄外殼。

結論:

  1. 創建新 pty 不會自動在 utmp (?) 中創建條目

問題:

  1. 如果who顯示目前登錄使用者的列表,那麼它應該顯示每個登錄外殼 (?) 的條目。但是它不顯示root使用者登錄的條目su -,為什麼?

**編輯:**此時我可以得出的另一件事是:“它必須是一個新的 pty/tty 和一個登錄 shell,然後在 utmp 中只創建一個新條目”

首先,who不關心登錄 shell 或類似的東西。它只是轉儲utmp條目。您可以擁有非登錄終端的條目;用於圖形會話;用於 FTP 連接(具有完全組成的 tty “線路”名稱);幾乎任何東西。

其次,utmp 條目是手動創建的——只有在處理您的登錄的程序呼叫時,您才會獲得一個條目pututline(…)。例如, sshd 總是這樣做,終端仿真器經常這樣做(但不總是),su從不這樣做。

(請記住,su它不會分配新的 pty,因此它也不能添加 utmp 條目 - 否則您最終會為同一個 tty 獲得多個條目,這可能會使一些程序感到困惑。)

引用自:https://unix.stackexchange.com/questions/388260